xshellcn > Xmanager专栏 > 打开X程序出现localhost报错的更多原因与解决方法

打开X程序出现localhost报错的更多原因与解决方法

发布时间:2021/10/09 14:19:49

在上一篇中,我们介绍了通过Xmanager 7(Win系统)中的Xstart会话或者Xshell(Win系统)中的SSH会话来运行X应用程序(例如 Xterm)时,出现如下图所示“Can’t open display:localhost:16.0”这样的错误消息的两种可能原因。

图1:Xterm错误信息localhost:16.0
图1:Xterm错误信息localhost:16.0

上次介绍的两种报错原因分别是:

  1. 手动设置DISPLAY环境变量时出错
  2. 本地主机设置不正确

解决方法在上一期中也有比较详细的说明,接下来,我们就继续排查此类报错的另两种可能原因,均是由X11转发错误所导致的。

  1. 无法处理 MIT-MAGIC-COOKIE 时报错

Xshell中的SSH会话可以使用X11转发功能,通过安全的SSH隧道运行远程X应用程序。此时会验证客户端和服务器之间的Cookie,建立SSH连接后,Cookie会写入用户目录中的.Xauthority文件,只有通过验证的授权用户才能运行 X11 应用程序。

如果写入此cookie时出现错误或无法读取记录的值,则 X11 转发可能会失败,这时我们也可能会看到错误消息。

Cookie值记录错误也有很多种可能原因:

  1. 没有xauth工具无法记录cookie值
  1. 在路径中找不到xauth 命令或未安装包含适用文件的包。

解决方法:需要在SSH服务端配置文件sshd_config中进行路径设置,sshd_config文件的路径一般是/etc/ssh/sshd_config。

指定 xauth的绝对路径,默认路径是 /usr/X11R6/bin/xauth

  1. 安装了SSH服务器但没有安装xauth

Ubuntu下安装

图2:Ubuntu下安装xauth
图2:Ubuntu下安装xauth

Redhat下安装

图3:Redhat下安装xauth
图3:Redhat下安装xauth

  1. 无法访问.Xauthority文件

.Xauthority文件可以在我们的用户主目录中找到,用于存储xauth用于X会话的身份验证。

检查我们的用户主目录的访问权限是否正确设置,如果设置不正确就需要改正。通过以下命令可以更改以前由ROOT拥有的.Xauthority文件所有权:

sudo chown username:username .Xauthority

另外如果用户主目录中还有.Xauthority-c或.Xauthority-l文件,则需要将它们删除。这些文件正常情况下在会话结束后会自动删除,但也会由一些特殊情况会让它们保留下来。如果这些文件存在,那我们会无法将正确的信息写入.Xauthority文件。

图4:删除.Xauthority-c和.Xauthority-l文件
图4:删除.Xauthority-c和.Xauthority-l文件

  1. 使用su命令切换用户

如果使用su命令切换了用户,DISPLAY环境变量会正确继承,但Cookie可能不会。于是当我们从一个普通用户切换到另一个普通用户时,cookie值可能无法正确继承 导致报错。

如果切换用户后需要使用X应用,则需要知道前一个用户的cookie值。

图5:su命令切换用户
图5:su命令切换用户

  1. SSH服务器无法处理X11转发时出错

在极少数情况下,即使在 SSH 服务器的设置中设置并启用了X11转发,X连接也可能会失败,从而导致“无法打开显示...”错误消息。

在这种情况下,您应该使用以下命令重新启动ssdh保护进程:

# systemctl restart sshd

以上便是使用SSH会话运行X程序时出现localhost错误的4个可能原因和解决方法,大家如果想要了解更多使用Xshell连接服务器的使用技巧,敬请关注Xshell中文网

作者:∅

标签:Xmanagerocalhost报错

读者也访问过这里: