WSL使用注意事项/踩坑

WSL移动VHDX位置

wsl --shutdown

# 替换为你想要的打包路径
wsl --export Ubuntu-22.04 D:\Ubuntu_WSL\Ubuntu.tar

# 注销原有的Ubuntu
wsl --unregister Ubuntu-22.04

# 导入为新的Ubuntu,注意替换想要存放的vhdx的新的路径
wsl --import Ubuntu-22.04 D:\Ubuntu_WSL D:\Ubuntu_WSL\Ubuntu.tar

这样移动过后,点开wsl会发现默认用户切换为了root。可以在wsl中设置后重启:

vim /etc/wsl.conf

# 添加以下内容,注意替换用户名
# [user]
# default=user_name 
# 然后windows中wsl --shutdown后重启wsl

另外注意,虽然移动了光盘映像的位置,但是产生的Temp文件还是在系统盘C:\Users\<你的用户名>\AppData\Local\Temp(可能和一些环境变量设置有关)。

WSL修改内存大小

需要编辑C:\Users\<你的用户名>\.wslconfig(如果不存在则自己创建)。根据自己电脑实际设置,一些高级设置请参考官网

[wsl2]
memory=32GB
processors=16
swap=8GB
localhostForwarding=true

玄学:FSL有时候闪退,将使用的processors调小后变得稳定,不知道是什么原因。

WSL VHDX文件过大

WSL光盘映像文件只会扩容,不会缩小(删除里面的文件不会减少占用的空间大小)。

参考https://blog.csdn.net/C_lonq/article/details/133930176

wsl --shutdown
Diskpart
select vdisk file="path/to/your/wsl.vhdx"
compact vdisk

启动WSL提示分发错误

Unable to launch wsl2里面有详细的解决方法(简单来说需要创建一个新的wsl系统,然后修复原来的VHDX文件)

这里也简单记录一下过程:

  1. 备份之前的vhdx文件 原始文件在默认%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx。如果之前移动了位置,请找打对应的路径。将其复制一份到其他位置,以免恢复过程中失败... 假设复制到了/mnt/path/to/your/ext4.vhdx

  2. 创建一个新的wsl系统 这里对版本没有要求,注意不要和之前的重名了就行了。

    wsl --install -d Ubuntu-22.04
    
  3. 打开新创建的wsl系统,等待初始化完成。 安装需要的工具

    sudo apt update
    sudo apt install qemu-utils
    
  4. 修复原来的vhdx文件

    sudo modprobe nbd
    sudo qemu-nbd -c /dev/nbd0 -f vhdx /mnt/path/to/your/ext4.vhdx
    # 这一步中间会询问修复操作,输入a代表所有yes
    # 结束之后
    sudo qemu-nbd -d /dev/nbd0
    
  5. 替换文件

    wsl --shutdown
    

    将/mnt/path/to/your/ext4.vhdx复制到原来的位置,覆盖掉原来的文件。之后应该可以正常打开。

WSL2适配CUDA

WMH-SynthSeg的使用中已经记录了这一问题。这里记录几个要点。

不要在WSL2中单独安装NVIDIA驱动!

只需要在Windows系统中安装nvidia驱动,而不用在wsl中安装。如果nvidia-smi命令有问题,那很可能就是在wsl2中安装了nvidia驱动覆盖了默认配置好的路径,需要删掉:

sudo apt-get purge -y '*nvidia-driver*' '*nvidia-kernel*' '*libnvidia*'
sudo apt autoremove -y
sudo apt clean

安装CUDA

下载前请注意所使用软件的CUDA与cudnn的适配,以及pytorch或tensorflow的版本要求!!!

打开CUDA Toolkit的下载网站,一般下载最新的可能与其他软件不兼容,请下滑到Resources栏选择Archive of Previous CUDA Releases。按照系统选择(如下图),这里似乎选择Ubuntu和WSL-Ubuntu没有什么区别。

cuda toolkit

选择之后下面会出现命令,按照这个命令就可以安装了。

cuda toolkit

然后在.bashrc中更新环境变量

# 注意替换自己的cuda版本,看下在/usr/local中的文件夹名称是什么
export CUDA_HOME=/usr/local/cuda-12.3
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

安装后,运行nvcc -V应该能正常输出。

安装cudnn

进入cudnn的网站,选择适合的cudnn版本(下载需要登录nvidia,好像可以找其它不需要登录的方法)。我选择的是Local Installer for Linux x86_64 (Tar),下面的Local Installer for Ubuntu22.04 x86_64 (Deb)应该也可以。假设下载到了当前目录:

# 请替换cudnn-linux-x86_64-8.9.6.50_cuda12-archive.tar.xz为实际路径
tar -xvf cudnn-linux-x86_64-8.9.6.50_cuda12-archive.tar.xz

# 请确定解压后的目录是否为cuda,以及/usr/local下的cuda文件夹名称
sudo cp -P cuda/include/cudnn*.h /usr/local/cuda-12.3/include
sudo cp -P cuda/lib/libcudnn* /usr/local/cuda-12.3/lib64
sudo chmod a+r /usr/local/cuda-12.3/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-12.3/lib64/libcudnn*

之后应该可以正常使用了。

WSL安装matlab

参考Linux下安装matlab的步骤(一般是把iso文件挂载到WSL,然后运行安装文件)

如果出现glib/pango库的问题(注意替换为matlab安装包的路径):

./install terminate called after throwing an instance of 'std::runtime_error' what(): Unable to launch the MATLABWindow application

可以通过运行./MATLABWindow来查看具体错误

cd ~/matlab_installer/bin/glnxa64

./MATLABWindow -url=mathworks.com ./MATLABWindow: symbol lookup error: /usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0: undefined symbol: g_task_set_name

Mathwork官网提供了解决方案:https://www.mathworks.com/matlabcentral/answers/364551-why-is-matlab-unable-to-run-the-matlabwindow-application-on-linux

如果无法解决库冲突的问题,可以尝试silent安装:

安装包文件夹下存在installer_input.txt模板文件,可以修改其中的注释掉的内容指定安装步骤,例如不安装额外包的话,可以指定:

##################################################################
## MATLAB Silent Installation Config (R2020a)
##################################################################

## 安装目录
destinationFolder=/usr/local/MATLAB/R2020a

## 使用的 File Installation Key
fileInstallationKey=09806-07443-53955-64350-21751-41297

## 接受许可证协议
agreeToLicense=yes

## 输出日志文件(可选)
outputFile=/tmp/matlab_install.log

WSL使用GUI

Windows下安装VcXsrv,按照默认配置安装后,桌面会出现XLaunch的快捷方式,双击打开选择One large window, Display number选择0,后面有一个界面选择disable access control。

GUI 1

GUI 2

之后在WSL设置环境变量:

export DISPLAY=localhost:0

可通过xclock测试是否能打开图形化界面