前言
最新在开发学习的时候使用到了WSL(苦于没有Mac电脑っ╥╯﹏╰╥c),在使用时发现了一些痛点。打开WSL时,会在任务栏保留一个程序窗口,如果将这个程序窗口关闭,那么存在于WSL内的Docker容器也随之关闭,这点十分难受。于是就想有什么办法能够在不显示窗口的情况下在后台运行WSL。在实践的过程中还蛮有意思,遂稍微记录。
让WSL“成为”应用程序
我希望的就是能够通过某种实现来随时控制WSL的启动和停止,这里能够想到的就是使用脚本来控制。
启动
首先需要一个命令来启动WSL并让它保持运行。这里可以选择使用 sleep infinity ,但是,单纯让WSL保持运行会在界面上保留一个黑色控制台,就膈应。这时候可以考虑使用 -WindowStyle Hidden 来隐藏这个控制台,可以利用脚本来实现这个命令。
脚本的实现有两种方式,分别是powershell和cmd,这里选择了powershell(个人觉得cmd的命令没有powershell易读)。那么首先就要创建这样一个脚本,使用记事本或者vscode创建一个新的文本,在文本中键入以下命令
Start-Process -FilePath "wsl.exe" -ArgumentList "--distribution <Ubuntu发行版本> --exec sleep infinity" -WindowStyle Hidden
在保存之前,需要将命令中缺少的Ubuntu发行版本替换为你自己的版本,可以使用 wsl -l -v 这个命令来查看。最后只要将这个文件保存为 .ps1 文件即可。之后执行这个脚本就能够实现想要的功能。
优化
不过,随之而来的是第二个问题,执行这个脚本是不是还得敲命令呢?说到底,还是没有绕开启动的这一个命令。就有了下面这个方法,将脚本的启动绑定到快捷方式中。
在桌面右键,选择 新建->快捷方式 ,在弹出的窗口中键入以下命令
powershell.exe -ExecutionPolicy Bypass -File <script path>
你需要将 <script path> 替换为你刚刚创建的脚本路径。命令输入的位置如下图
之后你就可以得到一个快捷方式,点击这个快捷方式就能够直接启动WSL了。
停止
做完启动的功能,停止就显得十分简单了。同样新建一个快捷方式,输入下面这个命令
wsl --shutdown
保存即可。
有了启动和停止,自然会联想到查看当前WSL的状态,这里就再使用同样的方法,创建查看状态的快捷方式,命令如下
cmd /k wsl -l -v
其中 cmd /k 作用是打开窗口执行之后的命令,同时保留窗口显示结果。
到此为止,就可以通过三个快捷方式点击实现WSL的开启、关闭和查看状态了。既没有了任务窗口,Docker容器也不会停止了。