Kali Linux — переход на GNOME из XFCE в KEX на WSL2 (WIN11). Как?
Я не могу переключиться на среду рабочего стола Gnome в Kali Linux, работающем на WSL2. Я загружаюсь с помощью kex (kex -s). Уже установлено обновление Gnome до последней версии, но оно всегда загружается в Xfce.
Попробовал это руководство: https://www.youtube.com/watch?v=pX7RHXRgBLs&ab_channel=500ATC , используя https://sourceforge.net/projects/vcxsrv/ , но когда я запускаю с терминала, у меня появляется ошибка «что-то пошло не так».
это тоже не работает: https://www.youtube.com/watch?v=SVUDIWKh_w0&ab_channel=TechSolutionZ.
Спасибо.
1 ответ
Ну, прошло много времени с тех пор, как я работал с Кали или Кексом, но, по крайней мере, мне удалось уговорить Гнома идти вперед.
Сначала несколько замечаний:
Этот ответ основан на нескольких моих предыдущих ответах на Ask Ubuntu:
Gnome требует Systemd, а Systemd плохо работает с WSL (а WSL не очень хорошо работает с Systemd).
Есть способы заставить его работать (как я продемонстрирую), но я не рекомендую запускать Systemd на WSL , если вы действительно не понимаете, что происходит, и/или не можете устранить неполадки. Systemd кардинально меняет поведение WSL (и даже других дистрибутивов, которые вы можете запускать под WSL). Только сегодня я столкнулся с еще одним вопросом , когда сценарий Systemd (похожий на тот, который я собираюсь вам показать) создает проблемы.
Запустить Gnome под WSL на Kali не обязательно сложнее, чем запустить его под Ubuntu под WSL. Из-за требований Systemd требуется много работы над обоими. Тем не менее, Kali — более продвинутый дистрибутив, поэтому в Ubuntu вы часто найдете больше поддержки. Стоит прочитать этот пост о Meta Unix о Kali.
Чтобы внести ясность: Kali — отличный дистрибутив, и я его очень уважаю. Плюс я ценю тот факт, что их реализация Kex на несколько лет опередила поддержку WSLg/Windows 11. Тем не менее, те, кто его использует, должны понимать, что с Kali можно сделать больше, чем со многими другими дистрибутивами.
Ладно, с этим покончено. Вот как я запускаю Gnome на WSLg/Windows 11 с помощью Kali:
sudo apt install kali-win-kex # Just to be sure I was working from a similar configure as yours
sudo apt install gnome
sudo -b unshare --pid --fork --mount-proc --kill-child sh -c "export container=wsl; mount -t binfmt_misc binfmt_misc /proc
/sys/fs/binfmt_misc; exec /lib/systemd/systemd --system-unit=multi-user.target"
При этом Systemd запускается в отдельном пространстве имен, как я объясняю в некоторых других ответах, ссылки на которые приведены выше. Вам нужно будет дать ему несколько секунд, чтобы запуститься. Проверьте с -- Как только
sudo -E nsenter -m -p --wd="$PWD" -t $(pgrep -xo systemd) runuser -P -l -w WSL_INTEROP -w WSL_DISTRO_NAME $USER -c "set PATH \
"$PATH\"; exec $SHELL"
Теперь вы находитесь в этом пространстве имен и с другим
Однако плохая новость заключается в том, что некоторые инициализации Systemd по умолчанию для Kali (и большинства других дистрибутивов) теперь перезаписали точки интеграции WSLg, поэтому нам нужно воссоздать их вручную:
sudo rmdir /tmp/.X11-unix/
sudo ln -s /mnt/wslg/.X11-unix/ /tmp
export WAYLAND_DISPLAY=wayland-0
export XDG_RUNTIME_DIR=/mnt/wslg/runtime-dir
Xwayland :1 &
Это запустит фоновый полноэкранный сервер Xwayland, на котором сможет работать Gnome. В противном случае он будет конфликтовать с уже работающим оконным менеджером Weston (опять же, как упоминалось в одном из других связанных ответов).
Нажмите Enterна оболочку WSL/Kali, чтобы снова получить приглашение. Затем:
export DISPLAY=:1
dbus-run-session gnome-session
Gnome теперь должен работать под управлением Xwayland. Вероятно, есть какой-то способ запустить его напрямую под Wayland или Weston, но я пока не придумал, как это сделать.
Обратите внимание, что в Gnome еще многое происходит, что будет работать нестабильно, поскольку он ожидает физическую или виртуальную машину.
Когда вы закончите, обязательно
Как упоминалось в других моих ответах, существуют вспомогательные сценарии для Systemd на WSL, но я рекомендую идти по этому пути только в случае необходимости.
Что касается Gnome, я бы посоветовал запускать его на виртуальной машине, а не непосредственно в WSL. По иронии судьбы, вы даже можете запустить эту виртуальную машину (через libvirtd) внутри WSL2. Но это отдельная тема...