Вопрос или проблема
У меня есть настройка для запуска программ с графическими интерфейсами в Ubuntu с MobaXterm и Windows Subsystem for Linux 2. В моем .bashrc я устанавливаю переменную DISPLAY с помощью export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0
. Теперь это, похоже, не работает на моем рабочем ethernet или Wifi соединении – если я запускаю программу, такую как emacs, в терминале Ubuntu, она просто зависает, и мне нужно прервать её с помощью Ctrl+C, а затем я получаю вывод “Display … unavailable” (где … это значение DISPLAY).
Вопрос в том, знает ли кто-либо, что можно сделать сейчас, чтобы разрешить использование графических интерфейсов в Ubuntu с MobaXterm и WSL2?
Это работает, когда я подключен к своему домашнему Wifi, но не когда использую телефон в качестве точки доступа. Я также могу запускать графические интерфейсы из собственных экземпляров терминала MobaXterm (которые, как я предполагаю, не работают на Ubuntu). Я создал эту настройку в середине 2020 года, и она работала в моей рабочей сети, по крайней мере, до 19 декабря 2023 года – мне не нужно было часто использовать эту настройку какое-то время, и я не записывал точно, когда я использовал её успешно с тех пор. Я упоминаю это, так как этот пост говорит о том, что обновление Windows 23H2 сломало пересылку X11 для них, так что проблема может быть связана с обновлениями, но их настройка отличается от моей, и упомянутые там решения (использование ip route
или не установка DISPLAY) не работают для меня.
Я попробовал все другие потенциальные решения, которые мог найти в Интернете, безуспешно (в основном они либо старые, либо нашли их люди, которые не используют MobaXterm) – использовал $(hostname).local:0
, вывод route.exe
или основывал DISPLAY на моем IP-адресе, полученном с помощью hostname -I
, ifconfig
, ip
или netshe.exe
.
Если я установлю DISPLAY на что-то явно неверное, emacs не зависает, а переходит сразу в режим “-nw”, т.е. просто становится текстовым редактором в терминале. Так что похоже, он распознает, что с адресами, возвращаемыми большинством вышеупомянутых методов, есть что-то нетривиальное, но не может использовать их правильно.
Мне интересно, может ли это быть связано с настройками брандмауэра Windows Defender, учитывая разницу между моими домашними и рабочими сетями и другие посты, упоминающие это как потенциальную проблему, но я не вижу ничего, что явно указывает на проблему. Но я не очень знаком с настройками брандмауэра, так что возможно просто смотрю не на то, что нужно. Мои рабочие сети и точка доступа телефона все отображаются как “Частные” сети в настройках Сетей и Интернета, без возможности изменить это, и я еще не смотрел, есть ли что-то явно отличающееся в моей домашней Wifi сети.
Информация о версиях:
- Windows 23H2 22631.4317
- WSL2 10.0.22621.1 (WinBuild.160101.0800) (вывод
(get-item C:\windows\system32\wsl.exe).VersionInfo.FileVersion
) - MobaXterm v.20.1 build 4290
- Ubuntu 20.04
Да, WSL, MobaXterm и Ubuntu, я думаю, довольно стары, так как я придерживался принципа “если это не сломано, не обновляй это”. Возможно, мне стоит обновить один или несколько из этих компонентов? Но я бы не хотел рисковать поломкой других аспектов моей настройки или необходимости её перестраивать, если есть более простой способ заставить это работать, или если есть минимальное количество обновлений, которое необходимо.
Хорошо, с немного большим расследованием, похоже, что изменение настройки брандмауэра Windows Defender – это правильное решение – добавление правила для входящих соединений для разрешения подключений к порту 6000 из диапазона адресов, назначенных DISPLAY, похоже, позволяет работать графическим интерфейсам (для меня, часть адреса перед первой .
(назовем это X) остается неизменной, так что я установил диапазон от X.0.0.0
до X.255.255.255
).
Ответ или решение
Использование графических интерфейсов с WSL2, MobaXterm и Ubuntu
Введение
Ваша задача состоит в том, чтобы запустить графические приложения в Ubuntu внутри Windows Subsystem for Linux 2 (WSL2), используя MobaXterm. Ваша текущая настройка работает на домашнем Wi-Fi, но не функционирует на рабочих сетях или мобильном хотспоте. Мы обсудим возможные причины этого поведения и предложим решения.
Настройка переменной DISPLAY
Ваша текущая настройка переменной DISPLAY:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0
это стандартный подход для настройки графической среды в Linux. При этом вы извлекаете IP-адрес из файла /etc/resolv.conf
, что соответствует локальному IP-адресу вашего компьютера. Однако, если эта конфигурация работает только в одной сети, это может быть связано с различиями в настройках сети, фаерволе Windows или правилах безопасности.
Возможные причины проблемы
-
Настройки фаервола Windows:
- Поскольку вы уже упомянули, что проблема может быть связана с настройками Windows Defender Firewall, важно убедиться, что инкапсуляция трафика на порт 6000 разрешена. Убедитесь, что у вас есть правило для разрешения входящих соединений на этот порт от вашего диапазона IP-адресов.
- Для этого создайте новое правило в Windows Defender Firewall:
- Откройте "Панель управления" > "Система и безопасность" > "Брандмауэр Windows Defender".
- Выберите "Дополнительные параметры" и создайте новое "Правило для входящих подключений".
- Выберите "Порт", затем "TCP" и введите
6000
. - Разрешите соединение и примените правило к нужным профилям (обычно "Частный").
-
Сетевые ограничения:
- Наряду с фаерволом проверьте, не блокирует ли ваша сеть какие-либо порты или типы трафика. Это может быть особенно актуально в рабочих сетях, где администрация может настроить ограничения.
-
Изменения в Windows после обновления:
- Обновления Windows могут повлиять на настройки сети и фаервола. Если ваш предыдущий рабочий сеанс прекращался, это может указывать на несовместимость между версиями программного обеспечения.
Другие подходы к установке переменной DISPLAY
Если стандартный метод получения IP-адреса через resolv.conf
не работает, вы можете попробовать альтернативные способы, такие как:
- Использование
(hostname).local:0
для доступа по локальному DNS. - В ручном режиме задайте переменную DISPLAY в зависимости от IP-адреса, получаемого через
hostname -I
илиip addr
, чтобы избежать проблем с определением адреса.
Проверка и обновление компонентов
Хотя ваша установка может функционировать, использование более свежих версий WSL2, MobaXterm и Ubuntu может существенно повлиять на совместимость и производительность. Но, если вас пугает возможность обнаружения новых проблем, возможно, разумнее сделать резервные копии и обновить только WSL2 и MobaXterm.
Заключение
Настройка графических интерфейсов в WSL2 может требовать тщательной проверки сетевых и фаервол настроек. Убедитесь, что ваш Windows Defender Firewall настроен правильно, проверяя разрешения на входящие соединения для порта 6000. Если проблема не устранена, рассмотрите обновление компонентов для повышения совместимости и получения новых функций. Также, важно помнить о специфических особенностях вашей сети, которые могут влиять на функциональность GUI приложений.