超详尽WSL搭建教程,包含图形化界面安装、解决显存占用大的问题
近来决定尝试一下wsl,发觉确实很好用,比虚拟机香多了。把我的全部搭建过程记录出来。
我这儿使用wsl2,安装ubuntu,安装xfce4桌面环境安装wsl
官方教程
我这儿采用自动安装的形式。
须要先启用“适用于Linux的Windows子系统”可选功能,之后能够在Windows上安装Linux分发。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
或则在这儿勾选
先不着急重启,继续旁边的操作。
启用虚拟机功能
关于wsl2和wsl的区别看官方介绍,我这儿使用wsl2
安装WSL2之前,必须启用“虚拟机平台”可选功能。计算机须要虚拟化功能能够使用此功能。
以管理员身分打开PowerShell并运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
或则在这儿勾选
先不着急重启,继续前面操作。
wsl2似乎不启用这个选项也能使用,启用的似乎疗效会更好,总之启用了不会有问题。
先不着急重启,继续前面操作。
下载WSL2更新包
下载适用于x64计算机的WSL2Linux内核更新包
如今重启。
开启BIOS虚拟化功能
假如之前没开启过,在此次重启的时侯借此步入bios开启。
倘若不开启,后续过程会安装失败。
安装所选的Linux分发
如今重启完成,先安装WSL2更新包,也就是前面下载出来的wsl_update_x64.msi,双击运行。
然后打开MicrosoftStore,并选择你偏好的Linux分发版。
我这儿安装的是ubuntu,其他的发行版一样的操作。
安装完成点击启动
然后才会出现小黑框,提示你正在安装,等几分钟,正常情况等两分钟就安装成功了,如右图
输入用户名,输入两次密码,安装就完成了,就可以愉快的打闹了。
但是,这儿却很容易出问题,比较容易出现错误0x80070003或错误0x80370102。请确保启用了虚拟机平台,bios里开启了虚拟化功能。
但是我这儿全都开启了,依旧报错。后来发觉是虚拟机的问题,vmware和virtualbox我全都装了。直接卸载,之后重启,再度启动ubuntu,能够安装成功了。之前在MicrosoftStore上面下载成功以后,开始上面就早已出现了ubuntu的图标了,直接从开始上面点击图标就可以启动了。在安装成功然后直接在命令行上面输入ubuntu也能启动。
后来我又遇见了问题,由于我反复安装删掉了几次,后来就死活装不上了,就仍然报错WSL2请启用虚拟机平台Windows功能并确保在BIOS中启用虚拟化,后来找到这样一条命令解决,在命令行上面输入这条命令:
bcdedit /set hypervisorlaunchtype auto
之后再重启笔记本,重新安装,安装成功。
将分发版版本设置为WSL1或WSL2
在命令行或powershell中输入
wsl --list --verbose
缩写
wsl -l -v
可以查看ubuntu如今的状态以及使用的wsl的版本,正常情况刚安装的都是版本1,我这儿是设置为2了。
下边就是设置为wsl2
在cmd或powershell中输入命令
wsl --set-version <distribution name> <versionNumber>
请确保将替换为你的分发版的实际名称,并将替换为数字“1”或“2”。可以随时修改回WSL1,技巧是运行与前面相同的命令deepin linux,但将“2”替换为“1”。
所以我这儿实际的命令就是
wsl --set-version Ubuntu 2
稍等片刻即可完成。
注意,把所有的终端都关掉,并不能关掉ubuntu,仍然会在后台运行,并且在ubuntu中命令shutdown、init0、poweroff都不能用。
想要关掉ubuntu,须要在cmd或powershell中输入命令
wsl --shutdown
设置WSL默认以root用户登入
首先设置root用户密码
在ubuntu中输入
sudo passwd root
输入当前用户密码,再输入两次root用户密码。
之后再cmd或powershell中输入
ubuntu config --default-user root
再度登陆ubuntu,都会发觉是以root用户登陆的。
此时你会发觉,之前的用户是有颜色的,如今root没有颜色,直接用之前用户家目录下的.bashrc替换掉root目录下的.bashrc文件即可解决。
更改国外源
这儿就没哪些好讲的了,/etc/apt/sources.list文件,添加阿里或复旦或中科大或网易的源,下边提供一个阿里的源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
之后执行
apt update
按理来说这时就可以愉快的aptinstall各类软件了,而且此时会发觉aptupdate是有问题的,安装软件也失败。ping一下百度,网是通的,并且延时很高。后来发觉是dns的问题,更改/etc/resolv.conf文件红旗 linux,把地址改为223.5.5.5(阿里的DNS,也可以改成其他的,例如8.8.8.8,管用就行),这时侯ping一下百度延时也很低了,再度aptupdate就没错了,之后安装各类软件也是很快的。
在更改/etc/resolv.conf文件的时侯会发觉上面有这样一段内容
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
就是说这个文件是wsl手动生成的,假如要停止手动生成,在etc目录下创建一个wsl.conf文件,之后文件上面输入下边内容
[network]
generateResolvConf = false
此时注意了,一定要重启wsl服务能够生效,不是关掉ubuntu,首先关掉所有的终端,之后以管理员身分运行CMD或powershell输入命令
net stop LxssManager
net start LxssManager
虽然这个地址就是WSL2构架会为Linux系统分配一个虚拟网卡,在cmd中用ipconfig查看会发觉wsl网卡的地址就是/etc/resolv.conf中nameserver的地址。
这儿我不去停止手动生成,由于前面在安装图形化界面的时侯,都会涉及到这个文件,我会用其他方式更改这个地址。
远程登陆
安装并启动ssh服务器,在windows上通过ssh顾客端,例如putty,即可远程登陆。个人觉得使用wsl再去远程登陆意义不大,由于在windows上可以直接点击ubuntu的图标来登陆,也可以在cmd或则powershell中直接输入ubuntu来登入。所以远程登陆这儿就不详尽讲了。
windows与ubuntu之间文件互访
云端服务器,访问linux中的文件可以通过samba来实现,在虚拟机中还可以创建共享文件夹。现今使用wsl,非常简单。
首先ubuntu访问windows的文件,在/mnt目录下,你会发觉你的磁盘、d盘等等都被手动挂载上了,可以随便访问。
在windows中访问ubuntu的文件linux系统虚拟界面,首先在ubuntu中运行下边这条命令:
explorer.exe .
注意,那种点,或则写其他任意目录都行,而且一定要有一个目录。
这时侯windows才会打开这个文件夹。
之后点地址栏里的wsl$
这时侯会听到下边的样子
之后在ubuntu上右击,点映射网路驱动器
直接点完成
这时侯你才会发觉和使用samba是一样的,但是少了samba这些琐碎的配置。
到这儿你们有没有发觉,刚刚执行的explorer.exe是windows的资源管理器程序,其实这并不是说linux上面可以执行windows的程序,这儿ubuntu只是把命令交给了windows,还是windows来执行的。继续尝试你就会发觉,其他的windows程序都可以在ubuntu上面启动,其实了,都是交给windows运行的,并且能够发觉,ubuntu的PATH环境变量的值包含了windowsPATH的全部内容。
安装图形化界面
其实真正用linux的人基本都是使用命令行,并且对于这个wsl安装图形化界面还是很好奇的。
在网上找了一下,一种是安装ubuntu-desktop桌面,另一种是安装xfce4桌面。第一种安装失败,所以我采用的是xfce4桌面
首先在windows上安装ximg,下载地址或
之后运行XLaunch
四种风格,推荐最后一个,Dispalynumber填0
点下一步,不用改,继续点下一步
这儿一定要勾选
之后点下一步,完成。
接出来就是在ubuntu中安装xfce4
apt install xfce4-terminal
apt install xfce4
等安装完成,配置DISPLAY环境变量。你们注意了,这儿有个坑洞,对与这个DISPLAY的设置的命令,网上有exportDISPLAY=:0有exportDISPLAY=127.0.0.1:0有exportDISPLAY=localhost:0
之后运行startxfce4或则xfce4-session命令,各类形式我都尝试了,全部都报错。虽然这几种设置的DISPLAY的值是一样的,但这是针对WSL的,我这儿使用的是WSL2,这个地址是不对的。对于WSL2,正确的地址是/etc/resolv.conf上面的那种nameserver的地址,所以这儿应当执行的命令是
export DISPLAY=IP:0
startxfce4
这儿的IP要换成你的/etc/resolv.conf上面的那种地址,注意,是没被你自己改之前的那种地址。把startxfce4改成xfce4-session也可以,不晓得二者的区别与联系,并且疗效一样。这时侯你的XLaunch能够显示出桌面了。
这儿还可以使用xrdp配合windows自带的远程桌面或则vnc软件来实现。
安装xrdp
apt install xorg
apt install xrdp
更改默认的通讯端口
vim /etc/xrdp/xrdp.ini
port=3390 # 修改默认的通信端口`3389`,防止和Windows系统的远程桌面冲突
/etc/init.d/xrdp start
之后在ubuntu中用ifconfig查看ip,之后打开远程桌面联接,输入ip:3390,之后输入WSL2的帐户和密码进行登陆,结果会发觉死机,这是因为xrdp远程联接创建后对登陆使用的帐户不晓得该启动那个桌面Session会话造成,须要自动创建一下,在ubuntu中执行
cd ~
vim .xsession
# 文件内容就下面一行,保存退出
xfce4-session
再使用远程桌面联接,成功。不过觉得似乎很卡。不晓得使用vnc软件会不会好一些,没尝试。继续研究里面的XLaunch。
XLaunch形式的ip就很难受,由于/etc/resolv.conf上面的内容不是固定的,是会变的。
所以我这儿自己写了个脚本,来手动设置DISPLAY环境变量。
在用户目录下创建.set_display.sh文件,输入下边内容
#!/bin/bash
net_ip=$(cat /etc/resolv.conf | grep "#nameserver" | cut -f 2 -d ' ');
if [ ! -n "$net_ip" ]; then
net_ip=$(cat /etc/resolv.conf | grep "nameserver" | cut -f 2 -d ' ');
echo "#nameserver $net_ip" > /etc/resolv.conf
echo "nameserver 223.5.5.5" >> /etc/resolv.conf
fi
export DISPLAY=$net_ip:0
之后添加可执行权限
chmod +x .set_display.sh
之后在.bashrc中添加下边内容,实现在登陆时手动执行脚本
source /root/.set_display.sh
如今每次登入都可以手动设置正确的DISPLAY环境变量的值了。
创建启动图形界面的快捷方法
每次启动图形界面,都要先打开XLaunch,之后在ubuntu里执行startxfce4,比较冗长,下边介绍怎样在windows桌面上创建快捷方法,直接双击ok。
首先打开XLaunch按之前的那样配置,最后将配置保存出来,记住自己保存的位置,我这儿保存在C:mysoftstart_x_ubuntuconfig.xlaunch
之后在windows某个目录,创建bat批处理文件,我这儿文件名是startXubuntu.bat,文件内容
start "" "C:Program Files (x86)XmingXLaunch.exe" -run "C:mysoftstart_x_ubuntuconfig.xlaunch"
bash -c "cd /root && source /root/.set_display.sh && startxfce4"
注意,C:ProgramFiles(x86)XmingXLaunch.exe要按照你的安装路径做更改。
之后再创建一个vbs文件,文件内容
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "C:mysoftstart_x_ubuntustartXubuntu.bat",0
最后把xUbuntu.vbs发送到桌面快捷方法,再找个图标,换个好看的图标linux系统虚拟界面,直接双击,能够手动运行图象界面
显存占用过大的解决办法
使用一段时间才会发觉,笔记本变卡了,打开windows的任务管理器,会发觉有个Vmmem,占用了大量的显存,使用图象界面,这个进程使用的显存会更大,很显著这就是wsl的虚拟机。
但是你会发觉,就算你把图形界面关了,这儿的显存占用也不会变小。下边介绍解决技巧。
首先限制wsl最大使用显存
在C:Usersusername目录下创建文件.wslconfig,输入内容
[wsl2]
memory=4GB
swap=4GB
localhostForwarding=true
username是指你在windows下的用户名,内容中的具体大小依据你实际化学显存做适当更改。重启wsl服务。
在ubuntu中自动释放cache显存
echo 3 > /proc/sys/vm/drop_caches
为了便捷,可以弄成定时任务
crontab -e -u root
选择编辑器
输入内容
*/10 * * * * sync; echo 3 > /proc/sys/vm/drop_caches; touch /root/drop_caches_last_run
10代表每十分钟执行一次
在.bashrc中添加下边内容,容许启动cron服务而无需输入root密码,
[ -z "$(ps -ef | grep cron | grep -v grep)" ] && sudo /etc/init.d/cron start &> /dev/null
之后执行并添加下边内容
visudo
%sudo ALL=NOPASSWD: /etc/init.d/cron start
保存退出。
可以通过查看/root/drop_caches_last_run先前更改日期来检测cron作业是否正在相应地运行:
stat -c '%y' /root/drop_caches_last_run
整个WSL的搭建过程也就结束了。