Вопрос или проблема
Я пытаюсь запустить программу с графическим интерфейсом на Arch, но она жалуется, что не может инициализировать GTK. Та же самая программа отлично работает на Ubuntu. На обеих дистрибуциях установлено DISPLAY
на :0
.
Графические программы работали, как ожидалось, несколько дней назад, и я не помню, чтобы что-то менял, что могло бы быть связано.
Я пытался запустить X-сервер с помощью XLaunch
, что, похоже, не дало никакого эффекта.
Перезапуск WSL и моего компьютера не решил проблему, равно как и обновление Arch или WSL.
Запуск других графических программ, таких как gtkwave
или xterm
, дал тот же результат. (xterm говорит Can't open display :0
)
Путешествие во времени не сработало, так как у меня нет доступа к машине времени.
Программы работают как ожидалось в Ubuntu, однако я бы предпочел использовать Arch, когда возможно.
Проблема решена (по крайней мере, обходным путем) в комментариях. И я теперь заметил, что на этой неделе появилось 3 связанных вопроса об этом, так что может быть значительная проблема.
Я полагаю, что здесь есть общая тема:
- Недавнее обновление WSL2 до версии 2.1.5 (или 1 предыдущей бета-версии)
- Включен Systemd
- Дистрибуция не-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:
-
Откройте конфигурационный файл для редактирования:
sudo -e /etc/wsl.conf
-
Если вы видите следующую конфигурацию:
[boot] systemd=true
-
Закомментируйте строку или измените значение на
false
. -
Остановите WSL и перезапустите его через PowerShell командой:
wsl --shutdown
Опция 2: Создание Символической Ссылки для Сокета X11
Если systemd необходим или вы предпочитаете его оставить:
-
Удалите существующий каталог и создайте символическую ссылку, направленную на корректный сокет:
rmdir /tmp/.X11-unix && ln -s /mnt/wslg/.X11-unix /tmp/.X11-unix
Кроме того, можно автоматизировать создание символической ссылки при запуске системы, написав соответствующий unit-файл для systemd.
Заключение
Обратите внимание, что отключение systemd может временно решить вашу проблему. Рекомендуется следить за обновлениями, чтобы своевременно узнать о возможных исправлениях этой ситуации в будущих релизах WSL. Для дополнительной информации и подсказок посетите ссылки на ресурсы сообщества, включая обсуждения на Super User и Stack Overflow.
Внимательно следите за обновлениями и планируйте изменение конфигураций на базовом уровне, чтобы минимизировать потенциальные сбои в работе ваших рабочих процессов.