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