Windows下使用WSL2创建Ubuntu子系统(更改安装位置与启动图形桌面)

Windows下使用WSL2创建Ubuntu子系统(更改安装位置与启动图形桌面)

本文介绍如何使用WSL2创建Ubuntu子系统,并更改安装位置到其他磁盘,并启动图形桌面Xfce4。

WSL 版本: 2.5.7.0

系统版本: Windows11 23H2

相关工具:MobaXterm 25.1

首次编辑:2025年6月19日

一、打开Windows的三个虚拟化基础功能

控制面板-程序和功能-启动或关闭Windows功能,勾选Hyper-v适用于Linux的Windows子系统虚拟机平台完成后等待启动后根据提示重启电脑。


二、安装WSL2和Ubuntu

1. 安装WSL2

  1. 打开PowerShell输入wsl --install,完成后显示适用于 Linux 的 Windows 子系统已安装。,其他错误信息可以忽略。
  2. 输入wsl.exe --update,进度条完成后即可。
powershell 复制代码
wsl --install
wsl.exe --update

可以直接下载wsl的离线安装包,地址如下https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

2. 安装Ubuntu

  1. 打开Microsoft Store搜索Ubuntu,选择合适的版本获取并安装。我这里安装的是Ubuntu 22.04 LTS
  1. 安装完成后可以在开始菜单打开Ubuntu,会弹出下列终端界面以及wsl的帮助界面

  2. 第一次启动Ubuntu会提示输入用户名和密码,输入后显示下列界面,此时即可通过终端进行操作。

三、更改Ubuntu安装位置

1. 关闭Ubuntu系统

运行PowerShell,输入wsl --shutdown。再输入wsl -l -v查看Ubuntu-22.04的运行状态,STATEStopped即说明已关闭。

powershell 复制代码
wsl --shutdown
wsl -l -v

2. 创建目录。

在合适的磁盘上创建一个目录,例如E盘的E:\Ubuntu2204

3. 导出镜像。

在PowerShell中输入下列命令,将Ubuntu导出到指定目录,并等待操作完成。

powershell 复制代码
wsl --export Ubuntu-22.04 E:\Ubuntu2204.tar

4. 注销原系统。

在wsl中注销原有的Ubuntu系统,powershell中输入wsl --unregister Ubuntu-22.04。完成后输入wsl -l -v查看,提示适用于 Linux 的 Windows 子系统没有已安装的分发。即为卸载成功。

powershell 复制代码
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即为导入成功。

powershell 复制代码
wsl --import Ubuntu-22.04 E:\Ubuntu2204 E:\Ubuntu2204.tar
wsl -l -v

6. 更改默认用户。

在powershell中输入ubuntu2204.exe config --default-user [YourUesrName],将新的Ubuntu系统默认用户设置为[YourUesrName]

如更改默认用户为tdc,则输入下列命令:

powershell 复制代码
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,等待更新完成。

方案1:使用Ubuntu-desktop(失败)

在Ubuntu终端中运行下列命令,等待安装完成。

bash 复制代码
sudo apt purge -y acpid acpi-support modemmanager
sudo apt-mark hold acpid acpi-support modemmanager
sudp apt install ubuntu-desktop gnome -y

我这里出现Setup界面后会出现如下错误,无法启动。


方案2:使用xUbuntu-desktop(xfce4)

1. 安装Xubuntu-desktop

在Ubuntu终端中运行下列命令,等待安装完成。

bash 复制代码
sudo apt purge -y acpid acpi-support modemmanager
sudo apt-mark hold acpid acpi-support modemmanager
sudo apt install -y xubuntu-desktop

也可以安装更为精简的xfce4xfce4-goodies

bash 复制代码
sudo apt install -y xfce4 xfce4-goodies

xubuntu-desktop相比于xfce4,xubuntu-desktop会安装更多的软件,如Firefox(浏览器)、gmusicbrowser(音频)、Parole(视频)、Ristretto(照片管理)、Abiword/Gnumeric(办公)等。

在开始安装时,会弹出下列设置,这里选择轻量化的Lightdm 显示管理器。

2. 安装Xrdp

在Ubuntu终端中运行下列命令,等待安装完成。

bash 复制代码
sudo apt install -y xrdp

3. 配置Xrdp

添加xrdp用户

bash 复制代码
sudo adduser xrdp ssl-cert

配置端口号。编辑/etc/xrdp/xrdp.ini文件:

bash 复制代码
sudo nano /etc/xrdp/xrdp.ini

该文件内容如下,;开头的为注释;将port=3389修改为需要的端口,并保存。

bash 复制代码
; 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文件中的端口号保持一致。

bash 复制代码
sudo ufw allow 3389

编辑/etc/xrdp/startwm.sh文件

bash 复制代码
sudo nano /etc/xrdp/startwm.sh

将其内容替换为下列内容:

bash 复制代码
#!/bin/sh
unset DBUS_SESSION_BESSION_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终端中运行下列命令,等待启动完成。

bash 复制代码
sudo systemctl restart xrdp

4.黑屏问题

安装mesa并将其添加到Xrdp的启动脚本/etc/xrdp/startwm.sh中。

bash 复制代码
sudo apt install libgl1-mesa-glx
sudo nano /etc/xrdp/startwm.sh

添加以下内容:

bash 复制代码
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa/

重新启动Xrdp:

bash 复制代码
sudo systemctl restart xrdp

6. 连接Xrdp

使用Windows的远程桌面连接 连接到Ubuntu系统,设置目标为localhost:33893389为上述设置的端口号。

输入用户名和密码即可登录到桌面:

五、配置Xfce4桌面

