通过 ubuntu 子系统从 ssh 获得的 X11 未连接到 DISPLAY

通过 ubuntu 子系统从 ssh 获得的 X11 未连接到 DISPLAY

我有一个 Raspberry Pi 4,在 sshd_config 中启用了 x11。我使用 ssh 和 -X 参数设置连接到 Pi。当我尝试打开一个应用程序(比如 gedit)时,它给了我错误

Unable to init server: Could not connect: Connection refused (gedit:4795): Gtk-WARNING **: 16:19:14.250: cannot open display: localhost:0.0

在子系统上本地运行 gedit 运行良好。

通过超级用户和 Google 进行故障排除并没有找到解决此问题的方法。

我也尝试以 sudo 身份运行 gparted,但出现了同样的错误

答案1

经过更多的故障排除和谷歌搜索后,我偶然发现了帖子。该命令export DISPLAY="127.0.0.1:10.0"修复了我的问题并成功打开了 gedit。

答案2

检查 shell 启动文件(.bash_profile 等)中是否有 DISPLAY 设置不正确的内容。如果 SSH 设置了 X 转发,那么它会将 DISPLAY 设置为正确的值。通过 SSH 转发 X 时,您无需自行设置 DISPLAY。

当 ssh 连接创建 X11 转发时,SSH 服务器将为通过该连接进行的任何 ssh 会话设置 DISPLAY 环境变量。通常,display 的值将类似于localhost:10.0。如果 sshd 被编译为执行此操作,您可能会看到 IP 地址而不是“localhost”。如果 display 10 已被使用,则数字“10”可能是 11、12 等。

数字 10 来自 sshd 配置选项X11显示偏移量。默认值为 10,但如果有理由,也可以将其设置为其他数字。

您说 gtk 正在尝试连接但失败了localhost:0.0。可能有两个原因导致这种情况发生:

  1. 由于某种原因,服务器(树莓派?)上的 X11DisplayOffset 设置为 0,并且由于某种原因转发不起作用。
  2. 您的 shell 启动文件 (.bash_profile 等) 中的某些内容正在用另一个不正确的值覆盖 ssh 设置的 DISPLAY 值。

您说将 DISPLAY 设置为127.0.0.1:10.0有效。这意味着 sshd 可能正在使用默认的 X11DisplayOffset。这意味着您的问题是 #2:shell 启动文件中的某些内容错误地将 DISPLAY 设置为localhost:0.0,覆盖了 ssh 服务器应该创建的正确 DISPLAY 值。

相关内容