在 WSL2 上打开 Ubuntu 20.04 桌面

wiz*_*tyx 8 command-line windows-10 windows-subsystem-for-linux

我从 Windows 10 应用商店安装了 Ubuntu 20.04(服务器/终端)。通过 WSL2(Linux 的 Windows 子系统)启动 Ubuntu 终端后,我安装了 Ubuntu Desktop,并执行了几个步骤来尝试启动 Ubuntu 20.04 的桌面实例。

简而言之,步骤包括编辑.bashrc文件、安装 Xming,然后尝试使用命令在 Xming 中打开 Ubuntu 桌面startxfce4。但是,startxfce4只是不为我打开桌面。我可以使用程序来打开grun,也可以使用文件资源管理器来打开gopen,所以它可以部分工作。

对于如何让终端打开完整的 Ubuntu 桌面,有人有任何其他建议吗?显然,这并不是 Windows 对 WSL2 的初衷,因此这只是一个范围,但任何输入都会有所帮助。grun我可以通过文件资源管理器或使用可以从或打开的程序以某种方式执行此操作吗gopen

Not*_*1ds 12

我在 WSL 下获取“完整桌面”的首选方法是使用xrdp并运行 Windows 远程桌面连接来进入桌面管理器。这避免了 Ubuntu 和 Windows 之间的热键冲突。缺点是它比使用本机 WSLg 慢一些。

最初的问题提到了“Ubuntu Desktop”(假设是 Gnome)以及 Xfce,所以我将提供两者的步骤。Xfce 是两者中更容易的一个,因为它不需要Systemd

请注意,此更新的答案已在 Ubuntu 22.10 和 WSL2 版本 1.0.3 上进行了测试。

Xfce

sudo apt install xrdp xfce4
# If asked, select lightdm, although it probably doesn't matter

# Optionally, back up the default config
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak

# Windows Pro and higher are often already running RDP on 3389
# Prevent conflicts:
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini

# Prevent Wayland from being used in Xrdp
echo "export WAYLAND_DISPLAY=" > ~/.xsessionrc

# Optional, if you only have one desktop environment installed
echo startxfce4 > ~/.xsession 

sudo service xrdp start
# Or, if running Systemd
sudo systemctl restart xrdp
Run Code Online (Sandbox Code Playgroud)

就是这样 - 您应该能够使用内置的远程桌面连接应用程序连接到 WSL 桌面。要连接的计算机将是localhost:3390。确保选择 Xorg 作为会话类型。


侏儒桌面

随着 WSL 最近能够使用 Systemd,这变得更加“开箱即用”。我不确定我会“推荐它”,但这当然是可能的。

首先,启用 Systemd。重新启动 Ubuntu 后,确保 Systemd 正在运行sudo systemctl status

接下来的几个步骤与 Xfce 的步骤类似:

# Block ACPI features, which cause issues in WSL2, from being installed with Gnome
sudo apt-mark hold acpid acpi-support

sudo apt install ubuntu-desktop xrdp

# Optionally, back up the default config
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak

# Windows Pro and higher are often already running RDP on 3389
# Prevent conflicts:
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini

# Optional if you only have one desktop environment installed
echo gnome-session > ~/.xsession 
Run Code Online (Sandbox Code Playgroud)

~/.xsessionrc使用以下内容创建:

export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop
export WAYLAND_DISPLAY=
export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
Run Code Online (Sandbox Code Playgroud)

然后:

sudo systemctl restart xrdp
Run Code Online (Sandbox Code Playgroud)

与 Xfce4 一样,您应该能够使用内置的远程桌面连接应用程序连接到 Gnome 桌面。要连接的计算机将是localhost:3390。确保选择 Xorg 作为会话类型。


小智 7

我成功地使用 VcXsrv运行完整的 Ubuntu 20.04 Unity 桌面 GUI ,方法是安装GNOME 桌面ubuntu -wsl2-systemd-script,然后将脚本附加到我的~/.bashrc文件中。

最初,Ubuntu 只有 root 访问权限,因此创建一个具有sudo权限的普通帐户:

sudo adduser username
sudo usermod -aG sudo username
exit
Run Code Online (Sandbox Code Playgroud)

从现在开始,使用该帐户启动 WSL:

wsl.exe -d distroname -u username
Run Code Online (Sandbox Code Playgroud)

注意:
ubuntu-wsl2-systemd-script 调用systemdusing --system-unit=basic.target ,因此不会启动gdm或服务,因此请在安装之前lightdm编辑enter-systemd-namespacestart-systemd-namespace文件并更改--system-unit=basic.target为。--system-unit=default.target

sudo adduser username
sudo usermod -aG sudo username
exit
Run Code Online (Sandbox Code Playgroud)

注意:
当一切都启动并运行后,转到 Ubuntu 的“设置” -> “隐私” -> “屏幕锁定”并关闭屏幕锁定选项。由于某种原因在屏幕锁定后尝试重新登录会导致在询问密码时出现无限循环。如果发生这种情况,只需关闭 WSL 发行版,下次启动时一切都会正常。

可选音频支持

下载并解压mingw64-pulseaudio-13.0.7z。编辑该\mingw\etc\pulse\default.pa文件并将第 38 行替换为load-module module-waveout sink_name=output source_name=input

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
Run Code Online (Sandbox Code Playgroud)

保存更改,将mingw文件夹重命名为pulse并将其移动到您的C:\Program Files\VcXsrv文件夹中。
我不确定是否需要此步骤,但是我也通过...安装了这些应用程序

sudo apt-get install alsa-tools-gui pavumeter pavucontrol
Run Code Online (Sandbox Code Playgroud)

除非您注销 WSL2 Ubuntu 桌面并重新登录,否则 Internet 访问不会立即可用。这对我来说变得很方便,因为我可以将更新从真实的 Ubuntu 复制到 WSL2 Ubuntu,而无需重新下载。