Я установил Ubuntu 20.04 (сервер / терминал) из магазина приложений Windows 10, а затем, после запуска терминала Ubuntu через WSL2 (подсистемы Windows для Linux), я установил рабочий стол Ubuntu и сделал несколько шагов, чтобы попытаться получить запущен настольный экземпляр Ubuntu 20.04. Короче говоря, шаги включали редактирование файла .bashrc, установку Xming, а затем попытку открыть рабочий стол Ubuntu в Xming с помощью команды «startxfce4». Однако "startxfce4" просто не открывает для меня рабочий стол. Я могу заставить программы открываться с помощью "grun", а файловый проводник открывать с помощью "gopen", так что он работает частично.
Есть ли у кого-нибудь альтернативные предложения, как заставить терминал открывать полный рабочий стол Ubuntu? Очевидно, что Windows имела в виду WSL2 не это, так что это своего рода охват, но любой ввод был бы полезен. Могу ли я как-нибудь сделать это из файлового проводника или с помощью программы, которая могла бы открываться из "grun" или "gopen"?
Мне удалось запустить полный графический интерфейс Ubuntu 20.04 Unity для рабочего стола, используя
VcXsrv, установив GNOME Desktop ubuntu-wsl2-systemd-script, а затем добавив скрипт в мой ~/.bashrc
файл .
Изначально Ubuntu имеет только root-доступ, поэтому создайте обычную учетную запись с привилегиями sudo;-
sudo adduser username
sudo usermod -aG sudo username
exit
С этого момента запускайте WSL, используя эту учетную запись.
wsl.exe -d distroname -u username
ПРИМЕЧАНИЕ:
Скрипт ubuntu-wsl2-systemd-script вызывает systemd, используя --system-unit=basic.target
и поэтому не запускает службу gdm или lightdm, поэтому отредактируйте файлы enter-systemd-namespace
и start-systemd-namespace
и измените --system-unit=basic от .target
до --системный блок=по умолчанию.target
перед установкой.
# runs only if 1st level shell
if [ $SHLVL = 1 ] &&
[ -d "${srv_path="/mnt/c/Program Files/VcXsrv"}" ] &&
[ -f "${srv_exec="$srv_path"/"${srv_name=vcxsrv.exe}"}" ] &&
[ -d "${sys_path="/mnt/c/Windows/System32"}" ] &&
[ -f "${tasklist="$sys_path"/tasklist.exe}" ] &&
[ -f "${taskkill="$sys_path"/taskkill.exe}" ]; then
# find a Windows Process ID
function find_wpid {
echo $("$tasklist" | grep "$1" | awk '{print $2; exit}')
}
# kill a Windows Process ID
function kill_wpid {
"$taskkill" /PID $1 /F /T >/dev/null
}
# export the Windows %UserProfile% path in Linux Format
export WIN_HOME="$(wslpath "$($sys_path"/cmd.exe" /c "<nul set /p=%UserProfile%" 2>/dev/null)")"
# Find the current WSL2 local IP address
srv_addr="$(ip route | awk '{print $3; exit}')";
# shutdown old instance of VcXsrv if running
if [ "${gfx_wpid=$(find_wpid $srv_name)}" ]; then
kill_wpid $gfx_wpid
unset gfx_wpid
fi
# start a new instance of VcXsrv
"$srv_exec" :0 -ac -wgl -fullscreen -notrayicon -dpms &
# wait for startup success
while [ -z $gfx_wpid ]; do gfx_wpid=$(find_wpid $srv_name); done
# Start Windows Pulse Audio if installed
unset srv_exec srv_name
if [ -f "${srv_exec="$srv_path"/pulse/bin/"${srv_name="pulseaudio.exe"}"}" ]; then
# shutdown old instance of Pulse if running
if [ ${snd_wpid=$(find_wpid $srv_name)} ]; then
kill_wpid $snd_wpid
unset snd_wpid
fi
# delete the expired Pulse config
if [ -d "${snd_conf=$WIN_HOME"/.config/pulse"}" ]; then
rm -r "$snd_conf"
unset snd_conf
fi
# Start a new instance of Pulse
"$srv_exec" --use-pid-file=false --disable-shm=true --exit-idle-time=-1 &
while [ -z $snd_wpid ]; do snd_wpid=$(find_wpid $srv_name); done
export PULSE_SERVER=tcp:"$srv_addr";
fi
# setup Ubuntu Desktop
export DISPLAY="$srv_addr":0;
# setting below: 0 = llvmpipe (faster), 1 = software rasterizer
export LIBGL_ALWAYS_INDIRECT=0
export XDG_CONFIG_HOME=$HOME/.config
export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
export XDG_SESSION_DESKTOP=ubuntu
export XDG_SESSION_TYPE=x11
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export XDG_SESSION_CLASS=user
export XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
# cleanup expired vars
unset tasklist sys_path srv_path srv_exec srv_name srv_addr
# script stays here until gnome-session logout or failure
gnome-session
# shutdown VcXsrv
if [ $gfx_wpid ]; then
kill_wpid $gfx_wpid
unset gfx_wpid
fi
# shutdown Pulse
if [ $snd_wpid ]; then
kill_wpid $snd_wpid
unset snd_wpid
fi
unset taskkill
# shutdown the shell
exit 0
fi
ПРИМЕЧАНИЕ:
Когда все запущено, перейдите в Настройки -> Конфиденциальность -> Блокировка экрана Ubuntu и отключите параметры блокировки экрана. Попытка снова войти в систему после блокировки экрана по какой-то причине приводит к бесконечному циклу при запросе пароля. Если это произойдет, просто выключите дистрибутив WSL, и при следующем запуске все снова будет в порядке.
Загрузите и распакуйте mingw64-pulseaudio-13.0.7z. Отредактируйте файл \mingw\etc\pulse\default.pa
и замените строку 38, содержащую load-module module-waveout имя_приемника=выход имя_источника=вход
на:
load-module module-waveout sink_name=output source_name=input record=0
load-module module-native-protocol-tcp listen=0.0.0.0 auth-anonymous=1
Сохранить изменения , переименуйте папку mingw
в pulse
и переместите ее в папку C:\Program Files\VcXsrv
.
Я не уверен, требуется ли этот шаг, однако я также установил эти приложения через...
sudo apt-get install alsa-tools-gui pavumeter pavucontrol
Доступ к Интернету будет доступен не сразу, если вы не выйдете из ваш рабочий стол WSL2 Ubuntu и снова войдите в систему. Это стало удобным для меня, так как дает мне время копировать обновления с моей настоящей Ubuntu на WSL2 Ubuntu без повторной загрузки.