1.设置中文

在Ubuntu终端中运行下列命令选择语音和编码。

bash 复制代码
sudo dpkg-reconfigure locales

第一个界面划到最下面按下Space勾选zh_CN.UTF-8 UTF-8,按Enter确定,第二个界面选择zh_CN.UTF-8,按Enter确定。


在Ubuntu终端中运行下列命令安装语言字体包。

bash 复制代码
sudo apt-get install fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp

安装完成后,重启Ubuntu系统。

2.设置中文输入法

在Ubuntu终端中运行下列命令安装fcitx输入法与中文输入法包。

bash 复制代码
sudo apt install fcitx fcitx-googlepinyin

安装完成后,在启动项中添加fcitx,并设置默认输入法为fcitx

配置.bashrc文件

bash 复制代码
sudo nano ~/.bashrc 

添加以下内容:

bash 复制代码
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

启动输入法

bash 复制代码
fcitx

一些问题

1.弹出提示:需要授权来创建色彩管理设备

每次启动Ubuntu系统,都会弹出提示:需要授权来创建色彩管理设备。

在Ubuntu终端中运行下列命令,禁用colord

bash 复制代码
systemctl status colord          # 检查是否仍在运行
sudo systemctl stop colord       # 强制停止
sudo systemctl disable colord    # 禁用开机自启
sudo systemctl mask colord       # 彻底屏蔽(防止被其他服务依赖启动):cite[2]

2.部分GUI软件在Windows中打开

新版WSL2默认启用WSLg,WSLg允许在Windows中运行GUI软件,我们使用了RDP访问Ubuntu系统,因此不再需要WSLg,因此需要禁用WSLg。

在PowerShell中运行下列命令,修改WSL的配置文件。

powershell 复制代码
wsl --shutdown
notepad "$env:USERPROFILE\.wslconfig"

添加下列内容并保存:

ini 复制代码
[wsl2]
guiApplications=false

随后重启几次WSL即可正常。

3.后台运行WSL

运行WSL需要开启一个Ubuntu终端,一旦终端关闭,WSL就会停止运行,RDP也会断开连接。

可以使用tmux终端复用工具在单个终端窗口中创建持久化的会话,即使关闭终端,会话仍能在后台运行。

安装tmux终端复用工具:

bash 复制代码
sudo apt install tmux

创建tmux会话:可以创建匿名会话或命名会话。命名会话可以方便管理会话,例如,可以创建多个会话,并分别运行不同的任务。

bash 复制代码
tmux                     # 创建匿名会话
tmux new -s <会话名>      # 创建命名会话(推荐)

如:创建命名会话daemon:

bash 复制代码
tmux new -s daemon

此时会进入名为daemon的会话,将该会话后台运行:先按Ctrl+B,松开后再按D

此时关闭终端,会话daemon依然在后台运行,并且WSL仍然正常运行。

重新连接会话:

bash 复制代码
tmux attach -t <会话名>   # 重新连接指定会话
tmux ls                  # 查看所有会话列表

如:重新连接会话daemon

bash 复制代码
tmux attach -t daemon

关闭会话:在会话内按Ctrl+D;或者输入exit

一键部署脚本(未经验证,谨慎使用)

1. Windows端操作

下列脚本由 AI 自动生成,未经测试,请谨慎使用!

以管理员权限打开PowerShell,运行下列命令:(自行修改安装目录路径)

powershell 复制代码
# 该脚本由 AI 自动生成,未经测试,请谨慎使用!

# 启用必要功能并重启
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

2. Ubuntu端操作

下列脚本由 AI 自动生成,未经测试,请谨慎使用!

启动wsl,在Ubuntu终端中运行下列命令:(自行修改使用的桌面环境xubuntu-desktop/xfce4)

bash 复制代码
#!/bin/bash

# 该脚本由 AI 自动生成,未经测试,请谨慎使用!

# 更新系统并安装 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

# 安装中文输入法
sudo apt install -y fcitx fcitx-googlepinyin
echo "export GTK_IM_MODULE=fcitx" >> ~/.bashrc
echo "export QT_IM_MODULE=fcitx" >> ~/.bashrc
echo "export XMODIFIERS=@im=fcitx" >> ~/.bashrc

# 禁用 colord 服务
sudo systemctl mask colord --now

# 安装 tmux 保持后台运行
sudo apt install -y tmux
tmux new -s xrdp-daemon -d "sudo /usr/sbin/xrdp"

其他相关参考

  1. WSL2中使用USB设备

  2. WSL2中使用VSCode

相关推荐
为思念酝酿的痛7 小时前
POSIX信号量
linux·运维·服务器·后端
杨连江7 小时前
仿人脑抑制机制的图像识别网络抗全域异常激活算法研究
经验分享·神经网络
Dfreedom.8 小时前
Windows、虚拟机、开发板组网通信原理及调试通联步骤
人工智能·windows·部署·边缘计算·开发板·模型加速
芯片智造8 小时前
cmp后清洗的刷子是什么材质?
经验分享
中屹指纹浏览器9 小时前
2026指纹浏览器代理链路适配原理与多线路集群调度方案
经验分享·笔记
人还是要有梦想的9 小时前
linux下用搜狗输入法,中英文切换
linux·运维·服务器
bush49 小时前
嵌入式linux学习记录二
linux·运维·学习
9分钟带帽9 小时前
linux_通过NFS挂载远程服务器的硬盘
linux·服务器
Voicefox声狐11 小时前
外呼机器人与CRM集成有多难?技术架构对比分析
经验分享
运维栈记12 小时前
API Error: 400 Request body format invalid
linux·ai