实现 WSL 2 开机免登录自动启动

WSL 2 在个人使用时，根据终端随开随用很方便，长时间不用自动关闭也节能。但作为服务器系统使用就不够了。

WSL 2 的自动启动有很多方案，本文写的是基于 Windows 自带的任务计划程序的方案。WSL 之前一直不支持通过任务计划程序启动，这个 BUG 直到 2023 年 9 月 27 日 才被修复，真不愧是微软。

步骤

一定要确保 WSL 当前处于最新版本（即 WSL September 2023 update 之后的版本），系统自带版本不支持这种开机启动。

打开任务计划程序。

点击右边的创建任务。

任务的名称和描述可以随便写，安全选项需要选择”不管用户是否登录都要运行”。

点击上方的”触发器”选项卡，点新建按钮，然后会卡几秒（微软的老 BUG）。开始任务中选择”启动时”，然后点击确定。

“操作”选项卡中，点新建按钮，然后”程序或脚本”下的文本框里输入"C:\Program Files\WSL\wsl.exe"，引号也要带上（非常重要，除了这个目录下的wsl.exe，其他位置的都不行）。添加参数可以根据需要填写，比如-d Debian指定发行版。

“条件”选项卡中，所有选项全部取消勾选。

“设置”选项卡中，除了”允许按需执行任务”，其他全部取消勾选。

点击确定关闭窗口。可以先右键运行试试效果。这种方法运行的 WSL 即使当前用户注销也是会继续运行的。

Linux 内部的自动启动就得靠 SystemD 了，这里就不赘述了。

故事环节

最近几个月一直在纠结 Windows 和 Linux 双系统的问题，期间碰到了不少的坑。尝试过的方案有：

PVE 做宿主，Windows 和 Linux 都作为虚拟机：NVIDIA 显卡透传的问题很大，PVE 作为宿主还要吃掉一小点性能。约等于同时维护三套系统，累。如果要远程开机和 SSH，还得先把 PVE 面板映射出来。

Linux 做宿主，Windows 跑在虚拟机：同样存在显卡透传问题，而且手动配 QEMU + KVM 虚拟机心智负担太大，我也不想用 libvirt 等方案。同时之前为了装 Windows 11 买的 TPM 模块就浪费了。我的 Linux 系统还做了硬盘加密，远程开机也废了。

Windows 做宿主，Linux 跑在虚拟机：无论是 VMware Workstation 还是 VirtualBox，都是大毛病没有，小毛病不断。不管哪个方案，Linux 内部的显卡都是残废状态，操作起来一卡一卡。如果只是在终端操作，倒还没什么问题，桌面操作就废了。如果宿主是笔记本，进入了 S0 睡眠模式，VMware Workstation 会出现内核 CPU stuck 错误，VirtualBox 则是出现时钟漂移。

再买一台电脑：没钱。

WSL 1：内核太老，性能差。

WSL 2：有显卡加速，虽然不算是真·虚拟机，但比起上面几个方案好太多了。

用 WSL 2 做服务器 Linux 似乎不太正经，不过我也不要求有多高的稳定性，能充分利用我现有的硬件就够了。如果有更高要求，直接去 AWS 买 EC2 吧 ¯\(ツ)/¯ 。

参考资料

Unable to start WSL via Task Scheduler - GitHub

原文：实现 WSL 2 开机免登录自动启动