[TOC]
# WSL
WSL 是 Windows Subsystem for Linux 的简称, 可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生虚拟机开销。
由于 WSL2 是通过 Hyper-V 虚拟机实现的,理论上和标准 Linux 已经无差异,实际目前还有[一些缺陷待改进](https://link.zhihu.com/?target=http%3A//aka.ms/wsl2),但已经可以使用 docker 了。
据官方测试,I/O 性能有了显著提升,解压缩提升20倍,常规文件操作提升5-6倍。无需担心虚拟机性能开销,因为开启 Hyper-V 后,win32 也是运行在虚拟机里的……
**在新版本中,WSL 与文件资源管理器进行了集成,已安装 WSL 的用户在打开文件资源管理器后将会看到那只熟悉的 Linux 小企鹅。**
# wsl 命令 (manjaro 为例)
```
wsl --unregister # 注销指定的子系统
wsl --set-version <Distro> 2 # 将已有的发行版无缝升级到 WSL2
wsl --set-default-version 2 # 将 WSL 2 设置为默认版本
wsl -l --all -v # 查看已安装的 linux发行版本
wslconfig /l, # 可以看到所有已安装的发行版
wslconfig /setdefault manjaro # 设置默认发行版
wslconfig /u <DistributionName> # 卸载删除wsl
wsl -d manjaro # 运行子系统,直接进入 Linux shell 命令行
```
# [LxRunOffline](https://github.com/DDoSolitary/LxRunOffline) 工具
一款非常实用的 WSL 管理软件:[LxRunOffline](https://p3terx.com/go/aHR0cHM6Ly9naXRodWIuY29tL0REb1NvbGl0YXJ5L0x4UnVuT2ZmbGluZQ),它可以安装任意发行版到任意目录、转移已安装的 WSL 目录、备份 WSL、设置默认用户和修改环境变量等操作,完全碾压`wsl`、`wslconfig`这些简陋原生管理命令。
## 安装
~~~
scoop install lxrunoffline
~~~
命令:
```
LxRunOffline.exe move -n Ubuntu-18.04 -d E:\\WSL\\Ubuntu-18.04 # 通过 LxRunOffline 转移安装位置
```
# Manjaro WSL2
> https://github.com/sileshn/ManjarWSL
这里以 `manjaro` 为实例名
```
# Set "Windows Terminal" as default terminal
$manjaro.exe config --default-term wt
```
## 进入系统
命令行运行 `manjaro.exe`,进入系统:
```
# 生成并排序中国镜像站列表, 推荐选择 TUNA(清华) / USTC(科大)
$pacman-mirrors -i -c China -m rank
# 强制更新软件源索引列表,并更新系统软件包
$pacman-key --init # 初始化key
$pacman -Syy manjaro-keyring # 尝试安装manjaro-keyring软件包,是否导入key选择y,会安装失败, $是否选择删除已下载文件时选n
$pacman -Syyu # 强制更新软件源索引列表,并更新系统软件包
# 安装 yay
$sudo pacman -S yay
# 安装 C++ 基础编译环境
$pacman -S base-devel --needed
```
## 创建用户
~~~bash
passwd # 初始化root密码
useradd -m -s /bin/bash 用户名 # 创建用户
passwd 用户名 # 初始化用户密码
~~~
编辑`/etc/sudoers`文件,在`root`一行(大约79行)之下添加下列代码,设置 sudo 权限:
```
用户名 ALL=(ALL) ALL
# 用户名 ALL=(ALL) NOPASSWD: ALL # 设置 sudo 权限,并且无需输入密码
```
执行下面指令切换至用户账户:
```
su 用户名
```
## 个人账户配置
**👺后续操作都是在用户账户里操作了❗**
```
# 安装 oh-my-zsh
$yay -S zsh
$sh -c "$(curl -fsSL https://raw.fastgit.org/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```
1. 安装字体
为了防止终端可能会出现乱码,也是因为你的电脑不支持那么多字体,所以我们需要先安装扩展字体。
Powerlevel10k 作者推荐使用 [Meslo Nerd Font](https://link.zhihu.com/?target=https%3A//github.com/romkatv/powerlevel10k%23meslo-nerd-font-patched-for-powerlevel10k) 字体,Download these four ttf files:
* [MesloLGS NF Regular.ttf](https://link.zhihu.com/?target=https%3A//github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%2520NF%2520Regular.ttf)
* [MesloLGS NF Bold.ttf](https://link.zhihu.com/?target=https%3A//github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%2520NF%2520Bold.ttf)
* [MesloLGS NF Italic.ttf](https://link.zhihu.com/?target=https%3A//github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%2520NF%2520Italic.ttf)
* [MesloLGS NF Bold Italic.ttf](https://link.zhihu.com/?target=https%3A//github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%2520NF%2520Bold%2520Italic.ttf)
Double-click on each file and click "Install". This will make`MesloLGS NF`font available to all applications on your system.
WSL配置字体其实就是配置终端的字体,点击设置会自动跳转到一个json格式的文档。
将文档中对应部分换成下面这个,对应的美化配置都有注释,可自行调整:
~~~json
"defaults":
{
// Put settings here that you want to apply to all profiles.
"acrylicOpacity": 0.8, //背景透明度
// "useAcrylic": true, // 启用毛玻璃
//"backgroundImage": "C:\\Users\\Liu\\Pictures\\ubuntu.jpg", //背景图片
// "backgroundImageOpacity": 0.5, //图片透明度
"backgroundImageStretchMode": "fill", //填充模式
"icon": "C:\\Users\\Liu\\Pictures\\最近\\1121490.png", //图标
"fontFace": "MesloLGS NF", //字体
"fontSize": 14, //文字大小
//"colorScheme": "Solarized Light", //主题
"cursorColor": "#FFFFFF", //光标颜色
"cursorShape": "bar" //光标形状
},
~~~
## 别名 alias
➜ `vim ~/.bashrc` 增加如下
```
alias cdc='cd /mnt/c/'
alias cdd='cd /mnt/d/'
alias cde='cd /mnt/e/'
alias tf='tail -500f'
alias hg='history|grep'
alias cls='clear'
alias ssh-a='ssh user@host'
alias untar='sudo tar -xzvf'
```
## 语言
修改`/etc/locale.gen`文件,取消下面两行的注释:
~~~bash
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
~~~
然后执行下面的代码初始化语言环境:
~~~bash
sudo locale-gen
~~~
修改文件`~/.bashrc`,加入以下几行,初始化环境变量:
~~~bash
export LC_CTYPE=zh_CN.UTF-8
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
export DISPLAY=localhost:0
export PULSE_SERVER=tcp:127.0.0.1
~~~
然后为了保险,执行下面指令以恢复`~.bashrc`的运行权限:
```
sudo chmod 644 ~/.bashrc
```
## WSL 默认登陆用户
在 Windows 系统命令行中,用下面的指令设置 WSL 默认登陆用户:
```
manjaro config --default-user 用户名
```
## 启用桌面图形环境
Windows 系统中,在 SourceForge 上下载[VcXsrv 最新版](https://link.zhihu.com/?target=https%3A//sourceforge.net/projects/vcxsrv/),安装后,执行`xlaunch`快捷方式。
----
由于 DrvFs 文件系统的权限问题,导致 Windows 原有 NTFS 文件系统中的文件在 WSL 下权限全部变成`0777`,即在执行`ls`或`cd`命令后,显示结果的背景色会出现问题。解决方法之一为在`.zshrc`文件末添加
~~~
# Change ls colours
LS_COLORS="ow=01;36;40" && export LS_COLORS
# make cd use the ls colours
zstyle ':completion:*' list-colors "${(@s.:.)LS_COLORS}"
autoload -Uz compinit
compinit
~~~
并加载设置
~~~
source ~/.zshrc
~~~
1. VS Code 设置
在 Windows 侧打开 VS Code。如果前述操作无误,VS Code 会自动提醒安装`Remote - WSL`插件。安装完成后选择 Manjaro 并连接,VS Code 及`Remote - WSL`插件将自动安装在远程机上。
Windows 盘符挂载于 WSL 侧`/mnt`文件夹,WSL 挂载于 Windows 侧`<folderpath to setup>/rootfs`文件夹。
至此,绝大多数通用 WSL 配置已完成,你应该可以直接上手开发了。最后祝你:开发愉快,再见。
## 桌面
每次在打开WSL的app前确保 MobaXterm 正在运行,并保证右上角 Xserver 为开启状态。
MobaXterm默认设置是不允许windows粘贴板上的内容直接复制到 app 上的,所以需要调整默认设置:进入settings -> 选中 X11 选项卡 -> 将clipboard 框里选择为 disable 就可以了。
进入桌面只需在MobaXterm输入`startxfce4`,然后就会加载desktop和pannel等控件(建议使用单窗口模式)。
1. 正常使用VSCode-Insiders连接到WSL进行编程
2. 需要使用到QT编程,则需要打开MobaXterm(建议使用多窗口模式)
# 后续教程
[My WSL2 and Windows Terminal setup · Garry Trinder](https://garrytrinder.github.io/2020/12/my-wsl2-windows-terminal-setup)
# 参考
[利用WSL打造Arch开发环境](https://zhuanlan.zhihu.com/p/51270874)
[installing WSL on Windows 10](https://docs.microsoft.com/en-us/windows/wsl/install-win10).
[pxlrbt/move-wsl: Easily move your WSL distros VHDX file to a new location](https://github.com/pxlrbt/move-wsl)
[https://docs.microsoft.com/en-us/windows/wsl/](https://docs.microsoft.com/en-us/windows/wsl/)