如何设置 VcXSrv 以与 WSL2 一起使用

问题描述 投票:0回答:2

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

x11
2个回答
31
投票

您应该使用 .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 服务器。


0
投票

这对我有用;使用

wsl --update
更新 WSL 并使用
wsl --shutdown
重新启动 WSL,这将强制 WSL 重新启动,并在更新后检查运行以下命令:

  • echo $DISPLAY
    你将拥有这个价值
    :0
  • xhost +
    你会看到

禁用访问控制,客户端可以从任何主机连接

如果您仍然遇到问题,请重新启动 Windows 并重试。 您可以通过这个问题的github趋势了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.