转发 X11 失败:网络错误:连接被拒绝

Posted

技术标签:

【中文标题】转发 X11 失败:网络错误:连接被拒绝【英文标题】:Forward X11 failed: Network error: Connection refused 【发布时间】:2016-04-28 05:08:52 【问题描述】:

我有一个操作系统是 CentOS6.3 的 VPS。我想通过 PuTTY 和 Xming 运行 startx

但是,它会产生这个错误:

PuTTY X11 proxy: unable to connect to forwarded X server: Network error: Connection refused

整体情况:

Using username "root".
Authenticating with public key "rsa-key-20150906" from agent
Last login: Thu Jan 21 13:53:40 2016 from 222.222.150.82
[root@mairo ~]# xhost +
PuTTY X11 proxy: unable to connect to forwarded X server: Network error: Connection refused
xhost:  unable to open display "localhost:10.0"
[root@mairo ~]# echo $DISPLAY
localhost:10.0
[root@mairo ~]# gedit
PuTTY X11 proxy: unable to connect to forwarded X server: Network error: Connection refused
(gedit:6287): Gtk-WARNING **: cannot open display: localhost:10.0
[root@mairo ~]#

这里是 Xming 日志:

Welcome to the Xming X Server
Vendor: Colin Harrison
Release: 6.9.0.31
FreeType2: 2.3.4
Contact: http://sourceforge.net/forum/?group_id=156984

Xming :10 -multiwindow -clipboard 

XdmcpRegisterConnection: newAddress 192.168.139.1
winAdjustVideoModeShadowGDI - Using Windows display depth of 32 bits per pixel
winAllocateFBShadowGDI - Creating DIB with width: 1366 height: 768 depth: 32
winInitVisualsShadowGDI - Masks 00ff0000 0000ff00 000000ff BPRGB 8 d 24 bpp 32
glWinInitVisuals:1596: glWinInitVisuals
glWinInitVisualConfigs:1503: glWinInitVisualConfigs glWinSetVisualConfigs:1581: glWinSetVisualConfigs
init_visuals:1055: init_visuals
null screen fn ReparentWindow
null screen fn RestackWindow
InitQueue - Calling pthread_mutex_init
InitQueue - pthread_mutex_init returned
InitQueue - Calling pthread_cond_init
InitQueue - pthread_cond_init returned
winInitMultiWindowWM - Hello
winInitMultiWindowWM - Calling pthread_mutex_lock ()
winMultiWindowXMsgProc - Hello
winMultiWindowXMsgProc - Calling pthread_mutex_lock ()
glWinScreenProbe:1390: glWinScreenProbe
fixup_visuals:1303: fixup_visuals
init_screen_visuals:1336: init_screen_visuals
(--) 5 mouse buttons found
(--) Setting autorepeat to delay=500, rate=31
(--) winConfigKeyboard - Layout: "00000804" (00000804) 
(EE) Keyboardlayout "Chinese (Simplified) - US Keyboard" (00000804) is unknown
Could not init font path element D:\Program Files (x86)\Xming/fonts/misc/, removing from list!
Could not init font path element D:\Program Files (x86)\Xming/fonts/TTF/, removing from list!
Could not init font path element D:\Program Files (x86)\Xming/fonts/Type1/, removing from list!
Could not init font path element D:\Program Files (x86)\Xming/fonts/75dpi/, removing from list!
Could not init font path element D:\Program Files (x86)\Xming/fonts/100dpi/, removing from list!
Could not init font path element C:\Program Files\Xming\fonts\dejavu, removing from list!
Could not init font path element C:\Program Files\Xming\fonts\cyrillic, removing from list!
Could not init font path element C:\WINDOWS\Fonts, removing from list!
winInitMultiWindowWM - pthread_mutex_lock () returned.
winInitMultiWindowWM - pthread_mutex_unlock () returned.
winInitMultiWindowWM - DISPLAY=127.0.0.1:10.0
winMultiWindowXMsgProc - pthread_mutex_lock () returned.
winMultiWindowXMsgProc - pthread_mutex_unlock () returned.
winMultiWindowXMsgProc - DISPLAY=127.0.0.1:10.0
winProcEstablishConnection - Hello
winInitClipboard ()
winProcEstablishConnection - winInitClipboard returned.
winClipboardProc - Hello
DetectUnicodeSupport - Windows Vista
winClipboardProc - DISPLAY=127.0.0.1:10.0
winInitMultiWindowWM - XOpenDisplay () returned and successfully opened the display.
winMultiWindowXMsgProc - XOpenDisplay () returned and successfully opened the display.
winClipboardProc - XOpenDisplay () returned and successfully opened the display.

这是我在 VPS 上的sshd_config

