Использование графических интерфейсов с WSL2, MobaXterm и Ubuntu

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

У меня есть настройка для запуска программ с графическими интерфейсами в 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 или правилах безопасности.

Возможные причины проблемы

  1. Настройки фаервола Windows:

    • Поскольку вы уже упомянули, что проблема может быть связана с настройками Windows Defender Firewall, важно убедиться, что инкапсуляция трафика на порт 6000 разрешена. Убедитесь, что у вас есть правило для разрешения входящих соединений на этот порт от вашего диапазона IP-адресов.
    • Для этого создайте новое правило в Windows Defender Firewall:
      1. Откройте "Панель управления" > "Система и безопасность" > "Брандмауэр Windows Defender".
      2. Выберите "Дополнительные параметры" и создайте новое "Правило для входящих подключений".
      3. Выберите "Порт", затем "TCP" и введите 6000.
      4. Разрешите соединение и примените правило к нужным профилям (обычно "Частный").
  2. Сетевые ограничения:

    • Наряду с фаерволом проверьте, не блокирует ли ваша сеть какие-либо порты или типы трафика. Это может быть особенно актуально в рабочих сетях, где администрация может настроить ограничения.
  3. Изменения в 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 приложений.

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

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