我通过 ssh(使用 -X 选项)连接到另一台计算机,然后进行 chroot。
然后我在运行 X11 应用程序时遇到问题。
举个例子,在 ssh 之后,我将运行 emacs,它将打开一个新窗口作为 X11 应用程序。运行 chroot 并执行 ssh 后,我会看到 emacs 作为控制台应用程序运行。
我没有收到错误,因为 emacs 可以将其作为 X11 应用程序或控制台应用程序运行,但对于其他 GUI 应用程序,我收到错误消息:
"cannot open display: localhost:10.0"
PS:只是为了阻止任何想要建议检查 $DISPLAY 的人,它设置正确。
我想知道是否有任何日志可以检查,看看我是否可以识别问题。
答案1
除了其他答案中提到的 .Xauthority 文件之外,您的 chroot 还需要其中包含 X 套接字。 ssh -X
不通过抽象套接字转发 X,仅通过带有路径的 UNIX 套接字转发 X。如果您的 chroot 没有/tmp/.X11-unix
绑定安装到其中,则 chroot 中的程序无法连接到 X 服务器。
答案2
看看超级用户上的这个帖子,标题为:在启用 X11 转发的 ssh 后打开 X 程序时,如何修复“无法打开显示”错误?
假设您能够使用您正在 ssh 登录的第一个帐户进行 ssh,那么您的问题与此无关:
# /etc/ssh/sshd_config
X11Forwarding yes
现在您已经 chroot 后,很可能无法再访问本地端的 .XAuthority 文件。为了管理 X 应用程序的远程显示,需要此文件。
另外,如果您不熟悉 X$HOME/.Xauthority
和麻省理工学院魔法饼干机制起作用,这里有一个很好的入门书,标题为:缺乏.X权限,关于它是如何工作的。
答案3
最近遇到了同样的问题,这对我有用:
ssh -Y -C userontheserver@server
cp ~/.Xauthority /chrootdir/home/userinchroot/.Xauthority
chroot /chrootdir
您可能需要根据您使用 chroot 的方式进行调整(例如绑定/dev
、proc
...)