0x01 写在前面

笔者认为似乎应该在前面写点什么,但是又不知道写点什么,于是就写了这段话。或许笔者正在思考怎么写这段话。

关于 WSL 有什么好,或者有什么比较方便的地方,这里不多赘述。

多图预警。


0x02 官方教程配置环境

2.1 加入体验计划

首先进入 设置更新和安全Windows预览体验计划 然后选择开始,加入此计划。然后选择 Dev ,然后一路默认。

如果点进来是一片空白,根据官方提示,需要修改一个地方:

在设置中搜索 诊断数据,打开 诊断和数据,修改为 可选诊断数据 即可出现上述的界面,而不是白的了。可参考。

Windows预览体验计划

Windows预览体验计划2

Windows预览体验计划3


2.1.2 更新系统版本

重启之后,进入设置中的 Windows 更新,在下图所示的 高级选项 中选择 更新 Windows 时接受其他 Microsoft 产品更新

然后返回更新页面,开始进行更新,这个过程可能会反复很多次,耗时也比较久。

高级选项

检测到更新

开始下载更新

等待重启更新


2.1.3 检查系统版本

更新完毕后,需要检查当前的系统版本是否满足要求了。 按住 win + R 输入命令:winver ,即可以查看下图的信息。

WSL要求系统版本 2004 以上,微软官方说 OS 内部版本为 19041 以上。

而想要安装 CUDA,则要求系统不仅仅是版本 2004, 并且 OS 内部版本必须为 20145 之后。

所以,读者根据自己的需求自行决定。

系统信息


2.1.4 打开 WSL 选项

2.1.4.1 命令行打开 WSL

以管理员权限运行 PowerShell 并输入下面的命令,若提示是否要重启,则选择暂时不重启。

1
2
3
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

两个命令都运行完毕后,手动重启。

2.1.4.2 检查启动是否成功