#   $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes

# GSSAPI options
#GSSAPIAuthentication no
GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no

# Set this to 'yes' to enable PAM authentication, account processing, 
# and session processing. If this is enabled, PAM authentication will 
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
#UsePAM no
UsePAM yes

# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

#AllowAgentForwarding yes
#AllowTcpForwarding yes
GatewayPorts yes
#X11Forwarding no
X11Forwarding yes
#X11DisplayOffset 10
X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem   sftp    /usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   X11Forwarding no
#   AllowTcpForwarding no
#   ForceCommand cvs server

并且我已经启用了 X11 转发

是什么导致了上面给出的错误?


新添加的细节

根据@lilydjwg的回答,我已经填写了“X显示位置”,然后又试了一遍,还是错了:

Using username "root".
Authenticating with public key "rsa-key-20150906" from agent
Last login: Thu Jan 21 22:24:57 2016 from 222.222.150.82
[root@mairo ~]# echo $DISPLAY
localhost:10.0
[root@mairo ~]# gedit
process 6968: D-Bus library appears to be incorrectly set up; failed to read machine uuid: Failed to open"/var/lib/dbus/machine-id": No such file or directory
See the manual page for dbus-uuidgen to correct this issue.
  D-Bus not built with -rdynamic so unable to print a backtrace
Aborted
[root@mairo ~]#

【问题讨论】:

不,你没有。你不能在腻子上startx @Jakuje 不只是 startx,但是当我运行 gedit 时,它也会出错。 我认为您的 gedit 问题与您的 X 连接无关。它找不到 D-Bus 连接,该连接通常由您的窗口管理器启动。尝试一些基本的东西,比如“xclock”,看看是否有效。 @JvO 是的,它在一分钟后工作。但仍然出现警告Warning: Missing charsets in String to FontSet conversion 所以你的 X 连接工作正常;你只需要一些额外的组件,比如 D-Bus 守护进程。警告可能是由于缺少字体或语言环境。顺便说一句,如果 'xclock' 需要一分钟来启动你的 X 连接将会非常缓慢...... 【参考方案1】:

其他答案已过时,或不完整,或根本不起作用。

您还需要在主机上指定 X-11 服务器来处理 GUId 程序的启动。如果客户端是 Windows 机器,请安装 Xming。 如果客户端是 Linux 机器,请安装 XQuartz。

现在假设这是连接到 Linux 的 Windows。为了能够通过 putty 启动 X11 程序,请执行以下操作:

- Launch XMing on Windows client
- Launch Putty
    * Fill in basic options as you know in session category
    * Connection -> SSH -> X11
        -> Enable X11 forwarding
        -> X display location = :0.0
        -> MIT-Magic-Cookie-1
        -> X authority file for local display = point to the Xming.exe executable

当然,ssh 服务器应该允许桌面共享“允许其他用户查看您的桌面”。

MobaXterm 和其他完整的远程桌面程序也可以工作。

【讨论】:

为我工作。谢谢! 为什么这不是公认的答案???? (完美运行,谢谢) 截至 2019 年 12 月,这应该是公认的答案。 这对我也很有效,请接受这个答案! 在远程机器上运行 Firefox 时,我得到 [GFX1-]: glxtest: libEGL 初始化失败。在主机上,我的浏览器是空白的。【参考方案2】:

PuTTY 找不到您的 X 服务器在哪里,因为您没有告诉它。 (Linux 上的 ssh 没有这个问题,因为它在 X 下运行,所以它只使用那个。)在“X 显示位置”后面的空白框中填写您的 Xming 服务器地址。

或者,试试MobaXterm。它有一个内置的 X 服务器。

【讨论】:

但是要填什么?填写localhost:10 ? @TJM gedit 正在使用 D-Bus,因此您也应该转发它。实际上,即使您转发了 D-Bus,某些应用程序也无法运行,例如证据。 @lilyjwg 那么,我该怎么办?有没有类似 pac 的东西可以指定 D-Bus 的哪些进展,哪些不可以? @TJM 不,D-Bus 不使用 javascript。您只需要一个 D-Bus,无论是本地还是远程。 感谢您使用术语xming。它提醒xterm需要一个显示服务器! ?【参考方案3】:

可以使用 dbus-launch 修复 D-Bus 错误:

dbus-launch command

【讨论】:

【参考方案4】:

填写“X 显示位置”对我不起作用。 但安装 MobaXterm 完成了这项工作。

【讨论】:

【参考方案5】:

我遇到了同样的问题,但现在已经解决了。 最后,Putty 确实可以与 Cigwin-X 一起使用,而 Xming 不是 MS-Windows X-server 的强制应用程序。

