Windows子系统WSL安装Ubuntu桌面GUI版本
最近犯懒,可能前段时间工作强度太大了,所以这几天更新频率放低了。本来前几天要写一篇关于AI的教程,但是无论怎么搞都无法部署成功,因为有一个需要的依赖库要在Linux系统中才可以安装,如果我们使用VM或其它虚拟机来安装Linux的话,又会面对无法调用GPU的问题。左思右想,突然想到微软在Windows系统内置了WSL功能,你可以理解为Windows自带的官方虚拟机,这个虚拟机目前有两个版本,如果你是Win11的话,默认情况下应该就是最新的版本2。
不过,安装Linux系统还是需要手动自行安装的,因为Windows只是内置了一个虚拟机而已。目前可以一键安装Ubuntu、Debian、kali-linux、OracleLinux、SUSE-Linux-Enterprise-Server、openSUSE等版本。但我们主要面向初学者,以后所有的使用过程中一直敲命令行的方式并不太友好,WSLg的方式大家也可能会使用不便,所以本站研究了整理了一下关于Windows下通过WSL2安装部署Ubuntu后,为其再添加GUI界面远程等功能。
关于安装部署非常非常简单,站长十分钟就搞定了,唯一搞不定的是关于安装后界面乱码的部分,这个问题困扰了站长好几天,甚至尝试重装系统,然后重装系统又遇到了新的问题,真的是烦死了。
说言太多了,下面是安装和遇到错误的主要过程。
组件安装
子系统
以管理员方式运行CMD功能,然后执行如下命令,这将会开启Windows的子系统功能,否则后续所有操作无法正常使用。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
以下是执行完成后的返回内容,可以看到我们所需要的系统功能已经成功被开启。
C:\Windows\System32>dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 部署映像服务和管理工具 版本: 10.0.22621.1 映像版本: 10.0.22621.1848 启用一个或多个功能 [==========================100.0%==========================] 操作成功完成。
虚拟机
以管理员方式运行CMD功能,然后执行如下命令,这将会开启Windows的虚拟机功能,否则后续所有操作无法正常使用。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
以下是执行完成后的返回内容,可以看到我们所需要的虚拟机功能已经成功被开启。
C:\Windows\System32>dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 部署映像服务和管理工具 版本: 10.0.22621.1 映像版本: 10.0.22621.1848 启用一个或多个功能 [==========================100.0%==========================] 操作成功完成。
重启电脑
别偷懒,完成以上安装之后一定要重启电脑,否则无法完成安装。
站长因为在这里偷懒,自作聪明的只是注销,所以耽误了半个小时。
sudo apt-get -y install locales xfonts-intl-chinese fonts-wqy-microhei
WSL|基础知识
什么是WSL?你可以理解为是一个完全虚拟出来的系统容器,在你当前的电脑系统里面再安装一个子系统。
我们可以通过直接在CMD内输入wsl
后按下回车,就能够进入到wsl虚拟机,但我们现在还没有安装任何东西,所以不需要这样操作。
以下是一些常用的wsl命令,大家先简单的了解一下即可,后面会逐个讲到。
查看已安装的Linux系统
我们可以先查看一下关于wsl的基本信息,在CMD中执行如下命令即可。
wsl -l
返回内容如下:
C:\Users\openA>wsl -l 适用于 Linux 的 Windows 子系统没有已安装的分发。 使用 'wsl.exe --list --online' 列出可用的分发 并使用 'wsl.exe --install <Distro>' 进行安装。 也可以通过访问 Microsoft Store 安装分发: https://aka.ms/wslstore Error code: Wsl/WSL_E_DEFAULT_DISTRO_NOT_FOUND
因为我们没有安装过任何Linux系统,所以这里显示为空。
否则应该如下:
C:\Users\openA>wsl -l 适用于 Linux 的 Windows 子系统分发: Ubuntu (默认)
开启WSL系统
开机方式非常简单,我们可以只需要输入wsl
即可自动开启默认的Linux系统。
wsl
关闭当前Linux系统
也就是最常见的关机命令,非常方便。
wsl --shutdown
更新WSL
更新适用于 Linux 的 Windows 子系统程序包。
wsl --update
列出可安装的Linux系统
wsl -l -o
以下是返回内容:
C:\Users\openA>wsl -l -o 以下是可安装的有效分发的列表。 使用 'wsl.exe --install <Distro>' 安装。 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 OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_7 Oracle Linux 8.7 OracleLinux_9_1 Oracle Linux 9.1 SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4 openSUSE-Leap-15.4 openSUSE Leap 15.4 openSUSE-Tumbleweed openSUSE Tumbleweed
拿Ubuntu系统来举例,我们可以看到其中包含Ubuntu
|Ubuntu-22.04
|Ubuntu-20.04
|Ubuntu-18.04
等多个版本,如果没有特殊要求,我们直接安装第一个Ubuntu
即可,因为这是Ubuntu的最新版本。
Ubuntu安装
Liunx是开源系统,所以有很多开发者为其提供系统服务支持,我们可以理解为同一个版本的Windows系统,但是存在多个发布商,比如微软、苹果、亚马逊等,每个版本都有各自的优缺点。
目前较为主流的Linux系统为Ubuntu,所以我们直接安装最新版的Ubuntu系统即可。
系统安装
我们理论上应该进入微软商店安装Ubuntu,但是那样做不太优雅,我们可以通过在CMD中执行如下命令行直接安装。
wsl --install -d Ubuntu
等等片刻之后,将会看到如下内容:
C:\Users\openA>wsl --install -d Ubuntu 正在安装: 虚拟机平台 已安装 虚拟机平台。 正在安装: 适用于 Linux 的 Windows 子系统 已安装 适用于 Linux 的 Windows 子系统。 正在安装: Ubuntu 已安装 Ubuntu。 正在启动 Ubuntu... Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username:
用户及密码设置
此时的大致意思为,需要我们输入一个用户名,本站就以openai_wiki
为例。
Enter new UNIX username: openai_wiki
然后需要我们输入用户密码:
注意:输入密码过程不可见,正常盲输即可。
New password:openai.wiki
再次输入密码,确认两遍一致即可。
Retype new password:openai.wiki
最后完成返回内容如下:
C:\Users\openA>wsl --install -d Ubuntu Ubuntu 已安装。 正在启动 Ubuntu... Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: openai_wiki # 用户名 New password:openai.wiki # 用户密码 Retype new password:openai.wiki # 确认密码 passwd: password updated successfully Installation successful! To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage This message is shown once a day. To disable it please create the /home/openai_wiki/.hushlogin file. openai_wiki@openAI:~$
此时我们已经完成了系统的安装与用户名和密码设置,并且默认直接进入到了wsl系统。
但这并不是root用户,root用户是Linux系统的默认账户,拥有最高权限,我们顺便将root密码重置一下。
输入如下命令就,即可更改root密码。
sudo passwd root
先输入刚刚设置的密码,然后输入想要设置的root密码,最后再输入一次想要设置的root密码,完整的内容如下。
openai_wiki@openAI:~$ sudo passwd root [sudo] password for openai_wiki:<当前账户密码> New password:<root密码> Retype new password:<root密码> passwd: password updated successfully
相关补充
下面两张截图都是从CMD中截取的,但左图是C:\Users\openA>
,右图是openai_wiki@openAI:~$
。
左图是我们处于CMD操作内,需要输入CMD脚本命令;右图是处于WSL的Linux虚拟机内,所以需要Linux命令来控制虚拟机。
如何在CMD中进行虚拟机?
wsl
如何退出虚拟机返回至CMD?
exit
界面安装
我们已经完成了WSL子系统的虚拟机安装,如果你对Linux比较熟悉,不需要操作界面也可以正常操作的话,那您此时不需要后面的操作啦。
对于新手或刚接触编程的人来讲,拥有可以交互的界面才最优选,下面是关于界面的安装配置教程。
注意:下面的命令没有任何操作技巧,直接复制粘贴执行即可。
确保自己处于WSL虚拟机内,执行如下命令,更新软件包列表并升级:
sudo apt update && sudo apt -y upgrade
注意:这里需要输入密码,我们直接
完成上述步骤之后,我们逐条执行如下命令,安装xrdp
、xfce4
和xfce4-goodies
软件包,这些都是GUI界面必不可少的组件。
sudo apt install -y xrdp
sudo apt install -y xfce4
sudo apt install -y xfce4-goodies
执行如下命令,修改xrdp配置文件中的端口号和位深度:
sudo sed -i 's/3389/3389/g' /etc/xrdp/xrdp.ini & sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini & sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
执行如下命令,设置Xfce会话:
echo xfce4-session > ~/.xsession
执行如下命令,编辑xrdp启动文件:
sudo nano /etc/xrdp/startwm.sh
这里有点特殊,你将会看到如下内容:
GNU nano 6.2 /etc/xrdp/startwm.sh #!/bin/sh # xrdp X session start script (c) 2015, 2017, 2021 mirabilos # published under The MirOS Licence # Rely on /etc/pam.d/xrdp-sesman using pam_env to load both # /etc/environment and /etc/default/locale to initialise the # locale and the user environment properly. if test -r /etc/profile; then . /etc/profile fi test -x /etc/X11/Xsession && exec /etc/X11/Xsession exec /bin/sh /etc/X11/Xsession [ Read 14 lines ] ^G Help ^O Write Out ^W Where Is ^K Cut ^T Execute ^C Location M-U Undo M-A Set Mark ^X Exit ^R Read File ^\ Replace ^U Paste ^J Justify ^/ Go To Line M-E Redo M-6 Copy
我们在将其中下面这两行前面添加#号:
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession #exec /bin/sh /etc/X11/Xsession
然后在最后一行添加如下内容至文本末尾,启动Xfce的命令:
# xfce startxfce4
修改之后的完整内容如下:
GNU nano 6.2 /etc/xrdp/startwm.sh * #!/bin/sh # xrdp X session start script (c) 2015, 2017, 2021 mirabilos # published under The MirOS Licence # Rely on /etc/pam.d/xrdp-sesman using pam_env to load both # /etc/environment and /etc/default/locale to initialise the # locale and the user environment properly. if test -r /etc/profile; then . /etc/profile fi #test -x /etc/X11/Xsession && exec /etc/X11/Xsession #exec /bin/sh /etc/X11/Xsession # xfce startxfce4 ^G Help ^O Write Out ^W Where Is ^K Cut ^T Execute ^C Location M-U Undo M-A Set Mark ^X Exit ^R Read File ^\ Replace ^U Paste ^J Justify ^/ Go To Line M-E Redo M-6 Copy
此进我们已经修改好啦,按下键盘上的Ctrl键
➕x键
,然后按下y
键,最后按回车
键,即可保存并返回到之前的界面。
执行如下命令,启动xrdp服务:
sudo /etc/init.d/xrdp start
好啦,至此我们已经安装完成了所有关于GUI的界面部分,并且配置好了远程环境,我们可以使用Windows的远程桌面功能来链接到WSL虚拟机啦。
但是在此之前我们还需要先知道该虚拟机的IP地址,我们输入如下命令即可查看:
ip a
返回内容如下:
openai_wiki@openAI:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1492 qdisc mq state UP group default qlen 1000 link/ether 00:15:5d:50:33:57 brd ff:ff:ff:ff:ff:ff inet 172.28.28.231/20 brd 172.28.31.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::215:5dff:fe50:3357/64 scope link valid_lft forever preferred_lft forever
我们只查看第2部分的inet行即可,可以看到IP地址为172.28.28.231
,记录一下。
远程连接
在CMD中执行如下命令,将IP替换为自己的实际WSL地址即可。
mstsc /v:<IP>
以下是本站所获取到的实际地址:
mstsc /v:172.28.28.231
执行完上面的命令之后,将会看到如下界面。
但是这里存在一个BUG,如果使用非root账号登录,那么远程界面就会闪退,站长始终没有找到解决办法,在这里卡了一天之久也没有解决,最后妥协了。
使用root+密码登录之后,将会看到如下界面:
可以看到系统存在各种乱码,下面说一下关于解决乱码的问题。
中文支持|乱码处理
如上图所见的那样,默认情况下,大概率是存在乱码的。
编码选择
我们先执行下面的命令,选择语言和编码为中文。
sudo dpkg-reconfigure locales
按空格
勾选以下语言,然后按下回车
键。
en_US ISO-8859-1 en_US.ISO-8859-15 ISO-8859-15 en_US.UTF-8 UTF-8 zh_CN GB2312 zh_CN.GBK GBK zh_CN.UTF-8 UTF-8 zh_TW BIG5 zh_TW.UTF-8 UTF-8
以下是你看到的界面,找到以上选项,按下空格
键之后,可以为语言加*
标,确保以上内容都已经被加星之后,按回车
键保存。
Package configuration ┌─────────────────────────────────────────────┤ Configuring locales ├─────────────────────────────────────────────┐ │ Locales are a framework to switch between multiple languages and allow users to use their language, country, │ │ characters, collation order, etc. │ │ │ │ Please choose which locales to generate. UTF-8 locales should be chosen by default, particularly for new │ │ installations. Other character sets may be useful for backwards compatibility with older systems and software. │ │ │ │ Locales to be generated: │ │ │ │ [*] en_US ISO-8859-1 ▒ │ │ [*] en_US.ISO-8859-15 ISO-8859-15 ▒ │ │ [*] en_US.UTF-8 UTF-8 ▒ │ │ [ ] yi_US.UTF-8 UTF-8 ↑ │ │ [ ] yo_NG UTF-8 ▒ │ │ [ ] yue_HK UTF-8 ▒ │ │ [ ] yuw_PG UTF-8 ▒ │ │ [*] zh_CN GB2312 ▒ │ │ [*] zh_CN.GB18030 GB18030 ▒ │ │ [*] zh_CN.GBK GBK ▒ │ │ [*] zh_CN.UTF-8 UTF-8 ▒ │ │ [ ] zh_HK BIG5-HKSCS ▒ │ │ [ ] zh_HK.UTF-8 UTF-8 ▮ │ │ [ ] zh_SG GB2312 ▒ │ │ [ ] zh_SG.GBK GBK ↓ │ │ │ │ │ │ <Ok> <Cancel> │ │ │ └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
按下回车之后,将会看到如下界面:
Package configuration ┌──────────────────────────────────────────────┤ Configuring locales ├──────────────────────────────────────────────┐ │ Many packages in Debian use locales to display text in the correct language for the user. You can choose a │ │ default locale for the system from the generated locales. │ │ │ │ This will select the default language for the entire system. If this system is a multi-user system where not all │ │ users are able to speak the default language, they will experience difficulties. │ │ │ │ Default locale for the system environment: │ │ │ │ None │ │ C.UTF-8 │ │ en_US │ │ en_US.ISO-8859-15 │ │ en_US.UTF-8 │ │ zh_CN │ │ zh_CN.GB18030 │ │ zh_CN.GBK │ │ [zh_CN.UTF-8] │ │ │ │ │ │ <Ok> <Cancel> │ │ │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
确保你的光标停留在zh_CN.UTF-8
,然后按下回车
键。
以下是按下回车键之后的执行过程:
openai_wiki@openAI:/mnt/c/Users/openA$ sudo dpkg-reconfigure locales Generating locales (this might take a while)... en_US.ISO-8859-1... done en_US.ISO-8859-15... done en_US.UTF-8... done zh_CN.GB2312... done zh_CN.GB18030... done zh_CN.GBK... done zh_CN.UTF-8... done Generation complete.
这个过程主要是生成语言之类的,确保完成即可。
字体安装
执行如下命令,安装一些必要的字体。前两个中文简体,后面是中文繁体。
sudo apt-get install fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp fonts-arphic-gkai00mp
以下是安装过程:
openai_wiki@openAI:/mnt/c/Users/openA$ sudo apt-get install fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp fonts-arphic-gkai00mp Reading package lists... Done Building dependency tree... Done Reading state information... Done The following NEW packages will be installed: fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp fonts-arphic-gkai00mp 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 7846 kB of archives. After this operation, 22.8 MB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu jammy/universe amd64 fonts-arphic-bsmi00lp all 2.10-18 [3831 kB] Get:2 http://archive.ubuntu.com/ubuntu jammy/universe amd64 fonts-arphic-gbsn00lp all 2.11-16 [1724 kB] Get:3 http://archive.ubuntu.com/ubuntu jammy/universe amd64 fonts-arphic-gkai00mp all 2.11-16 [2292 kB] Fetched 7846 kB in 7s (1148 kB/s) Selecting previously unselected package fonts-arphic-bsmi00lp. (Reading database ... 73805 files and directories currently installed.) Preparing to unpack .../fonts-arphic-bsmi00lp_2.10-18_all.deb ... Unpacking fonts-arphic-bsmi00lp (2.10-18) ... Selecting previously unselected package fonts-arphic-gbsn00lp. Preparing to unpack .../fonts-arphic-gbsn00lp_2.11-16_all.deb ... Unpacking fonts-arphic-gbsn00lp (2.11-16) ... Selecting previously unselected package fonts-arphic-gkai00mp. Preparing to unpack .../fonts-arphic-gkai00mp_2.11-16_all.deb ... Unpacking fonts-arphic-gkai00mp (2.11-16) ... Setting up fonts-arphic-gkai00mp (2.11-16) ... Setting up fonts-arphic-bsmi00lp (2.10-18) ... Setting up fonts-arphic-gbsn00lp (2.11-16) ... Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ...
重启WSL
执行如下命令,重启WSL虚拟机。
sudo reboot
执行如上命令之后,将会从Linux的终端中退出,返回到CMD命令内,我们重新输入wsl
,进入虚拟机。
wsl
远程控制
远程有两种启动方式,一种是在CMD中输入mstsc
按下回车键,将会打开远程窗口,手动输入IP地址和用户名即可。
也可以直接在CMD中输入如下内容,开启远程连接:
mstsc /v:172.28.28.231
系统快照
熟悉虚拟机的朋友可能听名字就知道这是什么了,其实就是将你现在已经部署好的虚拟机做一个备份,可以让你随时还原到当前虚拟机的状态。
这个功能非常非常有用,因为你无法确定会不会有时候把虚拟机给搞乱了。
拍摄快照
我们在CMD中执行如下命令,将会把你当前状态的虚拟机进行快照拍摄,其中的Ubuntu
是虚拟机的名称
,后面的D:\WSL\WSL-Ubuntu.tar
是保存的路径
+文件名
,可以自行修改。
wsl --export Ubuntu D:\WSL\WSL-Ubuntu.tar
执行完成后,等待片刻,可以在D盘
的WSL
目录下看到WSL-Ubuntu.tar
文件已成功生成。
还原快照
在CMD中逐条执行如下命令,即可完成导入虚拟机备份的快照功能,说白了就是恢复备份。
关闭WSL虚拟机:
wsl --shutdown
删除名为Ubuntu的虚拟机:
wsl --unregister Ubuntu
导入我们之前备份的虚拟机,其中Ubuntu
为虚拟机名称,D:\WSL
为导入虚拟机的路径,D:\WSL\WSL-Ubuntu.tar
为虚拟机备份文件路径,--version 2
为版本号,关于版本一般来说忽略即可。
wsl --import Ubuntu D:\WSL D:\WSL\WSL-Ubuntu.tar --version 2
注意:D:\WSL
这个路径就是你想把导入备份的虚拟机安装到哪里,我们无论指定到哪个路径都是可以正常执行的,只要确认tar文件路径正确即可。
这里有一点特殊,我们设置默认登陆用户为安装时用户名,这个功能是指我们在开机进入wsl时的默认登录用户名,还是蛮有用的。
Ubuntu config --default-user openai
总结
我没想到,简简单单的操作,居然折腾了这么久,期间遇到的问题太多了,这是站长写教程以来,耗时最久的,但还是不够完美,可以看到还是有一些乱码的,但实在不想折腾了,如果有大佬麻烦可以指点一下。
期间有很多排雷过程没有写出来,比如因为xfce4存在乱码的问题,所以尝试去安装Ubuntu-Desktop官方界面,这个界面主题2个多GB,但是安装过程非常漫长且一堆报错。给电脑做系统遇到Win11远程桌面无法通过RD连接的问题等等。唉,算了,不吐槽了吧。
评论 (0)