重启之后,在 控制面板程序启动或关闭Windows功能 检查是否开启了 适用于Linux的Windows子系统。(有可能是英文

检查WSL启动成功

确认开启无误后,在管理员 PowerShell 中运行下面命令

1
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

然后重启。


2.1.5 下载 msi 安装包

从官方下载对应的安装包文件,然后直接一瞬安装。唯一需要注意的就是自己系统的版本和CPU架构。

msi 安装包地址:download

然后双击运行

进行安装

一路默认就好


2.1.6 设置默认 WSL2

然后在管理员 PowerShell 中通过如下命令设置默认版本为 WSL2

1
wsl --set-default-version 2


2.2 lxrunoffline 工具安装

下面将使用工具 lxrunoffline 进行后续的安装,若读者只想从官方一样用微软商店进行安装的话,移步官方教程,后面就比较简单。

2.2.1 lxrunoffline 简介

lxrunoffline 工具是一个 GitHub 上开发的很好用的管理工具,使用这个工具具有众多好处:

可以安装任意发行版到任意目录、转移已安装的 WSL 目录、备份 WSL、设置默认用户和修改环境变量等操作,完全碾压 WSL、wslconfig 这些简陋原生管理命令。


2.2.2 lxrunoffline 的安装

虽然 lxrunoffline 从笔者看的博文来看拥有多重安装方式,但是个人觉得其他的方式需要额外配置很多环境或者工具。不如直接手动安装来得好和轻便。

其他方式有如 使用 Chocolatey 安装, 使用 Scoop 安装。这部分读者有兴趣可以参阅这个博文

2.2.2.1 下载 lxrunoffline

首先是下载 lxrunoffline地址

然后选择合适的版本,我也不知道区别,只是我认识 mingw 所以就选择了这个。下载解压之后里面有个 LxRunOffline.exe,然后将 LxRunOffline.exe 放到某一个你觉得合适的地方,然后为了方便,建议添加环境变量。

下载lxrunoffline

添加lxrunoffline到环境变量

然后就可以愉快在命令行中使用这个命令了 lxrunoffline

lxrunoffline 命令

至此 lxrunoffline 安装完毕。

2.2.2.2 lxrunoffline 命令介绍

细心的读者已经发现上图中已经显示了一种查看help的方式,直接缺省就会打印help信息,这里简要列举了部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
l , list - 列出所有已安装的发行版。
gd , get-default - 获取 bash.exe 使用的默认发行版。
sd , set-default - 设置 bash.exe 使用的默认发行版。
i , install - 安装新的发行版。
sd , set-default - 设置 bash.exe 使用的默认发行版。
ui , uninstall - 卸载发行版。
rg , register - 注册现有的安装目录。
ur , unregister - 取消注册发行版但不删除安装目录。
m , move - 将发行版移动到新目录。
d , duplicate - 在新目录中复制现有发行版。
e , export - 将发行版的文件系统导出到.tar.gz 文件,该文件可以通过 install 命令安装。
r , run - 在发行版中运行命令。
di , get-dir - 获取发行版的安装目录。
gv , get-version - 获取发行版的文件系统版本。
ge , get-env - 获取发行版的默认环境变量。
se , set-env - 设置发行版的默认环境变量。
ae , add-env - 添加到发行版的默认环境变量。
re , remove-env - 从发行版的默认环境变量中删除。
gu , get-uid - 获取发行版的默认用户的 UID。
su , set-uid - 设置发行版的默认用户的 UID。
gk , get-kernelcmd - 获取发行版的默认内核命令行。
sk , set-kernelcmd - 设置发行版的默认内核命令行。
gf , get-flags - 获取发行版的一些标志。有关详细信息,请参考这里。
sf , set-flags - 设置发行版的一些标志。有关详细信息,请参考这里。
s , shortcut - 创建启动发行版的快捷方式。
ec , export-config - 将发行版配置导出到 XML 文件。
ic , import-config - 从 XML 文件导入发行版的配置。
sm , summary - 获取发行版的一般信息。

更多使用功能和常用功能请参阅这里


2.3 发行版的安装

2.3.1 distros 下载

使用此工具可以按照任意版本的有效的 WSL 发行版本。这里我选择了 Ubuntu18.04 ,本来选择 kali 的,但是 kali 安装失败了。于是还是就使用 Ubuntu 了。

官方发行版文件列表在这里。点击选择一个合适的版本,这里笔者选择了 Ubuntu18.04ARM 架构的朋友自己选择对应的版本。

下载列表


2.3.2 解压安装

下载的压缩包解压之后里面有一个 install.tar.gz ,然后就可以安装了。

为了避免不必要的麻烦,以下都是管理员权限在运行命令

压缩包内容

先在你想存储此 WSL 的地方建立合适的文件夹。因为笔者有多个不同版本的 WSL ,为了方便在E盘下建立了一个目录 WSL,然后建立了一个文件夹 Ubuntu18CUDA 用于存储此 Ubuntu18.04 的发行版。

上述准备完毕后,然后在 PowerShell 中运行下面的命令,

1
2
3
# lxrunoffline i -n <WSL名称> -d <安装路径> -f <安装包路径>install.tar.gz

lxrunoffline i -n "Ubuntu18CUDA" -d "G:\WSL\Ubuntu18CUDA" -f "C:\Users\chegn\Downloads\Compressed\Ubuntu_1804.2019.522.0_x64\install.tar.gz"

如下图所示:

安装发行版


2.3.3 设置用户

为了方便我们需要设置用户,笔者个人比较喜欢随时都是 root,但是这个不怎安全。

2.3.3.1 设置 root 为默认用户

root 用户的 UID0,所以可以直接在 Pow­er­Shell 输入以下命令进行设置:

1
lxrunoffline su -n <WSL名称> -v 0

设置默认用户为 root

设置默认用户 root

2.3.3.2 设置普通用户为默认用户

使用 lxrunoffline 新安装的 WSL 默认是以 root 用户登录,如果你需要默认以普通用户进行登录,就需要进行下面的操作。

首先运行 WSL

1
lxrunoffline r -n <WSL名称>

输入以下命令创建用户:

1
useradd -m -s /bin/bash <用户名>

然后对该用户设置密码,输入命令后会提示输入两次密码。

1
passwd <用户名>

授予该用户 sudo 权限。

1
usermod -aG sudo <用户名>

为了保持和微软商店安装的效果一致,这里提及的方法是把用户添加到 sudo 用户组。其他关于 sudo 权限的设置方法以及免密设置可参考《Linux 中授予普通用户 sudo 权限的正确方法》这篇文章。

查看用户 UID ,一般是 1000

1
id -u <用户名>

Ctrl+D 退出 WSL ,在 Pow­er­Shell 中输入以下命令:

1
lxrunoffline su -n <WSL名称> -v 1000


2.4 进入验证

通过下面命令,可以启动一个指定的发行版

1
lxrunoffline r -n <WSL名称>

然后一瞬进入,由于笔者设置了就是管理员root,所以不用sudo。

测试

于是到这里 WSL 就安装完毕啦,你可以拿去玩好玩的了。


2.5 修改配色

如果自己 Windows Terminal 有配色的应该就不用修改配色了,没有的,想添加 Windows Terminal 配色的可以参考这个

若无 Windows Terminal 或者只是想在修改这个终端的配色(事实上通过 Windows Terminal 也可以实现,但是这里记录另一种方法。)

编辑文件 ~/.bashrc 来实现

1
vim ~/.bashrc

然后在最后面添加下面的代码

1
2
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32;1m\]\u\[\033[00;32;1m\]@\[\033[01;32;1m\]\h\[\033[00;31;1m\]:\[\033[00;34;1m\]\w \[\033[01;33;1m\]\$ \[\033[0;37;1m\]'
# 设置u为颜色为绿色,@为紫色,h为紫色,“:”为红色,w为蓝色,“$”为黄色,后面打出来的字为白色

然后使之生效 source ~/.bashrc

然后就是这个样子

修改配色后

如果 Windows Terminal 本身有配色,也可以叠加,大概是这个样子

叠加配色

下面还有更多的颜色对应方案,读者可以自行设置自己喜欢的。

颜色代码:

1
2
3
4
5
6
7
8
9
字背景颜色: 40–49 字体颜色: 30—39
40: 黑        30: 黑
41: 红        31: 红
42: 绿        32: 绿
43: 黄        33: 黄
44: 蓝        34: 蓝
45: 紫        35: 紫
46: 深绿        36: 深绿
47: 白色        37: 白色

ANSI控制码:

1
2
3
4
5
6
7
8
9
10
11
12
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m – \033[37m 设置前景色
\033[40m – \033[47m 设置背景色
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行

默认的特殊符号所代表的意义:

1
2
3
4
5
6
7
8
9
10
11
12
\d :代表日期,格式为weekday month date,例如:“Mon Aug 1”
\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
# :下达的第几个命令
$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$


2.6 桌面安装

根据参考的教程,还可以在 WSL 中安装远程桌面,通过 Windows 的远程桌面进行连接,Windows 不需要再安装其他东西。还是挺香的。

使用了xrdp+xface4,参考链接为:here

笔者暂时没有这个需求,就没有整。


0x03 遇到的坑

使用此方法搭建可能会遇到一个坑:lxrunoffline 可能没认识 WSL2 所以设置的 WSL2 默认版本可能就没有生效,按照的版本就是 WSL1 的,所以如果某些要求2的版本(如对 CUDA 的支持)则需要先将其升级为 WSL2 的才可以。

这里部分请参考另外一篇


0x04 总结

东西确实不错,比虚拟机启动快,随时可以切换,文件系统和Windows共享,可以随便迁移,也可以开启桌面通过远程桌面进行连接,可以保存快照,WSL2 还可以使用 CUDA 了。我想除了某些神奇病毒的研究需要使用虚拟机以进行隔离意外,我暂时想不到不用 WSL 的地方了。

总之,我局的很不错。


0x05 参考

lxrunoffline+wsl: https://p3terx.com/archives/manage-wsl-with-lxrunoffline.html

wsl2 官方教程: https://docs.microsoft.com/en-us/windows/wsl/install-win10

配色参考: https://blog.csdn.net/weixin_36778746/article/details/101150231

Windows Terminal 配色参考:https://zhuanlan.zhihu.com/p/163765431