Я в основном очень доволен WSL2 на Windows 10, только что перешел с Mac. Я запускаюX410на хосте Windows и запустите приложения X11 внутри WSL, установив
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'):0.0
перед началом моей программы.
Некоторое время все работает нормально, но после того, как мой компьютер выходит из спящего режима, окно X исчезает. Приложение по-прежнему отображается как запущенное в ps
.
У меня такое чувство, что это связано с потерей сетевого соединения между приложением X11 и сервером X410, но я не уверен. Кто-нибудь сталкивался с этим и придумал обходной путь?
У меня установлена Windows 10 Insider Preview, сборка 18945.
решение1
Вы правы, это проблема с сетью. По всей видимости, она влияет на все соединения X11 с Hyper-V. Решение — использовать что-то другое, нежели TCP/IP, для соединения X11.
Разработчик сервера Windows X11 x410 объяснил, как исправить это для виртуальных машин Hyper-V с помощью виртуальных сокетовздесь.
К сожалению, он также объясняет в концеэта более обширная статьяон не смог заставить это работать на WSL2. Он собирается подождать, пока WSL2 не станет более зрелым, пока не будет улучшена межоперационная связь через сокеты домена Unix.
решение2
Вы можете использоватьXpraилиX2Goкак обходной путь (для меня X2Go работает лучше).
Xpra
- Установите Xpra на свой дистрибутив Linux (
apt install xpra
на Ubuntu). - Установите Xpra на Windows (установщик находится в разделеXpra клиент Скачать)
- Запустите xpra в Linux с помощью
xpra start --bind-tcp=0.0.0.0:10000 :10000
- Запустите
Xpra.exe
в Windows и подключитесь к порту10000
.
Клиент автоматически переподключится после сна/ожидания. Даже если вы потеряете соединение (возможно, при входе в VPN), вы всегда можете переподключиться вручную.
X2Go
- Установите X2Go на свой дистрибутив Linux (
apt install x2goserver
на Ubuntu). - Установите клиент X2Go на Windows (установщик находится в разделеX2Go клиент Скачать)
- Исправьте и запустите sshd в Linux:
Вам также придется запускать sshd при каждом перезапуске WSL с помощьюsudo apt-get remove --purge openssh-server sudo apt-get install openssh-server sudo service ssh --full-restart
sudo service ssh start
. - Запустите клиент на Windows, подключитесь, используя «Тип сеанса: Опубликованные приложения»
PS: Сейчас я пишу небольшую запись в блоге:Среда разработки в WSL2
решение3
Для этой проблемы есть вполне хорошее решение:https://github.com/nbdd0121/wsld.
WSL Daemon — стабильное соединение X11 и синхронизация времени для WSL2
Он делает именно то, чего не делают другие решения: использует сокеты домена Unix. Я использую его уже много месяцев без проблем.