WSL2

Table of Contents

1. 简介

WSL1,Windows Subsystem for Linux。允许开发人员在 Windows 下运行 GNU/Linux 环境。 包括大多数命令行工具,实用程序和引用程序。

比较牛逼的一个点在于,安装一个 Linux 发行版跟安装普通软件一样,但却能拥有近乎原生的 Linux 系统 (真正的 Linux 内核),而不需要安装虚拟机。

如无特殊说明以下 WSL 都表示 WSL2。

2. 安装指引

https://docs.microsoft.com/zh-cn/windows/wsl/install-win10

安装报错2

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel

Press any key to continue...

下载 Linux 内核包,安装即可解决。

vmmem 进程很占内存,3

  1. 关闭 wsl wsl --shutdown
  2. 修改配置文件 notepad "$env:USERPROFILE/.wslconfig" 设置

    [wsl2]
    guiApplications=false
    memory=4GB
    

在 Windows 下使用 WSL 做开发,系统内存至少 16G,否则再怎么缩减内存也不够用。

3. 命令

  • wsl -l -v 查看当前运行的发行版
  • wsl --shutdown 关闭所有,不可以在 WSL 中使用 sudo reboot 命令实现重启
    • wsl -t <distro-name> 关闭指定发行版
  • wsl 启动所有
    • wsl -d <distro-name> 启动指定发行版

4. 外部访问 WSL 中的服务

如果在宿主机中访问 WSL 中的某个端口服务,直接通过 localhost 即可。但如果是在宿主机外部(如手机浏览器),则需要一层转发:

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=4000 connectaddress=171.21.112.1 connectport=8080

说明:

  • connectaddress connectport WSL 的 IP 地址和服务暴露端口
  • listenaddress listenport 映射到宿主机的地址和端口

查看当前所有映射: netsh interface portproxy show all

删除某个映射: netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4000

其他说明:

5. 从 WSL 访问宿主机的服务

宿主机对于 WSL IP 作为 /etc/resolv.conf 的 nameserver,另外也可以在 Windows 上执行 ipconfig 查看 以太网适配器 vEthernet (WSL) 中的值。

6. 使用 SSH 连接

  1. sudo apt autoremove --purge openssh-server -y && sudo apt install openssh-server -y
  2. 修改 sshd 配置 /etc/ssh/sshd_config
    • 端口: Port 2222
    • 密码登录: PasswordAuthentication yes
  3. sudo service ssh --full-restart

7. FAQ

7.1. 如何禁用光标闪烁

配置没有办法直接禁用,只能在系统全局设置。 控制面板 => 键盘 => 更改光标闪烁速率

这个设定有点坑,估计后面会优化。

7.2. 如何使用系统代理

https://gitlab.com/JerryZhang2012/dotfiles

主机使用 ClashX 作为代理时,注意打开 Allow LAN 选项。

7.3. locale 设置为 en_US.UTF-8

很多种方法,大部分都是直接修改 /etc/default/locale 加上 .bashrc 比较麻烦。

简单的方法:

sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales

7.4. 系统如何使用 systemd?

不支持 systemd,安装服务、自启动等使用 Docker。

7.5. Windows Dockers 开启 WSL2 还是在 WSL2 中安装 Docker?

后者。所有带 GUI 的 Docker 都是垃圾(MacOS 和 Windows 下都一样)。

7.6. 如何设置启动目录

"startingDirectory" : "//wsl$/Ubuntu-18.04/home/<Your Ubuntu Username>" 4

7.7. ssh-add 报错:Could not open a connection to your authentication agent

根源是 ssh-agent 没起来,使用: eval $(ssh-agent -s) 解决。

7.8. 与宿主机文件系统互通

Windows 系统目录被挂载在 Linux 的 /mnt/ 目录下,拷贝文件超级方便。

Footnotes:

First created: 2020-11-21 11:40:19
Last updated: 2022-12-11 Sun 12:49
Power by Emacs 29.0.91 (Org mode 9.6.6)