[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/)