如何在Windows 10上设置VcXSrv.exe以与WSL2配合工作,而无需禁用访问控制?互联网上的每个说明都显示要禁用访问控制,但这将允许本地网络上的任何程序记录您的按键和鼠标移动等内容。
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
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
如果您没有遇到任何问题需要调试,可以自由省略日志文件和详细日志选项。因此您只需执行:
vcxsrv.exe -multiwindow -clipboard -wgl -auth "c:\users\{WindowsUserName}\.Xauthority"
请记得将{WindowsUserName}替换为c:\Users下您的文件夹名称。
要创建快捷方式,请导航到VcXSrv.exe安装的位置。默认位置为
C:\Program Files\VcXSrv\VcXSrv.exe
"C:\Program Files\VcXSrv\VcXSrv.exe" -multiwindow -clipboard -wgl -auth "c:\users\{WindowsUserName}\.Xauthority"
export DISPLAY=host.docker.internal:0
gnome-terminal
这将导致gnome-terminal在您的X11服务器上显示。此外,xauthority文件将被用于仅允许授权客户端连接到您的X11服务器。
xauth list
时,我发现不再有一个条目为 host.docker.internal:0
,而是一个条目为 $HOSTNAME:0
(其中 $HOSTNAME
是我的PC名称)。我重新执行了从 xauth add ...
开始的步骤,现在它可以工作了。不确定它是如何发生的... - Fuhrmanatorhost.docker.internal
。@sfmontyo,您对这个答案的描述非常出色!真正节省了时间,特别是参数要求的分解,帮助我快速上手,并后来做出了快捷方式。谢谢! - nycynikexport LIBGL_ALWAYS_INDIRECT=1
添加到 ~/.bashrc
中,以获得稍微更好的性能。 - Tolyandrexauth add "$(grep "nameserver" /etc/resolv.conf | awk '{print $2}'):0" . $magiccookie'
- airtonix这对我有用;使用 wsl --update
更新 WSL,并使用 wsl --shutdown
重新启动 WSL,这将强制 WSL 重新启动,在更新后运行以下命令检查:
echo $DISPLAY
您将得到此值 :0
xhost +
您将看到access control disabled, clients can connect from any host
如果您仍然遇到问题,请重新启动 Windows 并重试。 您可以通过 github trend 了解更多信息。