1. 硬件层准备

核心目标:物理开启 CPU 的虚拟化功能,这是 WSL 2 运行的硬件基石。

1.1 进入BIOS

重启电脑,在屏幕亮起的瞬间,高频连续敲击启动热键。

  • 1.1.1 品牌热键

    • 官网查找,浏览器搜索 ,AI询问

1.2 菜单索引

注意:针对 AMD 处理器,请重点寻找 SVM 关键词;Intel 处理器寻找 VT-x

  • **1.2.1 AMD 处理器:

    • 路径Advanced (高级) CPU Configuration SVM Mode 设置为 Enabled
  • **1.2.2 Intel 处理器:

    • 路径Security (安全) Virtualization Intel Virtualization Technology 设置为 Enabled

1.3 操作保存

找到设置项并改为 Enabled 后,必须按 F10 键(Save & Exit),选择 YES 确认重启。

2. 软件层部署

适用场景:BIOS 设置完毕后,在 Windows 侧执行的标准化安装指令。

2.1 核心指令

使用 管理员权限 打开 PowerShell,依次执行以下命令:

# 1. 开启虚拟机平台 (WSL 2 核心依赖)
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
 
# 2. 开启 Linux 子系统支持
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
 
# 3. [关键修正] 强制设置 Hypervisor 启动类型 (防止 BIOS 已开但 Windows 不加载)
bcdedit /set hypervisorlaunchtype auto
 
# 4. [防呆设置] 强制 WSL 默认版本为 2 (防止回退到 WSL 1)
wsl --set-default-version 2

2.2 重启安装

1. 立即重启 执行以下命令立即重启电脑:

shutdown /r /t 0

2. 安装通用版 Ubuntu 重启后打开管理员 PowerShell,执行:

wsl --update
# 这一步非常重要,确保 WSL 内核是最新版,否则可能报 0x800701bc 错误
wsl --install -d Ubuntu

3. 账户初始化 等待终端弹出,设置 UNIX 用户名与密码(注意:输入密码时屏幕无显示,盲打后回车)。

3. 账户凭证

适用场景:管理 Linux 系统的登录凭证,包含 Root 权限解锁、修改密码及异常重置。

3.1 Root配置

重要:Ubuntu 默认禁用 Root 账户登录。若开发需要(如救砖),需手动解锁。

1. 执行解锁指令 在普通用户模式下($ 提示符),执行:

sudo passwd root

2. 交互流程 输入当前普通用户密码 输入新的 Root 密码(盲打) 确认 Root 密码。

3. 验证 输入以下命令,能切换到 # 提示符即成功:

su root

3.2 常规密码

仅需更改当前登录用户的密码。在终端执行:

passwd

3.3 普户密码

如果忘记了密码无法进入系统:

1. 关闭所有 WSL 窗口

2. 以 Root 身份进入 在 Windows PowerShell (管理员) 中执行:

wsl -u root

3. 强制重置密码 进入 Root 命令行后执行以下命令:

passwd <你的用户名>

3.4 系统重置

场景:如果安装中断导致配置文件丢失,或想修改用户名,最彻底的方法是重置。

1. 销毁当前实例 在 Windows PowerShell (管理员) 中执行:

wsl --unregister Ubuntu

2. 重新初始化 执行以下命令,系统会重新请求设置用户名和密码,并自动生成完整的配置文件:

wsl --install -d Ubuntu

4. 网络配置

4.1 方案指南

  • Windows 11:请优先使用 4.2 镜像模式

  • Windows 10

    • 优先尝试 4.3 TUN 模式(最简单)。

    • 如果失败,再使用 4.4 通用脚本方案(最稳健)。

4.2 镜像网络

原理:利用 Win11 特性,让 WSL 直接复用 Windows 的网络身份。

1. 创建配置文件%UserProfile% 目录下创建 .wslconfig 文件(注意扩展名)。

2. 写入配置

