Cygwin/X 和适用于 Linux 的 Windows 子系统

Cygwin/X 和适用于 Linux 的 Windows 子系统

我的 Windows 10 设备(Surface 3,如果有需要的话)上安装了可正常运行的 Cygwin,其中包括可正常运行的 Xorg 窗口环境。我也刚刚开始尝试使用适用于 Linux 的 Windows 子系统。似乎从 WSL 运行 GUI 应用程序的建议是安装另一个 X 服务器。通常建议使用 Xming,但我没有看到任何建议 Cygwin 不能工作。

然而,这种简单的方法却失败了:

WSL $ export DISPLAY=:0
WSL $ emacs &
Display :0 unavailable, simulating -nw

我怀疑这可能是网络问题,因为

WSL $ telnet localhost 6000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
WSL $ /sbin/ifconfig
Warning: cannot open /proc/net/dev (No such file or directory). Limited output.
WSL $ # there was no output at all, actually

...但是 ssh 与远程机器连接正常,而且自从我上次调试 Xservers 以来,它显然已经停止在端口 6000 上监听。

我尝试运行cygwin $ xhost +localhost,结果发现xhost当前未安装。这可能是下一步要尝试的事情,也可能是徒劳无功 --- xhost(或者至少是赤裸裸的xhost +曾是上次我调试 X 服务器时,大部分时候都很沮丧。

是否存在一些根本缺陷导致 WSL 无法使用 Cygwin X 服务器?如果没有,我该怎么做?

答案1

您需要告诉 Cygwin/X 监听 TCP,默认情况下它不会这样做。您可以通过将选项传递 -listen tcp给 XLaunch 来做到这一点。当您这样做时,它工作得很好。我实际上更喜欢 Cygwin/X 而不是 Xming。更多详细信息手册


找到您用来启动 Cygwin/X 的快捷方式。(每个用户的启动快捷方式在 中C:\Users\<you>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,而系统范围的启动快捷方式在 中C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp。打开此链接的“属性”,然后将目标从

C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; exec /usr/bin/startxwin"

C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; exec /usr/bin/startxwin -- -listen tcp"

为了获得xauth支持,您应该~/.Xauthority从 Cygwin 的主目录复制到 WSL 的主目录。

或者如果您希望禁用xauth,您可以编辑 Cygwin 的/usr/bin/startxwin,将顶部附近的相应行更改为enable_xauth=0

答案2

您必须使用 启动 X 服务器startx。如果您尚未安装 X Windows,请运行 Cygwinsetup.exe并选择所有 X Windows 系统和窗口管理器。

相关内容