- 发布于
WSL完整配置指南
- 作者

- 姓名
- Corner430
- 社交账号

本文汇总了 WSL(Windows Subsystem for Linux)日常使用中最常见的配置需求,包括安装目录迁移、systemd 启用、开机自启动以及代理配置。每个方案都经过实际验证,可以直接使用。
1 安装目录迁移
WSL 默认安装在 C 盘,随着使用空间会不断增长。以下步骤将 WSL 迁移到其他磁盘(以 Ubuntu-20.04 迁移到 D 盘为例)。
在 Windows PowerShell 中依次执行:
# 查看当前 WSL 发行版
wsl -l -v
# 导出为 tar 文件
wsl --export Ubuntu-20.04 d:\wsl-ubuntu20.04.tar
# 注销当前发行版
wsl --unregister Ubuntu-20.04
# 重新导入到 D 盘
wsl --import Ubuntu-20.04 d:\wsl-ubuntu20.04 d:\wsl-ubuntu20.04.tar --version 2
# 设置默认登录用户(替换 corner 为你的用户名)
ubuntu2004 config --default-user corner
# 清理 tar 文件(可选)
del d:\wsl-ubuntu20.04.tar
ubuntu2004是 Ubuntu 20.04 对应的命令,其他版本类似(如ubuntu2204)。
注意事项:
- 导出导入过程中 WSL 实例会停止,确保没有正在运行的重要任务
- 导入后原有的文件、配置、已安装的软件都会保留
- 路径中不要包含中文或空格
2 启用 systemd
WSL 已原生支持 systemd,启用后可以正常使用 systemctl 管理服务。
编辑 /etc/wsl.conf:
sudo vim /etc/wsl.conf
添加以下内容:
[boot]
systemd=true
保存后在 PowerShell 中执行 wsl --shutdown 关闭 WSL,再重新打开即可生效。
端口冲突提醒:启用 systemd 后,部分系统服务会自动启动并监听端口(如
systemd-resolved监听 53 端口),可能与 Windows 上的服务冲突。遇到端口占用问题时,可通过systemctl disable <service>禁用相关服务。
参考:Systemd support is now available in WSL!
3 开机自启动与后台运行
默认情况下 WSL 需要手动启动。通过 VBS 脚本可以实现开机自动启动并在后台静默运行。
3.1 创建启动脚本
创建 wsl.vbs 文件,内容如下:
ws = CreateObject("Wscript.Shell").run "wsl -d <distribution_name>", 0
- 将
<distribution_name>替换为你的发行版名称(如Ubuntu) - 参数
0表示隐藏窗口运行
3.2 设置开机自启
Win + R打开运行对话框,输入shell:startup回车- 将
wsl.vbs复制到打开的启动文件夹中 - 重启计算机生效
4 代理配置
在 Windows 上使用 Clash 等代理工具时,WSL 默认无法直接使用代理。以下提供三种解决方案。
4.1 前置条件:防火墙放行
确保 Clash 核心程序能通过 Windows 防火墙:
- 打开 控制面板 → Windows Defender 防火墙 → 允许应用通过防火墙
- 找到
clash-win64.exe(注意不是 Clash For Windows 前端程序) - 确保专用网络和公共网络都勾选允许
- 如果没有找到,点击「允许其他应用」手动添加,路径通常在
Clash for Windows\resources\static\files\win\x64\clash-win64.exe
4.2 方案一:环境变量(始终代理)
将以下内容添加到 ~/.bashrc 或 ~/.zshrc:
# 代理配置(始终生效)
export HOSTIP=$(cat /etc/resolv.conf | grep "nameserver" | cut -f 2 -d " ")
export http_proxy="http://$HOSTIP:7890"
export https_proxy="http://$HOSTIP:7890"
export all_proxy="socks5://$HOSTIP:7890"
export ALL_PROXY="socks5://$HOSTIP:7890"
此方案每次打开终端时自动设置代理。/etc/resolv.conf 中的 nameserver 地址即为 Windows 主机 IP。
4.3 方案二:函数开关(按需代理)
将以下内容添加到 ~/.bashrc 或 ~/.zshrc:
# 开启代理
proxy() {
export HOSTIP=$(cat /etc/resolv.conf | grep "nameserver" | cut -f 2 -d " ")
export http_proxy="http://$HOSTIP:7890"
export https_proxy="http://$HOSTIP:7890"
export ALL_PROXY="http://$HOSTIP:7890"
echo "HTTP Proxy on"
}
# 关闭代理
unproxy() {
unset http_proxy
unset https_proxy
unset ALL_PROXY
echo "HTTP Proxy off"
}
使用方式:终端输入 proxy 开启,unproxy 关闭。
4.4 方案三:镜像网络模式
WSL2 支持镜像网络模式,使 WSL 和 Windows 共享同一网络栈,代理自动生效,无需手动配置环境变量。
编辑 Windows 用户目录下的 .wslconfig(路径:C:\Users\你的用户名\.wslconfig):
[wsl2]
networkingMode = mirrored
dnsTunneling = true
autoProxy = true
镜像模式需要 Windows 11 22H2 及以上版本。也可以使用
bridged桥接模式配合vmSwitch参数。
参见:WSL 中的高级设置配置
5 常见问题
5.1 导入后默认用户变为 root
执行 wsl --import 后默认用户会变为 root,使用对应发行版的 config --default-user 命令重新指定即可(见第 1 节)。
5.2 systemd 启用后端口冲突
通过 systemctl disable <service> 禁用不需要的服务,或修改服务的监听端口。
5.3 方案一/二在重启后 IP 变化
WSL 每次重启后 Windows 主机 IP 可能变化,方案一和二通过动态读取 /etc/resolv.conf 已解决此问题。如果该文件被 systemd-resolved 覆盖,可在 /etc/wsl.conf 中添加:
[network]
generateResolvConf = false
然后手动配置 /etc/resolv.conf。
5.4 镜像模式下 localhost 不通
确保 .wslconfig 配置正确,且 WSL 版本足够新(Windows 11 22H2+)。
参考资料
版权声明
- 作者: Corner430
- 标题: WSL完整配置指南
- 链接: https://corner430-ai-blog.vercel.app/blog/WSL完整配置指南
- 许可协议: CC BY-NC-SA 4.0
除非另有说明,本文内容采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。