我的 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 系统和窗口管理器。