Не удается открыть графические приложения в WSL2 на Arch, но работает на Ubuntu.

Вопрос или проблема

Я пытаюсь запустить программу с графическим интерфейсом на Arch, но она жалуется, что не может инициализировать GTK. Та же самая программа отлично работает на Ubuntu. На обеих дистрибуциях установлено DISPLAY на :0.

Графические программы работали, как ожидалось, несколько дней назад, и я не помню, чтобы что-то менял, что могло бы быть связано.

Я пытался запустить X-сервер с помощью XLaunch, что, похоже, не дало никакого эффекта.
Перезапуск WSL и моего компьютера не решил проблему, равно как и обновление Arch или WSL.
Запуск других графических программ, таких как gtkwave или xterm, дал тот же результат. (xterm говорит Can't open display :0)
Путешествие во времени не сработало, так как у меня нет доступа к машине времени.
Программы работают как ожидалось в Ubuntu, однако я бы предпочел использовать Arch, когда возможно.

Проблема решена (по крайней мере, обходным путем) в комментариях. И я теперь заметил, что на этой неделе появилось 3 связанных вопроса об этом, так что может быть значительная проблема.

Я полагаю, что здесь есть общая тема:

  1. Недавнее обновление WSL2 до версии 2.1.5 (или 1 предыдущей бета-версии)
  2. Включен Systemd
  3. Дистрибуция не-Ubuntu (возможно, не-Debian)

Если у вас нет хотя бы первых двух из этих пунктов, то вы, вероятно, сталкиваетесь с другой проблемой. Я предполагаю, что это возможно для проблемы возникнуть на Ubuntu, но что-то в текущем порядке загрузки Systemd на этом дистрибутиве, похоже, работает, чтобы избежать проблемы в большинстве случаев.

Для данного вопроса, проблема возникла при запуске Systemd внутри Arch на WSL2 версии 2.1.4, и была решена при отключении Systemd.

Это приводит к …

Вариант 1: Отключить Systemd

Если вам не нужен Systemd в WSL. Выполните:

sudo -e /etc/wsl.conf

Если у вас есть:

[boot]
systemd=true

То либо закомментируйте строку system, либо установите ее на false.

Завершите работу WSL (или завершите экземпляр) и перезапустите. Это можно сделать через PowerShell с помощью:

wsl --shutdown

Вариант 2: Создать ссылку для сокета X11

Если вы все еще нуждаетесь или хотите запускать Systemd, есть другой ответ здесь на Super User с решением, которое, как я считаю, может решить проблему. Решение из этого ответа заключается в следующем:

rmdir /tmp/.X11-unix && ln -s /mnt/wslg/.X11-unix /tmp/.X11-unix

Этот ответ также включает Systemd-юнит для автоматической обработки этого при каждом запуске. Однако я рекомендую время от времени проверять, есть ли сообщения о том, что проблема решена, чтобы вы могли прекратить это ручное создание ссылок в будущем. Это возможно (но не ожидается) может мешать другим операциям.


Для справки, этот ответ (на данный момент закрыт, но, вероятно, будет удален в какой-то момент) является еще одним случаем, с обновлением WSL, OpenSUSE Tumbleweed и включенным Systemd. Отключение Systemd также решило этот случай.

Ответ или решение

Сложности при запуске графических приложений в WSL2 на Arch, которые не возникают на Ubuntu, могут вызывать определенные затруднения. Рассмотрим эту проблему подробнее.

Контекст Проблемы

Вы пытаетесь запустить программу с графическим интерфейсом на Arch Linux в среде WSL2, но получаете сообщение об ошибке, связанное с инициализацией GTK. В то же время, та же программа успешно запускается на Ubuntu. Оба дистрибутива имеют переменную окружения DISPLAY, настроенную на :0. Проблемы появились недавно, несмотря на то, что никаких значимых изменений с вашей стороны не было произведено.

Возможная Причина

Согласно предоставленным данным, проблема может быть связана с обновлением WSL2 до версии 2.1.5 или одной из предыдущих бета-версий. Важно отметить, что данная проблема наблюдается, как правило, на дистрибутивах, отличных от Ubuntu и Debian. Основной причиной является включенный systemd на Arch Linux, который может конфликтовать с работой X сервера в WSL2.

Решение Проблемы

Опция 1: Отключить Systemd

Если вы не нуждаетесь в использовании systemd в WSL:

  1. Откройте конфигурационный файл для редактирования:

    sudo -e /etc/wsl.conf
  2. Если вы видите следующую конфигурацию:

    [boot]
    systemd=true
  3. Закомментируйте строку или измените значение на false.

  4. Остановите WSL и перезапустите его через PowerShell командой:

    wsl --shutdown

Опция 2: Создание Символической Ссылки для Сокета X11

Если systemd необходим или вы предпочитаете его оставить:

  1. Удалите существующий каталог и создайте символическую ссылку, направленную на корректный сокет:

    rmdir /tmp/.X11-unix && ln -s /mnt/wslg/.X11-unix /tmp/.X11-unix

Кроме того, можно автоматизировать создание символической ссылки при запуске системы, написав соответствующий unit-файл для systemd.

Заключение

Обратите внимание, что отключение systemd может временно решить вашу проблему. Рекомендуется следить за обновлениями, чтобы своевременно узнать о возможных исправлениях этой ситуации в будущих релизах WSL. Для дополнительной информации и подсказок посетите ссылки на ресурсы сообщества, включая обсуждения на Super User и Stack Overflow.

Внимательно следите за обновлениями и планируйте изменение конфигураций на базовом уровне, чтобы минимизировать потенциальные сбои в работе ваших рабочих процессов.

Оцените материал
Добавить комментарий

Капча загружается...