Windows 下使用 WSL2 创建 Ubuntu 子系统并配置图形桌面
本文介绍了在 Windows 环境下利用 WSL2 创建 Ubuntu 子系统的完整流程。主要步骤包括开启 Windows 虚拟化功能、安装 WSL2 及 Ubuntu 发行版、将系统镜像迁移至指定磁盘路径、配置 Xfce4 图形桌面并通过 Xrdp 进行远程连接。此外还涵盖了中文语言包与输入法设置、解决黑屏及弹窗授权问题、禁用冲突服务(WSLg/colord),以及使用 tmux 保持后台会话运行的方法。

本文介绍了在 Windows 环境下利用 WSL2 创建 Ubuntu 子系统的完整流程。主要步骤包括开启 Windows 虚拟化功能、安装 WSL2 及 Ubuntu 发行版、将系统镜像迁移至指定磁盘路径、配置 Xfce4 图形桌面并通过 Xrdp 进行远程连接。此外还涵盖了中文语言包与输入法设置、解决黑屏及弹窗授权问题、禁用冲突服务(WSLg/colord),以及使用 tmux 保持后台会话运行的方法。

本文介绍如何使用 WSL2 创建 Ubuntu 子系统,并更改安装位置到其他磁盘,并启动图形桌面 Xfce4。
控制面板 - 程序和功能 - 启动或关闭 Windows 功能,勾选Hyper-v、适用于 Linux 的 Windows 子系统、虚拟机平台完成后等待启动后根据提示重启电脑。
wsl --install,完成后显示 适用于 Linux 的 Windows 子系统已安装。,其他错误信息可以忽略。wsl.exe --update,进度条完成后即可。wsl --install wsl.exe --update
可以直接下载 wsl 的离线安装包。
1. 关闭 Ubuntu 系统
运行 PowerShell,输入 wsl --shutdown。再输入 wsl -l -v 查看 Ubuntu-22.04 的运行状态,STATE 为 Stopped 即说明已关闭。
wsl --shutdown wsl -l -v
2. 创建目录。
在合适的磁盘上创建一个目录,例如 E 盘的 E:\Ubuntu2204。
3. 导出镜像。
在 PowerShell 中输入下列命令,将 Ubuntu 导出到指定目录,并等待操作完成。
wsl --export Ubuntu-22.04 E:\Ubuntu2204.tar
4. 注销原系统。
在 wsl 中注销原有的 Ubuntu 系统,powershell 中输入 wsl --unregister Ubuntu-22.04。完成后输入 wsl -l -v 查看,提示 适用于 Linux 的 Windows 子系统没有已安装的分发。 即为卸载成功。
wsl --unregister Ubuntu-22.04 wsl -l -v
5. 导入镜像。
在 powershell 中输入 wsl --import Ubuntu-22.04 E:\Ubuntu2204 E:\Ubuntu2204.tar,将之前导出的镜像导入到新的 Ubuntu 系统。在 powershell 中输入 wsl -l -v 查看,出现 Ubuntu-22.04 的 NAME 即为导入成功。
wsl --import Ubuntu-22.04 E:\Ubuntu2204 E:\Ubuntu2204.tar wsl -l -v
6. 更改默认用户。
在 powershell 中输入 ubuntu2204.exe config --default-user [YourUesrName],将新的 Ubuntu 系统默认用户设置为 [YourUesrName]。
如更改默认用户为 tdc,则输入下列命令:
ubuntu2204.exe config --default-user tdc
7. 启动 Ubuntu 子系统。
在开始菜单中搜索 Ubuntu 并运行,出现终端界面即为成功。
8. 删除文件。
删除导出的镜像文件 E:\Ubuntu2204.tar。
Tips: 可以通过上述方法备份和恢复 Ubuntu 系统。
Tips: 在 Windows 的资源管理器中,按住 Shift 键,右键空白处或者文件夹,即可选择
在此处打开 Linux shell,从而实现快速启动 Ubuntu 子系统并切换终端目录。
Tips: 在 Windows 的资源管理器中,输入
\wsl$即可访问 Ubuntu 的文件系统,该系统是通过网络接口访问的,可右键该文件夹并选择映射网络驱动器将其映射为带有盘符的目录,从而实现快速访问 Ubuntu 文件。
更新软件
在 Ubuntu 终端中运行 sudo apt update && sudo apt upgrade -y,等待更新完成。
在 Ubuntu 终端中运行下列命令,等待安装完成。
sudo apt purge -y acpid acpi-support modemmanager
sudo apt-mark hold acpid acpi-support modemmanager
sudo apt install ubuntu-desktop gnome -y
我这里出现 Setup 界面后会出现如下错误,无法启动。
1. 安装 Xubuntu-desktop
在 Ubuntu 终端中运行下列命令,等待安装完成。
sudo apt purge -y acpid acpi-support modemmanager
sudo apt-mark hold acpid acpi-support modemmanager
sudo apt install -y xubuntu-desktop
也可以安装更为精简的 xfce4 和 xfce4-goodies:
sudo apt install -y xfce4 xfce4-goodies
xubuntu-desktop 相比于 xfce4,xubuntu-desktop 会安装更多的软件,如 Firefox(浏览器)、gmusicbrowser(音频)、Parole(视频)、Ristretto(照片管理)、Abiword/Gnumeric(办公)等。
在开始安装时,会弹出下列设置,这里选择轻量化的Lightdm显示管理器。
2. 安装 Xrdp
在 Ubuntu 终端中运行下列命令,等待安装完成。
sudo apt install -y xrdp
3. 配置 Xrdp
添加 xrdp 用户
sudo adduser xrdp ssl-cert
配置端口号。编辑 /etc/xrdp/xrdp.ini 文件:
sudo nano /etc/xrdp/xrdp.ini
该文件内容如下,; 开头的为注释;将 port=3389 修改为需要的端口,并保存。
; Examples:
;port=3389
;port=unix://./tmp/xrdp.socket
;port=tcp://.:3389 127.0.0.1:3389
;port=tcp://:3389 *:3389
;port=tcp://<any ipv4 format addr>:3389 192.168.1.1:3389
;port=tcp6://.:3389 ::1:3389
;port=tcp6://:3389 *:3389
;port=tcp6://{<any ipv6 format addr>}:3389 {FC00:0:0:0:0:0:0:1}:3389
;port=vsock://<cid>:<port>
port=3389;'port' above should be connected to with vsock instead of tcp
; use this only with number alone in port above
配置防火墙,此处的 3389 端口号与 /etc/xrdp/xrdp.ini 文件中的端口号保持一致。
sudo ufw allow 3389
编辑 /etc/xrdp/startwm.sh 文件
sudo nano /etc/xrdp/startwm.sh
将其内容替换为下列内容:
#!/bin/sh
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config"
mkdir -p "$XDG_CACHE_HOME" "$XDG_CONFIG_HOME"
xfce4-session
完成配置后重新启动 Xrdp,在 Ubuntu 终端中运行下列命令,等待启动完成。
sudo systemctl restart xrdp
4. 黑屏问题
安装 mesa 并将其添加到 Xrdp 的启动脚本 /etc/xrdp/startwm.sh 中。
sudo apt install libgl1-mesa-glx
sudo nano /etc/xrdp/startwm.sh
添加以下内容:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa/
重新启动 Xrdp:
sudo systemctl restart xrdp
6. 连接 Xrdp
使用 Windows 的远程桌面连接连接到 Ubuntu 系统,设置目标为 localhost:3389,3389 为上述设置的端口号。
输入用户名和密码即可登录到桌面。
在 Ubuntu 终端中运行下列命令选择语音和编码。
sudo dpkg-reconfigure locales
第一个界面划到最下面按下 Space 勾选 zh_CN.UTF-8 UTF-8,按 Enter 确定,第二个界面选择 zh_CN.UTF-8,按 Enter 确定。
在 Ubuntu 终端中运行下列命令安装语言字体包。
sudo apt-get install fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp
安装完成后,重启 Ubuntu 系统。
在 Ubuntu 终端中运行下列命令安装 fcitx 输入法与中文输入法包。
sudo apt install fcitx fcitx-googlepinyin
安装完成后,在启动项中添加 fcitx,并设置默认输入法为 fcitx。
配置 .bashrc 文件
sudo nano ~/.bashrc
添加以下内容:
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
启动输入法
fcitx
1. 弹出提示:需要授权来创建色彩管理设备
每次启动 Ubuntu 系统,都会弹出提示:需要授权来创建色彩管理设备。
在 Ubuntu 终端中运行下列命令,禁用 colord。
systemctl status colord # 检查是否仍在运行
sudo systemctl stop colord # 强制停止
sudo systemctl disable colord # 禁用开机自启
sudo systemctl mask colord # 彻底屏蔽(防止被其他服务依赖启动)
2. 部分 GUI 软件在 Windows 中打开
新版 WSL2 默认启用 WSLg,WSLg 允许在 Windows 中运行 GUI 软件,我们使用了 RDP 访问 Ubuntu 系统,因此不再需要 WSLg,因此需要禁用 WSLg。
在 PowerShell 中运行下列命令,修改 WSL 的配置文件。
wsl --shutdown notepad "$env:USERPROFILE\.wslconfig"
添加下列内容并保存:
[wsl2]
guiApplications=false
随后重启几次 WSL 即可正常。
3. 后台运行 WSL
运行 WSL 需要开启一个 Ubuntu 终端,一旦终端关闭,WSL 就会停止运行,RDP 也会断开连接。
可以使用 tmux 终端复用工具在单个终端窗口中创建持久化的会话,即使关闭终端,会话仍能在后台运行。
安装 tmux 终端复用工具:
sudo apt install tmux
创建 tmux 会话:可以创建匿名会话或命名会话。命名会话可以方便管理会话,例如,可以创建多个会话,并分别运行不同的任务。
tmux # 创建匿名会话
tmux new -s <会话名># 创建命名会话(推荐)
如:创建命名会话 daemon:
tmux new -s daemon
此时会进入名为 daemon 的会话,将该会话后台运行:先按 Ctrl+B,松开后再按 D。
此时关闭终端,会话 daemon 依然在后台运行,并且 WSL 仍然正常运行。
重新连接会话:
tmux attach -t <会话名># 重新连接指定会话
tmux ls# 查看所有会话列表
如:重新连接会话 daemon:
tmux attach -t daemon
关闭会话:在会话内按 Ctrl+D;或者输入 exit。
以管理员权限打开 PowerShell,运行下列命令:(自行修改安装目录路径)
# 启用必要功能并重启
Enable-WindowsOptionalFeature-Online -FeatureName Microsoft-Windows-Subsystem-Linux, VirtualMachinePlatform -NoRestart
wsl --install
wsl --set-default-version 2
Restart-Computer-Force # 重启后继续执行
$ubuntuDir = "E:\Ubuntu2204"
mkdir $ubuntuDir
wsl --install -d Ubuntu-22.04
wsl --shutdown
wsl --export Ubuntu-22.04 "$ubuntuDir\Ubuntu2204.tar"
wsl --unregister Ubuntu-22.04
wsl --import Ubuntu-22.04 $ubuntuDir "$ubuntuDir\Ubuntu2204.tar" --version 2
ubuntu2204.exe config --default-user $env:USERNAME
Remove-Item "$ubuntuDir\Ubuntu2204.tar"
# 禁用 WSLg 避免 GUI 冲突
echo "[wsl2]`nguiApplications=false" | Out-File "$env:USERPROFILE\.wslconfig" -Encoding ASCII
启动 wsl,在 Ubuntu 终端中运行下列命令:(自行修改使用的桌面环境 xubuntu-desktop/xfce4)
#!/bin/bash
# 更新系统并安装 Xfce4 + xrdp
sudo apt update && sudo apt upgrade -y
# 使用 xubuntu-desktop:
# sudo apt purge -y acpid acpi-support modemmanager
# sudo apt-mark hold acpid acpi-support modemmanager
# sudo apt install -y xubuntu-desktop
# 使用 xfce4
sudo apt install -y xfce4 xfce4-goodies
# 安装配置 xrdp
sudo apt install -y xrdp
sudo adduser xrdp ssl-cert
sudo sed -i 's/port=3389/port=3390/g' /etc/xrdp/xrdp.ini
sudo ufw allow 3390
# 修复黑屏问题
sudo apt install -y libgl1-mesa-glx
echo "export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa/" | sudo tee -a /etc/xrdp/startwm.sh
sudo tee /etc/xrdp/startwm.sh > /dev/null <<'EOF'
#!/bin/sh
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config"
mkdir -p "$XDG_CACHE_HOME" "$XDG_CONFIG_HOME"
xfce4-session
EOF
sudo chmod +x /etc/xrdp/startwm.sh
sudo systemctl restart xrdp
# 设置中文环境
sudo apt install -y locales fonts-arphic-*
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8
apt install -y fcitx fcitx-googlepinyin
>> ~/.bashrc
>> ~/.bashrc
>> ~/.bashrc
systemctl mask colord --now
apt install -y tmux
tmux new -s xrdp-daemon -d

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online