WSL Windows工具栏启动器

2020-05-17 00:10:23

此脚本将为底层WSL安装创建一个Windows工具栏启动器,可用于通过标准Windows工具栏直接从Windows启动Linux本机应用程序,如下所示:

之所以特别酷,是因为WSL2即将到来,它带来了前所未有的性能和兼容性改进,因此这将把完整的Linux GUI应用程序直接带到Windows UI中。

在您的Windows主机上运行的X11服务器(例如X410、Xming等)。必须可以从您的WSL环境访问此服务器(使用wsl.exe--source~/.bashrc;xterm";之类的内容进行测试)。如果失败,请检查您的DISPLAY变量(故障排除中有更多详细信息)。

安装后,右键单击您的工具栏,转到工具栏->;新建工具栏.。并选择%USERPROFILE%\.config\wsl-windows-toolbar-launcher\menus\WSL作为目标文件夹(除非您选择了另一个目录)。

注意:如果您希望使用其他位置,可以使用--help提供许多选项。

如果已在WSL环境中安装了新软件,只需从WSL环境中再次运行脚本即可获取新的GUI。

$python wsl-windows-toolbar.py--help用法:wsl-windows-toolbar.py[Options]选项:-i,--install-directory path将启动器目标安装到此目录(<;target>;将作为此位置的后缀)-m,--metadata-directory path将启动器目标安装到此目录(<;target>;将作为此位置的后缀)-d,--要为其生成快捷方式的分发文本WSL版本(如果未提供此参数,将使用默认版本)-u,--用户文本WSL版本启动程序的用户身份(如果未提供此参数,将使用默认用户)-y,--确认-yes假定所有确认提示的答案都是';是。-f,--menu-file filename要解析的*.menu菜单文件-w,--wsl-相对于Windows安装的WSL可执行文件的文本路径-n,--目标名称要提供给创建的安装的文本名(将显示在工具栏菜单中)--help显示此消息并退出。

加载器过程涉及使用wscript启动批处理文件(以降低快捷命令长度)。有一个JJJA模板定义了此脚本,该脚本默认为wsl-windows-bar-template.j2,并从该脚本接受以下可能的变量Passedthrough:

rcfile:在脚本中选择的启动前的源rc文件(例如.bashrc。

X11服务器未设置为允许从外部主机访问(如何配置将取决于您的X11服务器,因此请参阅他们的文档)。

请注意,在本节中,您可以检查您正在使用的WSL版本和:

如果您正在运行WSL1,那么WSL1的DISPLAY变量应该只是localhost:0.0(如果这是默认的发行版)。

不幸的是,对于WSL2来说,它现在有点复杂,尽管我认为他们正在重新计划解决这个问题。您将需要类似这样的内容来提取正确的主机:

那你就得担心防火墙了。WSL是作为公共网络出现的,但我不建议允许所有公共网络流量访问您的X服务器。因此,当出现此类提示时,您可以继续并选择默认值:

现在,令人恼火的是,这将为公共网络主动添加阻止规则(而不是简单地不添加允许规则),您需要在下一步中禁用该规则,方法是进入Windows Defender防火墙-&>入站规则,并为公共网络上的TCP禁用此阻止规则。

如果您不执行上述步骤,阻止规则将优先于允许规则,您将无法通过。

现在,右键单击入站规则并选择New Rule.,选择TCP端口6000(很可能),然后选择Defaults。这将为此端口打开您的公共网络.。这也不是你想要的。您想要的是只允许来自WSL子网的流量。因此,刷新列表,滚动到您最近创建的名称,右键单击并转到属性。现在,在“作用域”下,转到“远程IP地址”,选择这些IP地址,然后添加172.16.0.0/12以将可以访问此端口的子网限制为WSL子网。它应该看起来像这样:

或者,您也可以只禁用WSL的整个防火墙,但这会添加一个防火墙警告,这会不断激怒我:

应用程序是否使用dbus?如果是这样的话,建议在您的.bashrc中放入类似这样的内容,以满足许多依赖于dbus来运行的应用程序:

dbus_status=$(服务dbus状态)如果[[$dbus_status=*";没有运行";*]];则sudo服务dbus--full-restartfi。

还要检查.bashrc调整是否已添加到.bashrc中会阻止设置显示的任何肮脏之前:

您可以做类似的对接或任何其他服务,您将需要访问,但不一定已经在一个普通的WSL安装。

要进一步调试,您可以直接从cmd shell的命令行运行快捷方式:

将xterm替换为您试图启动的任何命令。注意:在本例中,env命令将打印出在运行xterm之前设置的所有环境变量,因此这将帮助您仔细检查是否真的正确设置了DISPLAY。

验证您是否在Windows 10上运行X Server。常用选项包括X410或Xming。

验证您是否可以从WSL终端实际启动X个应用程序(例如,尝试运行xterm)。

如果需要解决问题,请准备命令的日志输出以及有关您的执行环境的详细信息。理想情况下,还可以尝试查找与故障软件相关的.ktop文件。