使用“startxwin”运行 cygwin X 服务器。使用 putty 或 cygwin ssh 客户端 ssh 到您的来宾虚拟机。
如果使用 cygwin ssh,请在运行 ssh 之前执行“export DISPLAY=:0”(即“vagrant ssh -- -vvv -X”)。
对于 putty:运行“startxwin -- -listen tcp”,在 putty 连接配置中启用 ssh-X11 转发,将“X 显示位置”设置为“localhost:0”并设置 .Xauthority 文件的正确路径(浏览,它可能在您的主目录中;startxwin 输出会告诉您在哪里)。
也许不要在 cygwin X 服务器上使用 msys2 ssh(vagrant 默认安装环境是 msys2,但 vagrant 在 cygwin 下也可以正常工作)。(有关原因的更多信息,请参阅详细信息)
细节:
如果您收到“connect /tmp/.X11-unix/X0: No such file or directory”(在 ssh 详细模式下)或 putty 错误“PuTTY X11 代理:无法连接到转发的 X 服务器:网络错误:连接被拒绝”,尝试使用 tcp 套接字而不是默认的 unix 域套接字。
当您运行 Cygwin X 服务器时,请转到“X -listen tcp -multiwindow”(多窗口是可选的 - 它为每个应用程序打开新窗口)。
如果在命令行中使用 openssh "ssh":在进入 "vagrant ssh -- -vvv -X" 之前,进入 "export DISPLAY=localhost:0" (不是 ":0" 而是 "localhost:0" 所以它使用 tcp )。我正在运行使用 msys2 的 git bash,它似乎无法通过模拟的 unix 域套接字与我的 cygwin X 服务器正确通信。但是,如果我在我的 cygwin 提示符下使用“vagrant ssh -- -X”(对于 unix 域套接字,使用 DISPLAY=:0),它就可以工作。
很棒的信息来源:http ://dustwell.com/how-x-over-ssh-really-works.html
此外,您可以将“config.ssh.forward_x11 = true”添加到您的 Vagrantfile。我认为这会在设置来宾虚拟机或运行“vagrant reload”时在 /etc/ssh/sshd_config 中设置 X11Forwarding。- https://coderwall.com/p/ozhfva/run-graphical-programs-within-vagrantboxes
更新:不建议在没有 xauth 安全性的情况下运行 X(如上所示)。它不安全。例如,同一 LAN 上的其他计算机可以通过 tcp 连接到您的 x-server,并使用 xkeys 嗅探您的按键。使用“startxwin”而不是直接运行 X,因此它使用 XWin 的“-auth”选项。这让我很难让我的 msys2 ssh 将 X 重定向到我的 cygwin X 服务器。连接时的 ssh 日志说它找不到 xauth 命令 - 那是因为它不存在于我的 msys2 环境中。Cygwin ssh X 重定向仍然可以正常工作。只要您在 putty 会话配置中设置 .Xauthority 文件路径(它可能就在您的主目录中),Putty 就可以正常工作。
我发现 tcp/unix-domain 套接字问题/解决方案实际上在 cygwin faq 中(这个 faq 很有帮助并且有很多信息):
6.7. PuTTY 转发的 X 会话无法连接。非 cygwin 本地 X 客户端无法连接。
X 服务器现在默认使用 -nolisten tcp,它通过不打开 TCP/IP 套接字,仅打开本地(UNIX 域)套接字来增加 X 服务器的安全性。非 cygwin 应用程序无法连接到该套接字。
https://x.cygwin.com/docs/faq/cygwin-x-faq.html