Открытие рабочего стола Ubuntu 20.04 на WSL2

Я установил 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"?

1
задан 19 June 2020 в 22:55

1 ответ

Мне удалось запустить полный графический интерфейс 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 без повторной загрузки.

4
ответ дан 8 August 2020 в 00:53

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

Похожие вопросы: