WSL(Windows Subsystem for Linux)是一个为 Windows 用户设计的兼容层,它允许用户在 Windows 10 和 Windows 11 操作系统上直接运行 GNU/Linux 环境。WSL 提供了一个微软开发的 Linux 兼容内核接口,使得用户可以在不启动虚拟机或使用双重启动设置的情况下,在 Windows 上运行大多数命令行工具、实用程序、应用程序以及服务。
尽管 WSL2 并不提供图形用户界面(GUI)支持,但可以通过一些方法间接实现图形界面的使用。例如,可以使用远程桌面协议 RDP 工具如 xrdp 在 Windows 上显示 WSL 的图形界面。用户可以在 WSL 中安装远程桌面服务器,然后在 Windows 上通过远程桌面客户端连接,从而在 Windows 桌面上显示 WSL 的图形界面。
1、前置条件
WSL2 需要虚拟化支持,需要开启虚拟机平台。
前置条件:
- 确保 Windows 机器是支持虚拟化并且在 BIOS 中开启虚拟化技术。
- 确保 Windows 版本支持 WSL2,并已启用 WSL 功能。
在 BIOS 中开启虚拟化
如果您的机器支持虚拟化,但未在系统中启用,则需要在 BIOS 中开启。以下步骤可能因不同主板和制造商而异:
- 重启计算机:
- 在计算机启动时,通常会显示一个提示,告诉你按哪个键进入 BIOS 或设置(常见的按键有 F2、F10、Del 或 Esc)。
- 进入 BIOS/UEFI 设置:
- 使用上述提示中的按键进入 BIOS 或 UEFI 设置界面。
- 查找虚拟化设置:
- 在 BIOS/UEFI 设置中,查找与虚拟化相关的设置。这通常位于'高级'、'处理器设置'或'芯片组'部分,并且可能被命名为'Intel Virtualization Technology'(Intel VT)、'AMD-V'或'Virtualization'。
- 启用虚拟化:
- 确保虚拟化选项设置为'Enabled'或'On'。
- 保存并退出:
- 保存更改并退出 BIOS/UEFI 设置。通常需要按 F10 并确认保存。
- 重启计算机:
- 计算机将重启,以使更改生效。
请注意,BIOS/UEFI 界面和选项可能会根据您的硬件和制造商而有所不同。如果在 BIOS 中找不到这些选项,可能是因为您的系统已经默认启用了虚拟化,或者您的系统不支持虚拟化。
检查是否支持虚拟化
- 使用系统信息工具:
- 按下
Windows键,输入msinfo32,然后按Enter。 - 在'系统摘要'中,查找'处理器'部分,看是否有'虚拟化'这一项,并且其状态为'已启用'。
- 按下
- 使用命令提示符:
- 打开命令提示符(cmd)。
- 输入以下命令
systeminfo并按 Enter。 - 查找'虚拟化'相关的信息。如果'虚拟化:已启用'表示您的 CPU 支持虚拟化。
2、开启 Windows 虚拟化功能并启用 WSL2
方法 1:窗口操作
打开控制面板 - 程序 - 启用或关闭 Windows 功能,勾选下面两项。
[图片]
方法 2:命令操作
以管理员身份打开 PowerShell 或 Windows 命令提示符(cmd)。
在 Windows 上启用虚拟化机平台功能,输入以下命令并按回车键:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
在 Windows 上启用 WSL 功能,输入以下命令并按回车键:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
打开 CMD(管理员)并运行以下命令来启用 WSL 功能:
# 安装 wsl,默认是安装好的
wsl --install
# 查看支持内核版本,wsl 版本是 2.x
wsl -v
# 升级下子系统
wsl --update
# 如果 wsl 不是 2.x,将 WSL2 设置为默认版本
wsl --set-default-version 2
3、安装 Ubuntu 24.04
如果你通过 Windows 商店安装 Ubuntu,那么安装的版本是 22.04 版本,下面我们通过命令行来安装。
查看可安装的 Linux 版本
wsl --list --online
以下是可安装的有效分发的列表。使用 wsl.exe --install 安装。
| NAME | FRIENDLY NAME |
|---|---|
| Ubuntu | Ubuntu |
| Debian | Debian GNU/Linux |
| kali-linux | Kali Linux Rolling |
| Ubuntu-18.04 | Ubuntu 18.04 LTS |
| Ubuntu-20.04 | Ubuntu 20.04 LTS |
| Ubuntu-22.04 | Ubuntu 22.04 LTS |
| Ubuntu-24.04 | Ubuntu 24.04 LTS |
| OracleLinux_7_9 | Oracle Linux 7.9 |
| OracleLinux_8_7 | Oracle Linux 8.7 |
| OracleLinux_9_1 | Oracle Linux 9.1 |
| openSUSE-Leap-15.6 | openSUSE Leap 15.6 |
| SUSE-Linux-Enterprise-15-SP5 | SUSE Linux Enterprise 15 SP5 |
| SUSE-Linux-Enterprise-15-SP6 | SUSE Linux Enterprise 15 SP6 |
| openSUSE-Tumbleweed | openSUSE Tumbleweed |
安装 Ubuntu-24.04 发行版本
wsl --install -d ubuntu-24.04
4、更换国内软件源
由于 Ubuntu 默认的软件源在国外有时候可能会导致下载软件卡顿,这里我们更换为国内的阿里云源,其他国内源亦可。Ubuntu 24.04 源地址配置文件发生改变,同时格式改变,现在为 DEB822 格式,不再使用以前的 sources.list,而是使用文件 /etc/apt/sources.list.d/ubuntu.sources。
# 备份原来的软件源
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
# 编辑软件源
sudo nano /etc/apt/sources.list.d/ubuntu.sources
cat /etc/apt/sources.list.d/ubuntu.sources
# 可以看到源配置文件内容如下:
## See the sources.list(5) manual page for further settings.
Types: deb URIs: http://archive.ubuntu.com/ubuntu
Suites: noble noble-updates noble-backports
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
## Ubuntu security updates.
Aside from URIs and Suites,
## this should mirror your choices in the previous section.
Types: deb URIs: http://security.ubuntu.com/ubuntu
Suites: noble-security
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
更新源地址,可以用下面国内的源(清华源或阿里云源等):
清华源
mirrors.tuna.tsinghua.edu.cn阿里云mirrors.aliyun.com腾讯云mirrors.cloud.tencent.com华为云mirrors.huaweicloud.com中科大源mirrors.ustc.edu.cn
sources.list.d 文件夹中,所有 .sources 拓展名结尾的文件均会被作为一个可选的源。
我们先将原始文件备份:
sudo mv /etc/apt/sources.list.d/ubuntu.sources /etc/apt/backup-sources.list.d-ubuntu.sources
然后创建一个新的文件,以 .sources 结尾,例如:
sudo nano /etc/apt/sources.list.d/tuna.sources
把下面的内容粘贴进去:
Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/
# 如果使用其他镜像站,上面这行可以改成其他镜像站的网址 (如:https://mirrors.aliyun.com/ubuntu/)
Suites: noble noble-updates noble-backports
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/
# 如果安全更新需要使用镜像站,上面这行可以改成其他镜像站的网址
Suites: noble-security
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
然后按 Ctrl + O 保存,ENTER 确认,并按 Ctrl + X 退出编辑模式。
之后运行:
# 更新源列表
sudo apt update
# 更新系统软件包
sudo apt upgrade -y
5、图形化界面
1)安装 Ubuntu 桌面版
默认情况下,WSL2 安装的是服务器版 Ubuntu,没有图形界面。要安装桌面环境,可以根据自己的喜好安装 KDE、Gnome、xfce、lxde 等桌面环境。Gnome 是 Ubuntu 的默认桌面环境,也是多数发行版的默认桌面环境,这里以 Gnome 为例进行安装:
WSL Ubuntu 命令行输入:
# 安装 Ubuntu 桌面版
sudo apt install ubuntu-desktop
安装其他桌面:
# KDE
sudo apt install kubuntu-desktop
# Xfce
sudo apt install xubuntu-desktop
2)安装 XRDP
在使用 xrdp 进行远程桌面连接时,默认情况下,xrdp 使用 /etc/ssl/private/ssl-cert-snakeoil.key 证书,该证书仅对 ssl-cert 用户组可读。因此,需要将 xrdp 用户添加到 ssl-cert 用户组,以确保 xrdp 服务能够正常访问和验证 SSL 证书。
具体操作步骤如下:
- 安装 xrdp 服务并启动:使用命令
sudo apt-get install xrdp安装 xrdp,并使用sudo systemctl start xrdp启动服务。 - 将 xrdp 用户添加到
ssl-cert用户组:使用命令sudo adduser xrdp ssl-cert将 xrdp 用户添加到ssl-cert用户组。 - 重启 xrdp 服务:使用命令
sudo systemctl restart xrdp重启 xrdp 服务,以确保更改生效。
通过这些步骤,可以确保 xrdp 服务能够正确访问和验证 SSL 证书,从而解决连接时的安全问题。
3)连接远程桌面
先在子系统上运行以下命令,查看下虚拟机的 IP 地址:
ip addr | grep eth0
[图片]
上面选中的部分就是子系统虚拟机的 IP 地址,复制下来。
Win+R,运行 mstsc:
[图片]
输入刚刚复制的 IP 地址:
[图片]
点击连接后如果出现错误提示弹窗,参见文末的问题排查 1 进行解决。
输入登录的用户名密码:
[图片]
[图片]
注意:WSL2 暂时还不支持硬件加速绘图,所以你是在用 CPU 跑 GNOME 图形界面,可能会比较卡。CPU 不太给力的机器,甚至有可能进去后一片漆黑。
问题排查
一些常见问题给出相关解决办法:
- 远程桌面点击连接后显示连接失败:
- 如果弹窗说你正在运行一个控制台会话,说明 xrdp 默认的 3389 端口已经被其他(控制台)应用占用了,尝试修改 xrdp 监听的端口
sudo vim /etc/xrdp/xrdp.ini,修改文件中的 port。 - 如果弹窗说无法连接到远程计算机,WSL 命令窗口关闭,IP 地址不对或者 xrdp 没有正常运行。使用
ip addr | grep eth0命令重新看下 IP 地址。尝试sudo systemctl restart xrdp重启 xrdp 服务。
- 如果弹窗说你正在运行一个控制台会话,说明 xrdp 默认的 3389 端口已经被其他(控制台)应用占用了,尝试修改 xrdp 监听的端口
- 可以连接,但是进去后桌面一片漆黑:
- 第一次进入桌面会比较卡,稍等一会看看。
- 尝试重启 WSL(CMD 管理员运行:
net stop LxssManager和net start LxssManager)。 - 尝试
sudo apt install ubuntu-desktop重新安装下桌面。
- 闪退:
- 应该是权限的问题,不要用 root 登录。
关于 xrdp
xrdp 配置文件在 /etc/xrdp 目录。一般不需要对配置文件进行修改。
使用 sudo vim /etc/xrdp/xrdp.ini 对配置文件进行修改。
默认的端口号是 3389。
xrdp 使用 startwm.sh 文件启动 X 会话,可以通过编辑 /etc/xrdp/startwm.sh 来使用其他 X Window 桌面。
参考文档:Microsoft Learn 适用于 Linux 的 Windows 子系统文档


