WSL 2 под управлением Ubuntu — X-сервер «Невозможно открыть дисплей»

Я настраивал Ubuntu на Windows 10 WSL 2, чтобы иметь возможность подключиться по SSH к рабочей станции в моей школе. У меня не было проблем с подключением по ssh к удаленному компьютеру, но я не смог открыть графический интерфейс с X-сервером.

Убунту 20.04.1 ЛТС

Windows 10.0.19041 — сборка 19041.

Проблема: всякий раз, когда я пытаюсь открыть графический интерфейс X-сервера, после минутной паузы я получаю следующее: « Невозможно открыть ошибку отображения».

Я запускаю VcXsrv xLaunch с настройками, которые нашел в других руководствах.

Настройки дисплея Запуск клиента Дополнительные настройки

я обязательно побегуexport DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0прежде чем предпринимать какие-либо попытки, но я также добавил его в ~/.bashrc, так что это не должно иметь особого значения.

Я изменил файлы ssh_config и sshd_config, чтобы раскомментировать пересылку X11.

ssh_config sshd_config

На всякий случай я использовал для тестирования xeyes или xclock.

У меня были очень тяжелые времена с этим, поэтому я был бы абсолютно признателен за все, что поможет мне подтолкнуть меня в правильном направлении. Буду рад предоставить любую дополнительную информацию, если она поможет решить эту проблему.

Спасибо всем!!

Быстрое редактирование : я понял, что у меня нет файла .Xauthority и я не могу его создать (даетxauth: (argv):1: unable to open display ":0".когда я попробую). Я не уверен, является ли это частью проблемы.

Изменить : по предложению @harrymc я создал новый профиль vcxsrv, используя эти флаги:"C:\Program Files\VcXsrv\vcxsrv.exe" :0 -ac -terminate -lesspointer -multiwindow -clipboard -wgl -dpi auto

я побежалnetstat -abno|findstr 6000в Powershell администратора и получил этот результат , но я не знаю, как его интерпретировать.

Затем я установил терминатор, чтобы проверить свои изменения, но окно графического интерфейса не открылось, и мой терминал выдал мне эти сообщения с задержкой в ​​несколько минут между [1] 47 и вторым сообщением.

Изменить : ~/.bashrc изменен наexport DISPLAY=localhost:0.0. Ошибка в принципе та же самаяError: Can't open display: localhost:0.0. Сейчас я пытаюсь отладить команду DISPLAY.

4 ответа

Обновление для пользователей, которые найдут этот вопрос в конце 2022 года или позже.

Удалите все настройки экспорта ДИСПЛЕЯ из файлов запуска!

Это больше не нужно. В недавнем WSL система позаботилась об этом. Вам также не понадобится стороннее программное обеспечение X-сервера, поскольку WSLg теперь доступен в Windows 10, сборка 19044+.

Я повторяю.

Вам больше не нужно экспортировать переменную DISPLAY!

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

Предыстория

Я и многие со мной использую серверы имен, отличные от стандартных, поэтому я не могу использовать этот трюк для обращения к моей локальной системе. Вместо этого у меня есть статическое значение для локального хоста IPv6 в /etc/hosts.

      # This is to always have a named host address for servers on WSL, like sshd
# Usually I use 127.0.0.1 instead.
::1     wsl

И то же самое в Windows c:\Windows\System32\drivers\etc\hosts

Затем я установил переменную DISPLAY в ~/.bashrc следующим образом.

      export DISPLAY=wsl:0.0

При тестировании и Thunderbird , и коврик для мыши запускаются нормально.

Но если я попытался запустить Firefox/Firefox-esr, мне не удалось получить доступ к ДИСПЛЕЮ.

      $ firefox-esr
Error: cannot open display: wsl:0.0

По сути, Thunderbird никогда не заботился о том, какое значение было установлено для DISPLAY. Возможно, именно поэтому это сработало для меня. Это началось еще тогда, когда в переменной был установлен неверный IP-адрес.

Но теперь, когда переменная DISPLAY не установлена ​​вручную, Firefox работает отлично!

Информация о моей системе Windows 10.

      $ uname -a
Linux pappa 5.15.79.1-microsoft-standard-WSL2 #1 SMP Wed Nov 23 01:01:46 \
UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
Codename:       jammy


> wsl --version
WSL-version: 1.0.3.0
Kernelversion: 5.15.79.1
WSLg-version: 1.0.47
MSRDC-version: 1.2.3575
Direct3D-version: 1.606.4
DXCore-version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows: 10.0.19045.2364

> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2
  Debian    Stopped         2

NVIDIA Geforce GTX 1070, driver 527.56

Приложения, которые я тестировал.

      $ thunderbird --version
 Thunderbird 102.6.1

$ mousepad --version
Mousepad 0.5.8

$ firefox --version
Mozilla Firefox 108.0.1

$ firefox-esr --version
Mozilla Firefox 102.6.0esr

Даже что-то тяжелое, например GIMP, работает нормально.

      $ gimp --version
GNU Image Manipulation Program version 2.10.30

И, наконец... (это без настройки экспорта DISPLAY )

      $ set | grep DISPLAY
DISPLAY=:0
WAYLAND_DISPLAY=wayland-0

Для пользователей со старой (почти) установкой WSL2 Ubuntu, которые испытываютCan't open displayошибка, простое исправление:

      wsl --unregister ubuntu
wsl --install -d ubuntu
wsl --update

Запустите Ubuntu -> зарегистрируйте свое имя пользователя и пароль, затем:

      # Install X-service
sudo apt update
sudo apt install x11-apps
# Test
env | grep -i display
# Should return:
# WAYLAND_DISPLAY=wayland-0
# DISPLAY=:0
xeyes &
xcalc
      export DISPLAY=$(grep nameserver /etc/resolv.conf | sed 's/nameserver //'):0

Я подозреваю, что HTML или инструмент уценки съели ваши обратные кавычки. Вышеупомянутое работает для меня в моем .profile, работающем в оболочке bash из довольно свежей установки WSL2 Unbuntu. В настоящее время я не хочу устанавливать версию для разработки Windows для встроенной поддержки графического процессора, но VcXsrv пока работает нормально.

Ответ @NoSubstitute правильный, мне не хватало того, что мне нужно было обновить свой WSL.
Я работал на WSL 2, но, судя по всему, WSLg, часть, обеспечивающая совместимость WSL с сервером Wayland/X, включена в более новые версии.

Для обновления я выполнил следующие шаги:

  • wsl --update
  • wsl --shutdown(перезапустит wsl)

Тогда вы можете запуститьenv | grep DISPLAYи убедитесь, что установлены необходимые переменные.

Другие вопросы по тегам