首页 > 解决方案 > 如何设置 VcXSrv 以与 WSL2 一起使用

问题描述

如何在 Windows 10 上设置 VcXSrv.exe 以在不禁用访问控制的情况下使用 WSL2?互联网上的每个描述都显示禁用访问控制,但这允许本地网络上的任何程序记录您的击键和鼠标移动等。

标签: x11

解决方案


适用于 WSL2 的 Windows 10 专业版 20H2 设置

您应该使用 .Xauthority 文件在 X11 客户端和 VcXSrv X11 服务器之间共享密钥,而不是禁用 VcXSrv 上的访问控制。.Xauthority 包含由 DISPLAY 索引的授权密钥集合。您需要使用特定 Windows 主机的密钥设置此文件,并在 VcXSrv 和在 WSL2 发行版上运行的 X11 客户端之间共享该文件。要进行此设置,请执行以下步骤:

运行您的 WSL2 发行版(假设这是基于 debian 的发行版)并安装 xauth、md5sum 和 gawk 或 awk。我们还将安装一些 X11 客户端来测试我们的设置。在这种情况下,我们将安装 gnome-terminal,但您可以根据需要安装其他东西。在 Ubuntu 发行版上,您可以执行以下操作:

sudo apt install -y xauth coreutils gawk gnome-terminal 
xauth list # this should be an empty list
magiccookie=$(echo '{some-pass-phrase}'|tr -d '\n\r'|md5sum|gawk '{print $1}')
xauth add host.docker.internal:0 . $magiccookie
cp ~/.Xauthority /mnt/c/Users/{WindowsUserName}

将以下内容添加到 WSL2 发行版主目录中的 ~/.bashrc

     export DISPLAY=host.docker.internal:0

我们需要使用所需的命令行参数创建一个 XLaunch 配置文件(即 config.xlaunch )或 VcXSrv.exe 的快捷方式。XLaunch 是一个简单的启动器,可帮助设置参数并依次调用 vcxsrv.exe。我们将忽略使用 XLaunch 并使用适当的参数创建我们自己的快捷方式。我们想用这些参数运行 VcXSrv.exe:

vcxsrv.exe -multiwindow -clipboard -wgl -auth {.XAuthority file} -logfile {A Log file} -logverbose {int log level}

从上面,我们将 .Xauthority 文件复制到 /mnt/c/Users/{WindowsUserName}/.Xauthority ,这意味着我们想要的命令行是:

vcxsrv.exe -multiwindow -clipboard -wgl -auth "c:\users\{WindowsUserName}\.Xauthority" -logfile "c:\users\{WindowsUserName}\VcXSrv.log" -logverbose 5

如果您不调试任何问题,请随意省略 logfile 和 logverbose 选项。所以你可以这样做:

vcxsrv.exe -multiwindow -clipboard -wgl -auth "c:\users\{WindowsUserName}\.Xauthority"

请记住将 {WindowsUserName} 替换为您在 c:\Users 下的文件夹的名称。

要创建快捷方式,请导航到 VcXSrv.exe 的安装位置。它的默认位置是

C:\Program Files\VcXSrv\VcXSrv.exe

在资源管理器文件窗口中,右键单击 VcXSrv.exe,然后单击“创建快捷方式”。这将在您的桌面上创建一个快捷方式。

右键单击创建的快捷方式图标,然后选择属性。

在“快捷方式”选项卡中,将上述参数附加到可执行文件之后。它应该看起来像:

"C:\Program Files\VcXSrv\VcXSrv.exe" -multiwindow -clipboard -wgl -auth "c:\users\{WindowsUserName}\.Xauthority"

在“属性”对话框的“常规”选项卡中,将名称更改为“VcXSrv with XAuthority”。

单击确定。

现在您可以通过双击快捷方式来启动 X11 服务器。

如果您希望在启动时启动 X11 服务器,请按照此处的说明进行操作:https: //support.microsoft.com/en-us/windows/add-an-app-to-run-automatically-at-startup-in -windows-10-150da165-dcd9-7230-517b-cf3c295d89dd

现在回到 WSL 发行版终端,您应该能够运行 gnome-terminal 或其他 X11 客户端,并让它安全地显示在 Windows 主机上运行的 VcXSrv X11 服务器上。

export DISPLAY=host.docker.internal:0
gnome-terminal

这应该会导致 gnome-terminal 显示在您的 X11 服务器上。此外,xauthority 文件将用于仅允许授权客户端连接到您的 X11 服务器。


推荐阅读