Jade Dungeon

WSL

开启虚拟机功能

在「控制面板」 -> 「程序和功能」 -> 「Windows功能窗口中勾选适用于Linux的Windows子系统」 功能,点击确定,并按照提示重启电脑。

另一个是命令行方式 :

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

WSL2

WSL2类似虚拟机底层与linux更加接近,可以支持Docker,但是在与WINDOWS磁盘IO交互时性能很差。 按自己需求取舍。

开启虚拟机功能

在「控制面板」 -> 「程序和功能」 -> 「Windows功能窗口中勾选适用于Linux的Windows子系统」 功能,点击确定,并按照提示重启电脑。

升级

由于版本问题,好多人的的子系统还停留在 WSL,而不是 WSL2。对于升级,输入如下命令

wsl --set-version Ubuntu-20.04 2

然后,通过如下命令查看

wsl -l -v

设置 WSL2 为默认版本

.html wsl --set-default-version 2 }}}

WSL与Windows相互访问

/mnt/c/

C:\Users\XXXX\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

用资源管理器打开,\\wsl$,然后右键选中一个发行版,比如Ubuntu,“固定到快速访问”,这样就够用了

设置默认shell为zsh:

# Launch Zsh
if [ -t 1 ]; then
  exec zsh
fi

CLI

WSL-terminal

https://goreliu.github.io/wsl-terminal/README.zh_CN.html

/etc/wsl-terminal.conf中指定要用的shell。如果不生效, 那么在快捷方式中加上启动参数,指定使用的SHELL与初始目录: -e SHELL="/bin/zsh" -e LANG -t -C "~" /bin/zsh -l

从在当前位置通过右键menu启动 WSL: 运行wsl-terminal目录下./tools/1-add-open-wsl-terminal-here-menu.js就ok了, 右键menu就有了从WSL中打开当前目录

右键用指定的Linux软件打开文件: ./tools/5-add-open-with-vim-menu.js可以通过右键在linux vim中打开文件。 可以把vim改成其他wsl下的程序,这里以emacs为例子:

var WshShell = new ActiveXObject("WScript.Shell");

WshShell.CurrentDirectory = "..";
WshShell.RegWrite("HKCU\\Software\\Classes\\*\\shell\\vim-in-wsl-terminal\\", 
		"Open with emacs in wsl-terminal", "REG_SZ");
WshShell.RegWrite("HKCU\\Software\\Classes\\*\\shell\\vim-in-wsl-terminal\\icon", 
		"\"" + WshShell.CurrentDirectory + "\\emacsclient.exe\"" );
WshShell.RegWrite("HKCU\\Software\\Classes\\*\\shell\\vim-in-wsl-terminal\\command\\", 
		"\"" + WshShell.CurrentDirectory + "\\emacsclient.exe\" -n \"%1\"", "REG_SZ");

GUI

WSL安装xfce desktop

sudo apt-get install xfce4 xfce4-terminal

配置环境变量: WSL中设置环境变量:

export DISPLAY=:0

可以把配置加到/etc/profile中:

export DISPLAY=:0
export LIBGL_ALWAYS_INDIRECT=1

Xming作为GUI远程工具

连接工具使用Xming,启动XLanch以后设置Display Number与WSL中环境变量一致, WSL中的GUI程序会弹出窗口。

# display for WSL remote desktop
export DISPLAY=:0
export NO_AT_BRIDGE=1

VcXsrv作为远程工具

可以把配置加到/etc/profile中:

export DISPLAY=:0.0
export LIBGL_ALWAYS_INDIRECT=1

Windows安装VcXsrv然后打开XLaunch

WSL中启动的图形界面程序

startxfce4

XLaunch窗口就会跳出来窗口

MobaXterm作为GUI远程工具

MobaXterm内置了Xserver,使用其免费版本的portable(之前使用过 VcXsrv 体验不好, 全屏下任务切换有明显卡顿,而且窗口resize里面内容不跟着resize,非常不爽)

https://mobaxterm.mobatek.net/download-home-edition.html

WSL中安装桌面环境并添加环境变量:

sudo apt-get install --assume-yes xfce4
sudo apt-get install --assume-yes xorg-dev

将下面代码添加到/etc/profile文件里:

# 与 Xserver 连接
export DISPLAY=:0
export NO_AT_BRIDGE=1

每次在打开WSL的app前确保 MobaXterm 正在运行,并保证右上角Xserver图标为开启状态 。 MobaXterm默认设置是不允许windows粘贴板上的内容直接复制到 app 上的, 所以需要调整默认设置进入settings > 选中 X11 选项卡 > 将clipboard 框里选择为 disable "copy on select"就可以了

常见错误

mysql

大坑。 出现问题: 今天安装mysql,

sudo apt-get install mysql-server

一直报错:

E: Could not read response to hello message from hook [ ! -f /usr/bin/snap ] || /usr/bin/snap advise-snap --from-apt 2>/dev/null || true: Success

解决方法:

sudo rm -rf /etc/apt/apt.conf.d/20snapd.conf

anaconda

安装anaconda时报错:

Exception: dst exists:
'/mnt/f/Ubuntu/anaconda3/share/terminfo/e/eterm'

因为/mnt下不区分大小写,所以必须能实现大小写区别。一般有两个方法:

  1. 默认安装到$HOME目录下。
  2. 把安装anaconda的目录区分大小写。
sudo apt-get install attr setfattr -n system.wsl_case_sensitive -v 1 /mnt/f/Ubuntu/anaconda3

缺少QT5

WSL1会遇到问题:

error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory

可以升级wsl2,也可以在wsl1中:

sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5