windows子系统ubuntu2204 wsl2
前提:windows内核版本支持wsl2(目前是内部版本不能低于 19041)
查看命令(cmd/powershell):winver
1. wsl1不需要内核虚拟化和hyper-v,wsl2需要内核虚拟化支持并启用hyper-v
所以可能使用wsl1时,可以创建虚拟机,但是启用wsl2就会报错,提示:未开启bios虚拟化或hyper-v
#启用wsl
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
#启用hyper-v dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
查看当前wsl子系统情况
wsl --list --verbose
#简写
wsl -l -v
切换到wsl2
#升级wsl
wsl --update
#切换默认wsl版本为wsl2(未开启虚拟化会有报错提示) wsl --set-default-version 2 #使用wsl2管理指定子系统 wsl --set-version Ubuntu-22.04 2
子系统安装
#查看可从微软商城导入的子系统 wsl --list --online #安装ubuntu2204 wsl --install Ubuntu-22.04
子系统管理
#查看所有已经安装的分发版本: wsl --list --all #查看正在运行的分发版本: wsl --list --running #删除指定的分发版本: wsl --unregister <DistributionName>
netsh winsock reset
参考链接:https://blog.csdn.net/weixin_47145054/article/details/129865298
全网最详细搭建Win10+WSL2+Ubuntu-22.04LTS+CUDA+Xfce4+noVNC个人工作站 本文主要解决的问题点: win10下使用Ubuntu系统 解决WSL默认不支持systemD的BUG 物理机显卡可在Ubuntu系统直通使用 Ubuntu系统界面图形可视化 图形界面汉化 Ubuntu系统下使用拼音输入法 不需要物理机安装任何软件即可通过web直接访问Ubuntu 配置Firefox和Pycharm 解决WSL下的noVNC剪贴板不能与WIN共享的BUG 讲解Xfce4桌面使用的tricks 美化Windows终端 整理不易,希望大家点赞关注+收藏👍👍 下面是我搭建过程中的一些经验,希望能够帮助到有相关需求的朋友、伙伴们💕💕 文章目录 全网最详细搭建Win10+WSL2+Ubuntu-22.04LTS+CUDA+Xfce4+noVNC个人工作站 1. Windows10更新 2. 基于WSL2安装Ubuntu-22.04LTS 3. WSL开启systemd 4. 配置noVNC通过web访问Ubuntu-22.04 5. Ubuntu-22.04配置图形化界面并进行汉化 6. 安装Fcitx实现中英文输入 7. 配置Firefox 8. 配置Pycharm解释器 9. 实现win系统与Ubuntu-22.04共享剪贴板 10. 使用物理显卡 11. 使用Xfce4的tricks 12. Windows终端美化 参考资料 1. Windows10更新 为了避免很多不必要的麻烦,请将Windows10更新至最新版本,若不更新,则可能会导致Microsoft Store无法成功下载Ubuntu系列的软件,后面还会有一些奇葩的BUG。 Windows10无法更新,缺少文件或损坏等情况,请下载微软官方的win10自动更新工具 除了win10更新工具还有win11等,如果使用win10更新工具则会将win10更新至最新版,而不会自动更新至win11,因为我这里已经使用过该更新工具,所以不会显示下载页面,而是立即更新。下载之后,得到一个exe软件,直接双击使用即可,更新过程需要一些时间,过程有些慢… 我的win10版本号如下: 2. 基于WSL2安装Ubuntu-22.04LTS 以管理员的身份打开powerShell 运行下面指令以确保开启适用于 Linux 的 Windows 子系统(WSL)和虚拟机平台配置项,然后开机重启 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 下载Linux内核更新程序包,主要是将WSL更新至WSL2,下载安装即可 两种方案安装Ubuntu-22.04LTS 方案一: 这个方案比较简单,直接在C盘安装,在Microsoft Store里搜索Ubuntu,下载相应版本即可,目前我尝试过Ubuntu-20.04LTS和Ubuntu-22.04LTS都能够正常安装 然后打开相应Ubuntu即可直接安装,第一次打开安装需要等待一段时间,设置用户名和密码即可,使用wsl -l -v命令查看安装的version是否为2,若显示当前不是 WSL 2 版本,通过命令wsl --set-version Ubuntu-22.04 2进行设置 WSL 的默认版本 由于我的C盘大小为715G,比较大,就将Ubuntu系统文件直接装在C盘里,在固态硬盘里启动系统和使用系统软件响应速度会比机械硬盘快一些,然后将Python的虚拟环境和Pycharm运行的项目(下面也有提到)搭建到机械硬盘上即可,这样可以有效节省C盘空间,下面讲一下如何使用virtualenv搭建Python虚拟环境:sudo apt-get install virtualenv安装virtualenv,virtualenv --version检查virtualenv 版本,最后使用virtualenv -p /usr/bin/python3.10 /d/my_envPy3.10将环境搭建到物理机的D盘上,因为我的C盘和D盘在同一张固态,当Pycharm加载环境时,加载速度影响不大,稍微慢一丢丢(跨系统) 方案二: 考虑到有很多伙伴的C盘空间有限,想将其装到其他盘。这就要依靠wsl的export和import功能了,可使用wsl --help查看wsl的指令,export主要是打包系统分发文件,而import是导入系统分发文件 使用wsl --export Ubuntu-22.04 D:\Ubuntu-22.04.tar将系统分发导出到D盘,然后使用wsl --unregister Ubuntu-22.04注销系统,即系统文件从C盘中彻底卸载并删除,最后使用wsl --import Ubuntu-22.04 D:\meiwu_WSL D:\Ubuntu-22.04.tar将系统导入到D盘。就实现了系统转移 apt换源(根据个人需求),其实目前Ubuntu在国内也有相应的镜像站,换源与否,其速度也慢不了多少,我个人就没有进行换源,担心使用其他源下载的依赖包跟系统不兼容,导致出现系列BUG。源内容可参考:Ubuntu 22.04换国内源 清华源 阿里源 中科大源 163源,更多源可自行查询,以下是相应的换源指令 # 备份初始源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.old # 编辑sources.list文件 sudo vim /etc/apt/sources.list # 更新 sudo apt-get update sudo apt-get upgrade 3. WSL开启systemd WSL默认不支持systemd,我个人也尝试了网上很多方法,不是无效,就是强制开启对系统造成影响 本人尝试的最佳解决方案:若要Linux系统使用systemd作为其init系统,使用systemctl命令管理Linux服务,则需要确定WSL版本是0.67.6或更高版本,使用wsl --version进行查看,若无法正常查看版本,则WSL版本过低导致的,请使用wsl --update进行更新至最新版即可,如下是我的WSL版本 使用wsl -d Ubuntu-22.04进入系统,依次运行下面指令 # 新建wsl.conf文件 sudo nano /etc/wsl.conf # 将以下内容添加到wsl.conf并保存文件 [automount] root = / options = "metadata" [boot] systemd = true # 关闭wsl wsl --shutdown # 重新启动Ubuntu,运行sudo systemctl status命令或systemctl ,即可看到Systemd服务 使用sudo systemctl status验证systemctl命令是否可用,下图为成功运行的案例截图 4. 配置noVNC通过web访问Ubuntu-22.04 安装vncserver sudo apt-get install tightvncserver 查看安装安装的vncserver which vncserver /usr/bin/vncserver 启动vncserver,并设置窗口大小,其中vncserver :1设置为1,要运行noVNC的端口为5900+1,即5901 sudo vncserver :1 -geometry 1902x902 -name meiwu -depth 24 查看端口,若无netstat,根据提示安装即可 sudo netstat -npl | grep 59 杀死端口(若不需要此窗口,则可进行杀死) sudo vncserver -kill :1 克隆github上的noVNC项目 sudo git clone https://github.com/novnc/noVNC cd ./noVNC/utils/进入到noVNC的utils文件夹下,执行以下指令 # 创建安全连接,一路回车即可 sudo openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem # 运行noVNC,若不进行listen设置,默认web监听端口为6080,websockify代理将自动装载证书,设置密码 ./novnc_proxy --vnc localhost:5901 --listen 5555 在web输入http://localhost:5555/vnc.html即可访问Ubuntu-22.04,其中localhost可以替换成服务端ip,使用ifconfig进行查看,只需关注inet 输入密码,连接之后,可以看到灰屏桌面,说明配置成功,接下来就要为Ubuntu-22.04进行配置桌面 5. Ubuntu-22.04配置图形化界面并进行汉化 图形化界面,我选择的是Xfce4,因为其安装简便,并且轻量化 安装Xfce4和相应扩展包 sudo apt-get update sudo apt-get install xfce4 xfce4-goodies 桌面汉化 # 选择语言和编码 dpkg-reconfigure locales # 防止出现乱码,选择以下选项 en_US ISO-8859-1 zh_CN GB2312 zh_CN.GBK GBK zh_CN.UTF-8 UTF-8 zh_TW BIG5 zh_TW.UTF-8 UTF-8 # 接下来选择默认语言字体,选择: zh_CN.UTF-8 # 查看当前系统字体 vim /etc/default/locale # 安装语言字体包 sudo apt-get install fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp fonts-arphic-gkai00mp # 重新进入Ubuntu-22.04 wsl -t Ubuntu-22.04 # 退出 wsl -d Ubuntu-22.04 # 启动 之后即可看到汉化版的Xfce4桌面了 6. 安装Fcitx实现中英文输入 安装 sudo apt-get install fcitx fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-libpinyin 设置-增加输入法 设置-中英文切换快捷键 7. 配置Firefox 查看是否有Firefox残余依赖和相关包 # 查看 dpkg --get-selections | grep firefox # 若有,则卸载 sudo apt-get purge <相关包> 将Mozilla 团队 PPA 添加到软件源列表 sudo add-apt-repository ppa:mozillateam/ppa 更改 Firefox 包的优先级以确保首选 PPA/deb/apt 版本的 Firefox,复制并粘贴整个代码 echo ' Package: * Pin: release o=LP-PPA-mozillateam Pin-Priority: 1001 ' | sudo tee /etc/apt/preferences.d/mozilla-firefox 希望自动安装未来的 Firefox版本 echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox 运行以下命令通过 apt-get 安装 Firefox sudo apt-get install firefox 安装完之后,可以在Xfce4桌面点击放大镜icon进行查看,直接将其拉到桌面即可创建Firefox启动器,在Firefox的setting中设置中文简体即可 8. 配置Pycharm解释器 进入Pycharm官网下载linux的社区版本 在相应的路径下,执行解压命令 sudo tar -zxvf ./pycharm-community-2022.3.tar.gz -C ./ 在xfce4桌面右击,创建pycharm启动器,命令部分放入pycharm的bin下是pycharm.sh即可 9. 实现win系统与Ubuntu-22.04共享剪贴板 目前并未排查清楚WSL中的Ubuntu系统不能通过noVNC中的剪贴板与win进行共享剪贴内容,个人认为WSL中的Ubuntu系统与noVNC的兼容性不是很好,Ubuntu-20.04也出现类似的问题,但是物理系统为Ubuntu-22.04时,并未出现类似问题 解决方案:依靠autocutsel来间接实现,autocutsel的编码并不支持中文剪贴,所以剪贴中文时会出现乱码 若有伙伴知道更好的解决方案,可留言或私信告知我,谢谢💕💕 安装autocutsel sudo apt-get autocutsel 编辑~/.vnc/xstartup,实现打开vncserver服务即可在后台运行autocutsel # 编辑 sudo vi ~/.vnc/xstartup # 加入以下内容 autocutsel -f 我的~/.vnc/xstartup文件内容 #!/bin/sh xrdb "$HOME/.Xresources" xsetroot -solid grey autocutsel -f #x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & #x-window-manager & # Fix to make GNOME work export XKL_XMODMAP_DISABLE=1 /etc/X11/Xsession 10. 使用物理显卡 查看物理机显卡驱动,可以看到我的显卡驱动最高可支持CUDA12.1.98版本,配置CUDA版本比驱动版本低即可,在这里我配置的是CUDA12.0 CUDA下载官网,按照官网提供的指令依次执行即可 配置CUDA环境变量–超级用户 # 编辑超级用户~/.bashrc sudo -s vi ~/.bashrc #将以下内容添加到末尾 export CUDA_HOME=/usr/local/cuda export PATH=$PATH:$CUDA_HOME/bin export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} #更新~/.bashrc source ~/.bashrc #更新依赖 sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev #检查是否安装成功,若返回相应版本信息,则安装成功 nvcc -V 配置CUDA环境变量–个人用户 # 退出超级用户 exit sudo vi ~/.bashrc #将以下内容添加到末尾,Esc退出编辑,:wq保存并退出vi export CUDA_HOME=/usr/local/cuda export PATH=$PATH:$CUDA_HOME/bin export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} #检查是否安装成功,若返回相应版本信息,则安装成功 nvcc -V 为执行nvidia-smi添加软连接,若不添加,则无法识别nvidia-smi指令 ln -s /usr/lib/wsl/lib/nvidia-smi /usr/local/bin 配置cudnn,进入cudnn官网下载对应CUDA版本的cudnn,我下载的是cuDNN v8.8.0。第一次下载需要注册cudnn账号,我是先下载至物理机,然后再解压至WSL的Ubuntu当中。 从物理机解压cuDnn至Ubuntu,从Ubuntu中可以看到c,d,e,f其实对应的就是物理机上的c、d、e、f盘 将E盘中的cudnn解压至Ubuntu的当前位置,并将相应的cudnn文件复制至cuda相应的文件夹下 sudo tar -xvf ../../mnt/e/cudnn-linux-x86_64-8.8.0.121_cuda12-archive.tar.xz -C ./ sudo cp -P cudnn-linux-x86_64-8.8.0.121_cuda12-archive/lib/* /usr/local/cuda-12.0/lib64/ sudo cp cudnn-linux-x86_64-8.8.0.121_cuda12-archive/include/cudnn.h /usr/local/cuda-12.0/include/ sudo chmod a+r /usr/local/cuda-12.0/include/cudnn.h sudo chmod a+r /usr/local/cuda-12.0/lib64/* 安装pytorch的gpu版本,进入Pytorch官网选择pytorch版本,然后执行官网给的指令即可 测试pytorch的gpu是否有效 import torch print(torch.__version__) # 查看torch当前版本号 print(torch.cuda.is_available()) # 查看当前cuda是否适用于当前版本的pytorch,返回bool值,若为True,则可用 验证模型训练是否可行,若报错Could not load library libcudnn_cnn_infer.so.8,请执行sudo apt-get install nvidia-driver-515,然后重启即可。下图为测试结果,模型可正常训练并使用物理GPU 11. 使用Xfce4的tricks 创建启动器,这样就不需要每次都在终端中启动Pycharm,在上面也提到创建的方法和步骤 Xfce4的默认使用Debian终端模拟器,并不好用,我们可以通过设置默认使用Xfce-terminal,其实我们在上面安装的xfce4的扩展包里面就集成了Xfce-terminal,我们之间设置就好,设置Firfox浏览器作为默认浏览器的方法也是一样 12. Windows终端美化 若嫌弃win10的cmd不好用,可以去微软商店下载Windows-Terminal 然后win+R,键入wt即可打开,在设置里面有个打开JSON文件即可设置主题和样式 ————————————————