本文最后更新于 2018-12-08,文章内容可能已经过时。

本文最初在发布于GitHub,在此重新发布是为了汇总作品。本文撰写时(2018)基于第一代WSL技术,在此发布时(2024)微软已经发布第二代WSL技术并被主要应用。如果你在使用 WSL 2,请注意内容适用性。

  我们往往会写一些自动化脚本来完成重复的任务,在WSL中,也存在可以通过脚本简化的工作。在前文,我们为Ubuntu发行版安装了桌面环境,虽然能够正常运行,但是每次启动都需要我们手动开启VcXsrv,然后在WSL中手动启动相关组件(compiz等),这种重复的过程无疑是可以通过脚本实现"一键启动"桌面环境的。脚本的大体思路为:启动VcXsrv,然后登陆Ubuntu执行命令。具体步骤如下:

  1. 进入VcXsrv程序的存储路径。打开XLauncher,进行任意配置,最终打开一个VcXsrv窗口。右键单击任务栏打开任务管理器,在进程标签内右键单击VcXsrv windows xserver进程选择打开文件所在位置,打开的资源管理器窗口即代表VcXsrv程序的位置。

  2. VcXsrv程序所在的文件夹内新建一个文本文档并重命名为run-ubuntu-desktop.bat(注意扩展命也要修改),接下来为这个bat文件创建一个桌面快捷方式,最后右键单击快捷方式选择编辑打开记事本窗口。

  3. 在打开的记事本窗口中添加以下命令并保存。

    cd /d %~dp0
    
    start vcxsrv.exe  :0 -clipboard -wgl -keyhook -nodecoration
    
    sleep 2
    
    powershell.exe -WindowStyle Hidden -c ubuntu
    

    **PS:**如果同时安装了同一发行版的多个版本,如ubuntu-16.04ubuntu-18.04ubuntu命令总会启动最新的18.04版。如果需要启动指定版本的发行版,请按以下步骤操作:

    1. 打开新的powershell终端。
    2. 执行wsl -l命令,查看系统已安装的发行版。
    3. 执行wsl -d <想启动的发行版名称>命令,测试发行版是否被正常启动,然后将上面的最后一行代码换成:
    powershell.exe -WindowStyle Hidden -c "wsl -d <想启动的发行版名称>"
    
  4. 接下来在Ubuntu中将以下内容添加到/etc/profile文件最后面。这样每次打开UbuntuBash窗口都会尝试启动桌面环境,如果没有正在运行的X Server,则停止启动。

    nohup compiz >/dev/null 2>&1 & 
    nohup plank >/dev/null 2>&1 &
    
  5. 关闭VcXsrv程序和所有Bash窗口,单击run-ubuntu-desktop.bat的快捷方式,稍等片刻,迎来的将是见证奇迹的时刻。Enjoy!