windows linux子系统版本切换(wsl1与wsl2)
一开始本教程是打算部署wsl使用显卡的,由于电脑自带显卡过旧,可能没有用,所以部署显卡教程暂时停滞,下面主要是介绍wsl1切换为wsl2
现在windows的linux子系统也可以直接使用主机的显卡了,不过需要wsl版本为2,同时需要在windows下安装好显卡的驱动,wsl下就不用安装了,而且linux的内核需要5.10.43.3或更高。下面我们来说明下具体的操作步骤。
一. WSL版本及内核
首先我们可以检查下你的WSL版本
wsl -l -v
上诉命令可以查看你安装的Linux及对应的wsl版本,如果版本是1,则你需要更新一下
wsl --set-version Debian 2 # 例如该命令将debian修改为使用wsl2
wsl --set-default-version 2 # 设置wsl默认版本为2
如果你的版本为2了,则查看你对应linux的内核版本是否5.10.43.3或更高,如果不是的话,则需要更新
wsl --status
wsl cat /proc/version
# 以上两个命令均可查看内核版本
wsl --update # 若你的电脑没有设置更新,则需要设置更新或者采用下面的步骤
# 到该链接下下载对应版本的升级程序 https://www.catalog.update.microsoft.com/Search.aspx?q=wsl
# 或者到https://github.com/microsoft/WSL2-Linux-Kernel 下载后编译,这部分由于我没有操作,请看官方文档或查找教程
# 下载升级程序后点击运行即可
# 更新完后重启wsl
wsl --shutdown
二. 网络配置
wsl2的网络和wsl1的不同,其与主机的网络不在同个网段内,所以需要配置一下
3.1 主机访问wsl
由于不能像wsl1那样直接通过127.0.0.1进行访问。所以如果主机想用xshell这样的远程工具进行连接时,比较麻烦,需要找到对应wsl的ip地址才行,但是吧,每次重启后,这个ip都会更换,所以就比较麻烦了。所以我打算通过自动修改主机上的hosts文件,让wsl ip 解析到一个固定域名,用域名连接。由于在wsl中可以访问到主机的文件,所以我们直接通过wsl平台进行自动修改比较方便。我的做法是将替换的代码写入到自启脚本中(/etc/init.wsl),见 windows10 linux子系统(wsl)开机自启
this_ip=`hostname -I` # 也可以用该命令获取 ifconfig eth0 | head -n2 | grep inet | awk '{print$2}'
host_file=/mnt/c/Windows/System32/Drivers/etc/hosts
sed -i "s|.*wsl|${this_ip}\twsl|" $host_file
3.2 wsl访问主机
我的wsl是直接ping不到宿主机的,这是由于宿主机防火墙的原因,你可以使用以下的命令查看你是否能ping到你的宿主机
win_ip=`cat /etc/resolv.conf | grep nameserver | cut -d ' ' -f 2`
echo $win_ip
ping $win_ip
如果不行的话,则需要在主机的防火墙处新增一个入站协议,主要在作用域处,本地IP选择任何IP地址,远程IP选择下列IP地址,然后添加本地子网地址即可,其余选项可默认。保存后,即可。
同时,为了防止该ip会变动,我们也通过域名解析的方式,将其与域名关联起来。也是将下述替换代码添加到自启脚本中(/etc/init.wsl)
win_ip=`cat /etc/resolv.conf | grep nameserver | cut -d ' ' -f 2`
wsl_host=/etc/hosts
if [`grep -c "win_host" $wsl_host` -ne '0'];then # 更新wsl host文件
sed -i "s|.*win_host|${win_ip} win_host|" $wsl_host
else
echo "${win_ip} win_host" >> $wsl_host
fi
参考:
1. https://docs.microsoft.com/en-us/windows/ai/directml/gpu-cuda-in-wsl
2. https://docs.nvidia.com/cuda/wsl-user-guide/index.html#getting-started-with-cuda-on-wsl
最新评论:
发表评论
电子邮件地址不会被公开。 必填项已用*标注