rob*_*rob 19 windows cygwin xorg
我在我的 Windows 10 设备(Surface 3,以防万一)上有一个正常运行的 Cygwin 安装,包括一个正常运行的 Xorg 窗口环境。我也刚刚开始尝试使用适用于 Linux 的 Windows 子系统。从 WSL 运行 GUI 应用程序的建议似乎是安装另一个 X 服务器。通常推荐使用 Xming,但我没有看到任何建议 Cygwin 不应该工作。
但是,简单的方法失败了:
WSL $ export DISPLAY=:0
WSL $ emacs &
Display :0 unavailable, simulating -nw
Run Code Online (Sandbox Code Playgroud)
我怀疑这可能是网络问题,因为
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
Run Code Online (Sandbox Code Playgroud)
...但是到远程机器的 ssh 工作正常,而且很明显,自从我上次调试 Xservers 以来,Xservers 已经停止侦听端口 6000。
我尝试运行cygwin $ xhost +localhost,却发现xhost当前未安装在那里。这可能是下一个要尝试的事情,或者可能是一场野鹅追逐—— xhost(或至少,一个赤裸裸的xhost +)在我上次调试 X 服务器时大多被劝阻。
是否存在阻止 WSL 使用 Cygwin X 服务器的根本缺陷?如果没有,我将如何进行?
小智 20
您需要告诉 Cygwin/X 侦听 TCP,默认情况下它不会这样做。您可以通过将选项传递-listen tcp给 XLaunch 来完成此 操作。当你这样做时,它工作得很好。与 Xming 相比,我确实更喜欢 Cygwin/X。手册中的更多详细信息。
找到您用来启动 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"
Run Code Online (Sandbox Code Playgroud)
到
C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; exec /usr/bin/startxwin -- -listen tcp"
Run Code Online (Sandbox Code Playgroud)
为了获得xauth支持,您应该~/.Xauthority从 Cygwin 的主目录复制到 WSL 的主目录。
或者,如果您想禁用xauth,您可以编辑 Cygwin 的/usr/bin/startxwin,将顶部附近的相应行更改为enable_xauth=0。