[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
firewall=true
memory=8GB  # 限制内存占用

3. 重启生效 执行以下命令:

wsl --shutdown

4.3 TUN模式

原理:利用代理软件的 TUN 虚拟网卡配合 WSL 的 VirtioProxy 模式实现透明代理。

1. 前置条件 v2rayN 或 Clash 已开启 TUN 模式

2. 验证方法 在 Ubuntu 终端直接输入:

ping google.com

如果能通(有时间返回),恭喜!你不需要配置后续的脚本。

4.4 通用脚本

适用场景:如果 TUN 模式失效,或需要精确控制代理端口。

1. 配置 WSL 脚本 (所有用户必做) 在 Ubuntu 中编辑配置文件:

code ~/.bashrc

在底部粘贴以下通用脚本 (Bulletproof Edition)

# ====================================================
# WSL 2 Universal Proxy Switcher (Bulletproof Edition)
# ====================================================

# 1. 自动获取 Windows 宿主机 IP
export hostip=$(ip route show | grep default | awk '{print $3}')

# 2. 通用代理函数 (Clash/v2ray)
# 用法: setproxy (默认7890) 或 setproxy 10809
function setproxy() {
    local port=${1:-10809}  # 支持自定义端口

    # 动态获取 IP,防止 WSL 重启后 IP 变更
    export hostip=$(ip route show | grep default | awk '{print $3}')

    # [关键修正] 统一使用 http 协议头,防止 v2rayN 协议冲突
    export http_proxy="http://${hostip}:${port}"
    export https_proxy="http://${hostip}:${port}"
    export all_proxy="http://${hostip}:${port}"

    # 修复 sudo 无法继承代理的问题 (自动添加 -E 参数)
    alias sudo='sudo -E'

    echo -e "\033[32m[Proxy Enabled]\033[0m Target: Windows Host (${hostip}) Port: ${port} (Protocol: HTTP)"
}

# 3. WARP 专用函数 (SOCKS5 模式)
# 用法: setwarp (默认40000)
function setwarp() {
    local port=${1:-40000}

    export hostip=$(ip route show | grep default | awk '{print $3}')

    # WARP 通常只提供 SOCKS5
    # 注意:apt update 不支持 socks5 代理
    export http_proxy="socks5://${hostip}:${port}"
    export https_proxy="socks5://${hostip}:${port}"
    export all_proxy="socks5://${hostip}:${port}"

    echo -e "\033[36m[WARP Enabled]\033[0m Target: Windows Host (${hostip}) Port: ${port} (Protocol: SOCKS5)"
    echo -e "\033[33m[Warning]\033[0m 'apt' command does not support SOCKS5. Use 'setproxy' for system updates."
}

# 4. 关闭代理
function unsetproxy() {
    unset http_proxy https_proxy all_proxy
    # 恢复 sudo 默认行为
    unalias sudo 2>/dev/null
    echo -e "\033[31m[Proxy Disabled]\033[0m"
}

2. 软件端设置 (分支选择)

  • 如果你用 Clash/v2ray/Verge:在软件设置中开启 “Allow LAN” (允许局域网连接)

  • 如果你用 Cloudflare WARP:需在 Windows PowerShell (管理员) 运行以下命令建立“端口桥接”:

# 1. 强制将发往本机的流量转发给 WARP (40000端口)
netsh interface portproxy add v4tov4 listenport=40000 listenaddress=0.0.0.0 connectport=40000 connectaddress=127.0.0.1

# 2. 放行防火墙,允许 WSL 访问这个端口
New-NetFirewallRule -DisplayName "WSL WARP Bridge" -Direction Inbound -LocalPort 40000 -Protocol TCP -Action Allow

3. 使用方法与端口切换

A. 生效配置 执行:

source ~/.bashrc

B. 默认连接 Clash/Verge 输入 (默认 7890):

setproxy

WARP 输入 (默认 40000):

setwarp

C. 指定任意端口 (灵活切换) 如果 v2rayN 端口是 10809:

setproxy 10809

如果 WARP 改成了 12345:

setwarp 12345

4.5 验证Sudo

1. 验证标准 使用以下命令验证连接(不要用 ping):

curl -I [https://www.google.com](https://www.google.com)

2. Sudo 的小脾气 虽然新脚本已优化 sudo 别名,但仍建议了解此原理:安装软件时若超时,使用 -E 参数:

sudo -E apt update

5. 故障排查

记录:安装全周期中遇到的所有阻碍与解决方案。

5.1 启动故障

  • 故障码 0x80370102:BIOS 虚拟化已开但报错。

    • 解法:执行以下命令:
bcdedit /set hypervisorlaunchtype auto

5.2 网络故障

  • 现象:配置了 .wslconfig 镜像模式,但无效。

    • 根因Windows 10 不支持镜像模式。这是 Win11 22H2+ 的独占功能。

    • 解法:删除 .wslconfig,改用 4.4 章节的通用脚本方案。

  • 现象:Win10 使用 WARP,报错 curl: (7) Failed to connect to ...

    • 根因:WARP 只监听 127.0.0.1,而 Win10 WSL 无法直接访问宿主机的 localhost。

    • 解法:必须使用 4.4 章节 中的 netsh 命令建立端口桥接(需在脚本中配合 setwarp)。

5.3 WSL入口

  • 现象:输入 wsl 命令后,进入的是精简版 Linux,无法使用 apt 命令,且报错 cat: /etc/resolv.conf: No such file

  • 根因:安装 Docker Desktop 后,Docker 默认将 docker-desktop 设为了 WSL 的默认启动项。

  • 诊断方法:在 PowerShell 输入 wsl -l -v,若 docker-desktop 前有 * 号,即为此问题。

1. 修复指令 - 夺回控制权 执行以下命令将 Ubuntu 设为默认:

wsl --set-default Ubuntu

2. 验证修复 重新输入以下命令,应看到 username@hostname 的正常终端:

wsl

5.4 WinNat禁用

  • 现象:输入 wsl 时报错 networkingMode Natnet start WinNat 报错 1058。

  • 根因:Windows 的 NAT 服务被意外禁用,WSL 强制降级。

1. 强制解禁服务 (关键步骤) 在管理员 PowerShell 执行:

sc.exe config "WinNat" start= auto

2. 启动服务 执行:

net start WinNat

3. 重启 WSL 执行:

wsl --shutdown

5.5 启动路径

  • 现象:使用管理员 PowerShell 打开 WSL 时,默认进入 /mnt/c/WINDOWS/system32

  • 解法:修改 .bashrc 实现智能跳转。

1. 编辑配置文件

code ~/.bashrc

2. 追加配置 在文件最底部粘贴以下代码,保存并重启终端即可:

# ====================================================
# Auto-Home Strategy (Smart Redirect)
# ====================================================
# 如果 WSL 启动时处于 Windows 系统目录 (管理员默认路径),则自动跳回用户家目录
if [[ "$PWD" == "/mnt/c/WINDOWS/system32" ]]; then
    cd ~
fi

6. 操作习惯

  1. 身份红线:日常开发用普通用户 ($),严禁一直用 Root (#)。

  2. 文件红线:代码必须放在 ~ (Linux 目录) 下,不要放在 /mnt/c/

  3. 代理习惯

    • 优先使用 TUN 模式。

    • 如果遇到 git 慢,再考虑启用 setproxy 脚本。