安装 chroot 后,我在连接到 x11 时发现了麻烦,我认为这是一个正常的用例,但找不到任何关于此用例的具体信息
# debootstrap stable /srv/stable/
...
# chroot /srv/stable/ xeyes
No protocol specified
Error: Can't open display: :0
答案1
首先,x11 客户端需要通过套接字文件与 x11 服务器通信,通常
/tmp/.X11-unix/X0
# mount -o bind /tmp/ /srv/stable/tmp/
其次,我的意思是,xauth
xhost
我一直把它混淆在一起。
A,(推荐)chroot 内进程的 uid 必须与主机上拥有 xauthority 的用户的 uid 匹配,例如我们可以将主机用户的用户名/组名 userid/groupid 克隆到 chroot(通常uid/gid 1000/1000)
# chroot /srv/stable groupadd -g $(id -g) $(id -gn) # chroot /srv/stable useradd -u $(id -u) -g $(id -g) $(id -un)
。
或 B,chroot 中进程的 uid 必须以其他方式获得授权,例如在 xauthority 文件中; chroot 将在 chroot 内部以 uid 0 身份运行,因此我们可以在 chroot 外部授权 uid 0,如下所示:
# xhost +si:localhost:root localhost:root being added to access control list
我们的图形程序现在应该具有使用 x11 显示器的连接和权限:
# chroot /srv/stable sudo -u $(id -un) xeyes
# chroot /srv/stable xeyes