WSL 使用技巧
切换至 root 用户身份
前置条件:root 用 户组有个管理员叫 admin。
有很多操作都要 root 用户身份才可以做, 然而我们不能在 WSL 中直接通过 su 切换到 root 身份,原因未排查。
admin@AMD-PC:~$ su root
Password:
su: Authentication failure
解决方法是重设一次 admin 的密码:
admin@AMD-PC:~$ sudo passwd
New password:
Retype new password:
passwd: password updated successfully
更换密码再次执行 su 可正常切换成 root 用户:
admin@AMD-PC:~$ su root
Password:
root@AMD-PC:/root#
解决 DNS 网络问题
最典型的例子是,同一句 curl https://nodejs.org,在 win 下能正常访问,但 WSL2 Ubuntu 里面却是无响应。
方法一(推荐)
最方便的是直接用新的镜像模式网络,所有网络行为都跟 windows 里面一致。
创建 .wslconfig 配置:
[wsl2]
networkingMode=mirrored
详见 https://learn.microsoft.com/zh-cn/windows/wsl/networking#mirrored-mode-networking
方法二
- 在 WSL 里面找到 Windows 主机的 IP 地址
ip route show | grep -i default | awk '{ print $3}' - 改
/etc/resolv.conf将nameserver改成上一步所找到的 Windows 主机的 IP 地址
注意,以后每次启动 Ubuntu 子系统时都要重新配一次,因为每次分配的 win 主机 ip 都是不同的。
查看当前 WSL 安装的 Ubuntu 版本
wslfetch
开了 VPN 后自动端口转发会失效
前置条件:
- expressvpn
就算在 expressvpn 中设置了允许 Local Network 也无法在主机中通过 http://localhost:prot/ 访问到 wsl 内的应用。原因未明。
解决方式:
- 关 vpn。
- 重新启动应用,例如 npm start 等等。
WSL 主机端口转发
Windows 主机端口转发,让局域网访内的设备访问我们主机时,转发到 WSL 内进行处理,方便预览和调试。
WSL 官方文档有讲如何操作: https://docs.microsoft.com/zh-cn/windows/wsl/networking#accessing-a-wsl-2-distribution-from-your-local-area-network-lan
以原样转发 5173 Vite 默认端口为示例:
-
Vite 要监听 0.0.0.0 端口:
vite.config.jsexport default defineConfig({
server: {
host: '0.0.0.0'
}
})npm run dev -
配置 Windows 本机端口转发:
netsh interface portproxy add v4tov4 listenport=5173 listenaddress=0.0.0.0 connectport=5173 connectaddress=localhostPS C:\Windows\system32> netsh interface portproxy show all
侦听 ipv4: 连接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
0.0.0.0 5173 localhost 5173 -
配防火墙:
这时候在本机的浏览器输入本机的局域网 IP 加端口号已经能正常访问了,但局域网内其他机器无法访问,这是另外一个知识点:被防火墙阻隔了。
解决方式是:Windows 安全中心 > 防火墙和网络保护 > 高级设置 > 添加入站规则