贡献者: addis
重要提示:截至到 2023 年 8 月,WSL 在中国大陆的安装过程中可能会遇到某种网络问题。
重要提示:WSL1 用于 NTFS 文件系统最合适,包括移动硬盘。exFAT 兼容性较差(不兼容软链,git 也会有权限 bug)。NTFS 用 WSL1 也不完美,有时候 chmod -R 不能真正的深入到每个子目录,还可能要 cd 进去再次用 chmod -R,或者直接 find . -type f -exec sudo chmod 777 {} \;(巨慢)。且这么做只能临时有效,打开另一个命令行就没用了。GDB 也不能用(设置断点失败)。
所以,有条件用双系统或者 Virtualbox 还是建议尽量用它们。
wsl --help 获取帮助(以下说明可能会和最新版本稍微不一致,所以建议直接看帮助)
wsl --shutdown 关闭所有 distro 和虚拟机
wsl --status 显示 wsl 状态
wsl --update 更新
wsl --set-default-version 1或2 切换新安装 wsl 的默认的版本
wsl --set-version Ubuntu-22.04 1或2 把某个已安装的 distro 在 WSL1 和 2 之间转换,如果 Turn Windows Features On or OFF 中没有开 Virtual Machine Platform,会提示错误且不做转换,打开这个和 Hyper-V,重启即可。转换需要两三分钟。注意这并不会把整个 linux 的文件系统都变成 ext4 的虚拟硬盘(可以用 WinDirStat 验证)。其实还是另外新装 wsl2 版本的 ubuntu 比较好,因为 WSL1 没有 snap store 和正常的 systemd systemctl 等。可以用下面的方法把某个 WSL1 distro 重命名,再安装相同的 WSL2 distro(没试过)。
wsl --set-default [distro] 选择默认的 distro
wsl --list 列出所有 distro wsl --list --verbose(-l -v)显示详细信息
wsl --list --online 列出所有可下载的 distro
wsl --install -d 安装某个 distro
C:/Users/用户名/AppData/Local/Packages/CanonicalGroup...distro版本号/
wsl --unregister ... 删除某个 distro 以及它的所有文件
wsl --export distro名 导出文件名 可以导出 wsl。例如 wsl --export Ubuntu ubuntu.tar 导出文件会存到当前路径。
wsl --import 新distro名 安装路径 导出文件名 --version 1或2 例如 wsl --import Ubuntu-20.04-WSL1-20220904 C:\Users\用户名\ C:\Users\用户名\Desktop\Ubuntu-20.04-WSL1-20220904.tar --version 1或2 注意 import 以后默认会以 root 身份登录,可以设置 .bashrc 自动 su 成某个用户。
No3/WSL-images/Ubuntu-20.04-WSL2-20220905.tar 是从 Miranda 的 Win11 备份的镜像,亲测在 Surface 上可以直接 import,X11 可用(但是 CLion 好卡)
xeyes 可不可以(apt install x11-apps)。可以的话 cp ~/.Xautority /home/用户名/ 然后 su 用户名 再试试 xeyes 可不可以。可以的话就把这两个命令添加到 /root/.bashrc 中。
xeyes 测试,而 WSL1 不行。
sudo service ssh --full-restart 才会运行。
ifconfig 查看) 和 windows 的 IP 地址 (在 cmd 中用 ipconfig) 是一样的,而不是像虚拟机一样使用 NAT
openssh-server 即可
openssh-server
sshd: no hostkeys available -- exiting.,那就用 sudo ssh-keygen -A
sudo mount -o uid=用户名 -t drvfs g: /mnt/g
export DISPLAY=:0,重启终端即可
使用以下方法,可以在第一次手动打开 WSL 或者在 windows 登录后自动运行一些 WSL 程序。
/etc/wsl.conf,内容如下即可。
[boot]
command="命令1; 命令2"
其中的命令会直接使用 sudo 权限运行。这些命令会在 WSL 启动时执行(注意不是每次打开 WSL 命令行,而是第一次打开时执行)。输出不会显示在命令行中。也会在 cmd 中输入 wsl --shutdown 然后再打开 WSL 命令行时运行。
wsl.exe(任务管理器里面可以找到进程的可执行文件的位置)创建一个快捷方式到启动文件夹 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp。
command 中不可以使用 & 后台执行,相当于有一个看不见的命令行窗口在执行这些。
mount -o uid=addis -t drvfs g: /mnt/g;
service 命令。例如用于开启 sshd:service ssh --full-restart;
cmd 中 wsl -l -v 必须要显示 running,WSL 才有可能执行任何东西包括 service。
frp
command="date >> /home/addis/WSL-start-log.txt; service ssh --full-restart; mount -o uid=xxx -t drvfs e: /mnt/e; /home/用户名/frp/frpc -c /home/addis/frp/frpc.ini > /home/用户名/frp/frpc.log;"。其中 frpc 见这里。
.git 文件夹复制一份都没问题)。经测试,重新格式化为 NTFS 文件系统即可。
sudo chmod -R 755 . 就没问题了。