现在是 xlaunch,它控制着 X-window 的运行。 当然,xlaunch.exe 必须安装在 Cigwin 中。 在交互模式下运行时,它会要求“额外设置”。 您应该在附加参数字段中添加“-listen tcp”,因为 Cigwin-X 默认不监听 TCP。

为了不重复这些步骤,您可以将设置保存到文件中。并通过其快捷方式运行 xlaunch.exe,其中包含修改后的 CLI。像

C:\cygwin64\bin\xlaunch.exe -run C:\cygwin64\config.xlaunch

【讨论】:

这对我有用。谢谢!【参考方案6】:

不要以 root 用户身份登录,尝试另一个具有 sudo 权限的用户。

【讨论】:

我认为这是由于该服务器的管理员在sshd_config 中禁用了PermitRootLogin。如果它已被禁用,您将无法以 root 身份登录该服务器。但是,根据上面的问题,我已经以 root 身份登录。所以使用root并不是X11转发失败的原因。 没关系,如果启用了 PermitRootLogin,它就是通过 SSH 连接到服务器,而不管 X11Forwarding。同样,root 用户会给您带来问题,出于安全考虑,您不应该这样做,这不是一个好习惯。我推荐你使用 Cygwin / X,它更快更完整,但不是作为 root 用户。我正在使用 google-chrome 进行测试,它工作正常(有点慢),尽管它给了我一些我无法解决的 GPU 和 OpenGL 错误(与 Xming 中相同)。也许这是一个 Ubuntu 问题。 对不起,我以为我在西班牙语的 *** 中,我有更多的声誉,我可以发表评论。我只是想帮忙。我有一个类似的问题,我想我最好提出一个新问题。【参考方案7】:

X 显示位置 : localhost:0 为我工作:)

【讨论】:

【参考方案8】:

Windows 10 - Xming.exe 到 Linux Debian 10 buster X11

ssh.exe -X 不起作用,但 ssh.exe -Y 起作用。

感谢@KeyC0de 的回答,我已经使用 PuTTY.exe 从本地 Windows 10 成功连接到远程 Linux Debian 机器,从而可以使用 xterm 或其他 X11 图形程序。

但无法通过没有 PuTTY.exe 的 Windows 裸 ssh.exe 会话启动它们,即使 Xming.exe 安装在 Windows 10 本地主机中。

使用裸ssh.exe可执行文件,然后在Linux下使用xterm,我用这个方法成功了:

    在 Windows 10 下将 Xming.exe 作为 X11 终端服务器运行。 在 Windows DISPLAY="localhost:0" 上设置环境变量 运行 ssh.exe -Y user@example.com 在 Linux 下运行 xterm。

在 PowerShell 中,我们这样做:

$env:DISPLAY="localhost:0"
ssh.exe -Y user@example.com

现在我们在 linux remote box 上,

我们这样启动 X11 程序:

$ xterm

完成了。

ssh -Y 启用受信任的 X11 转发。受信任的 X11 转发不是 受 X11 SECURITY 扩展控制。

见https://man.openbsd.org/ssh。


如果您还在使用旧的 Windows 命令行提示符或 .bat 脚本,那么您可以这样做:

在 MS-DOS cmd.exe 控制台中,我们这样做:

SET DISPLAY=localhost:0
ssh.exe -Y user@example.com

Windows 10 PowerShell 控制台上的插图:

在 Linux 上生成这个 X11 小部件窗口:

【讨论】:

【参考方案9】:

对我来说,这是一个简单的错误:Xming 没有运行。确保您的 Xming 进程在后台运行,否则将无法运行。例如,如果您重新启动计算机,并且没有将 Xming 设置为自动运行。

【讨论】:

【参考方案10】:

PuTTY 找不到您的 X 服务器在哪里,因为您没有告诉它。 (Linux 上的 ssh 没有这个问题,因为它在 X 下运行,所以它只使用那个。)在“X 显示位置”后面的空白框中填写您的 Xming 服务器地址。 或者,试试 MobaXterm。它有一个内置的 X 服务器。

【讨论】:

【参考方案11】:

您应该安装一个 x 服务器,例如 XMing。并保持 x 服务器运行。 像这样配置你的腻子:应该检查Connection-Data-SSH-X11-Enable X11 forwarding。和 X 显示位置:localhost:0

【讨论】:

以上是关于转发 X11 失败:网络错误:连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

X11 转发每 20-30 分钟失败一次

“通道 0 上的 X11 转发请求失败”

使用没有 X11 转发的 git

Kubernetes 端口转发 - 连接被拒绝

连接失败 错误为651 已拒绝远程链接

Ejabberd 无法连接到“localhost”:3306:错误,“连接失败:连接被拒绝”