最近电脑老是无响应,C盘也快满了,就寻思着把系统重装下
听说现在Win11更到了23H2了,抱着尝尝鲜的想法,我决定把系统升个级
顺便用WSL2装了个Ubuntu,挺舒服的。

WSL 是什么

WSL,全称 适用于 Linux 的 Windows 子系统

适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,可用于在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。

摘自 什么是适用于 Linux 的 Windows 子系统 | Microsoft Learn

简而言之,WSL可以让你在Windows上安装Linux子系统而无需其他的软件如 VMWare

碎碎念:VMWare的vmware-hosted老是占掉我的443端口导致Steam++加速失败,还得我手动去关qwq

WSL2 又是什么

安装 Linux 发行版时,WSL 2 是默认发行版类型。 WSL 2 使用虚拟化技术在轻量级实用工具虚拟机 (VM) 中运行 Linux 内核。 Linux 发行版作为独立的容器在 WSL 2 托管 VM 内运行。 通过 WSL 2 运行的 Linux 发行版将共享同一网络命名空间、设备树(而非 /dev/pts)、CPU/内核/内存/交换空间、/init 二进制文件,但有自己的 PID 命名空间、装载命名空间、用户命名空间、Cgroup 命名空间和 init 进程。

WSL 2 提高了文件系统性能,并且与 WSL 1 体系结构相比增加了完整的系统调用兼容性。 详细了解 WSL 1 和 WSL 2 的比较

单个 Linux 分发版可以在 WSL 1 或 WSL 2 体系结构中运行。 每个分发版可随时升级或降级,并且你可以并行运行 WSL 1 和 WSL 2 分发版。 请参阅设置 WSL 版本命令

摘自 什么是 WSL 2 | Microsoft Learn

安装 WSL2 及 Linux发行版

环境检查

Win+R 输入 winver 回车以查看你的 Windows版本。

若要更新到 WSL 2,需要运行 Windows 10。

  • 对于 x64 系统:版本 1903 或更高版本,内部版本为 18362.1049 或更高版本。
  • 对于 ARM64 系统:版本 2004 或更高版本,内部版本为 19041 或更高版本。

或 Windows 11。

启用 WSL 功能

Win+Q 打开搜索框,查找 启用或关闭Windows功能
打开后,勾选 虚拟机平台适用于 Linux 的 Windows 子系统

如图示
windows功能

设置默认安装 WSL2

为了安装 WSL2,需要先安装 WSL2 的内核更新包:适用于 x64 计算机的 WSL2 Linux 内核更新包
下载后双击安装。
安装后,打开 CMD ,使用该指令将 WSL2 设置为默认版本:

wsl --set-default-version 2

升级 WSL2 至最新版本

打开 CMD ,输入指令:

wsl --update

完成后可输入以下指令验证是否升级成功:

wsl --version

安装至非C盘

微软的文档的安装方法很简单,一行指令的事:

wsl --install

但是,这个安装方法会将Linux发行版默认安装至C盘
如果你的C盘很大,那你随意
如果你不想将其安装到C盘,那么请继续往下看

首先,去官网下载你想要的Linux发行版:下载发行版

下载发行版

将安装包下载下来后,创建一个 你想要的发行版的安装目录,然后将安装包移动至目录中。
再将其后缀改为 .zip,解压。解压后你会得到一个文件夹,如果文件夹中有 .exe 文件那双击安装就可以了
如果解压后文件夹内有多个 .appx 文件,那就根据自己的平台找到那个 <发行版名称及版本>_x64.appx 文件 或 <发行版名称及版本>_ARM64.appx,将其后缀改为 .zip 再次解压,这样就可以得到 .exe 文件了。
这时候,双击 .exe 文件,就能开始安装Linux子系统了。
安装时根据向导进行相应的设置即可。不过注意在设置用户名时只能设置小写字母、数字和下划线(不能使用大写字母)。
至此我们已经安装好了 WSL2,在 CMD 中使用命令可以检查我们安装的版本:

wsl -l -v

配置 Linux 发行版

那么咱们现在开始配置Linux发行版(以 Ubuntu 22.04 为例

打开 CMD,输入以下指令进入已安装的发行版:

wsl

换源并更新软件包

进入系统的第一步当然是换源

sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list

如果你想把安全更新的源也给换了,那就使用如下指令:

sudo sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

使用 HTTPS 可以有效避免国内运营商的缓存劫持

sudo sed -i 's/http:/https:/g' /etc/apt/sources.list

更新软件包:

sudo apt-get update && sudo apt-get upgrade -y

启用 systemd

命令行输入

echo -e "[boot]\nsystemd=true" | sudo tee /etc/wsl.conf

随后退出Linux环境,输入

wsl --shutdown

重启Linux。随后输入wsl进入Linux发行版即可。
通过在Linux发行版内执行

systemctl list-unit-files --type=service

确认systemd启用情况。

将语言设置为中文

生成简体中文环境支持文件

sudo locale-gen zh_CN.UTF-8

安装语言包

sudo apt-get install language-pack-zh-hans language-pack-zh-hant -y

安装字符集

cd /usr/share/locales && sudo ./install-language-pack zh_CN 

将语言配置写入 /etc/profile 文件

sudo sed -i '$a export LANG=zh_CN.UTF-8\nexport LANGUAGE=zh_CN:zh' /etc/profile

使配置生效

source /etc/profile

验证是否生效

locale

如果生效了,终端应该会有如下的输出:

LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

固定Linux发行版的ip地址

在Windows用户目录 %USERPROFILE% 下面创建一个配置文件 .wslconfig,写入以下内容:

[experimental]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

再在终端输入

wsl --shutdown

重启wsl,再进入就可以了
以后想从Windows访问Linux内的服务就可以通过在浏览器中输入 localhost:<端口号> 来访问

潦草地结束

我受不了这个Win11了,一堆bug,好多应用都是全篇乱码,到网上找了解决方法也没起用
不是说已经23H2了吗,不应该整的很好吗(挠头
哦听说是阿三做的啊,那没事了
微软你不会做可以不要做,不要把这个做成一坨的东西端上来
虽然win11UI挺好看的
直接msdn rufus启动,win10我tm莱纳

参考资料

  1. win11 安装 WSL2 在非 C 盘及配置(图形界面+代理)_wsl不安装在c盘 csdn-CSDN博客
  2. WSL2 网络的最终解决方案 - 知乎 (zhihu.com)
  3. Ubuntu Zh_CN_UTF8 设置 - 知乎 (zhihu.com)