我正在尝试做相当于:
$ sudo -u myuser DISPLAY=:1 xterm
但是,它给了我以下错误
Client is not authorized to connect to Server
另一方面,我可以很好地做到这一点:
$ sudo -u -i myuser
$ DISPLAY=:1 xterm
为什么 X 服务器不允许我以其他用户身份直接启动基于 X11 的应用程序,有什么方法可以明确允许这样做?
答案1
允许其他用户连接到您的 X 服务器意味着他可以看到您的屏幕、查看您正在输入的内容(例如密码)、终止您的应用程序(通过终止它们与 X 服务器的连接),从而在他终止您的应用程序时将您注销。窗口管理器,用假窗口引诱你......考虑到这一点,就很容易理解为什么默认情况下不允许它。
要允许其他用户访问您的 X 服务器,您可以向他提供您服务器的访问代码(请参阅输出,xauth list "$DISPLAY"
或者如果其他用户是本地用户,请运行xhost +si:localuser:myuser
答案2
如果您有 myuser 的密码或 myuser 的 ~/.ssh/authorized_keys 中的密钥,并且您的系统不支持该xhost +si:localuser
语法,您可以尝试ssh -X myuser@localhost xterm
启用-X
通过该 ssh 连接的 X 转发,创建一个新的虚拟的X 服务器,只能由其他用户访问,它将请求转发到您的 X 服务器,而不将其开放给系统上任何用户运行的任何进程,这通常发生在xhost
满足紧急需求或懒惰或 ICBFRTFM 导致xhost +localhost
.
当用户在远程计算机上时,该方法也有效(并显示出其全部潜力)。
像这样通过 ssh 转发 X 会产生一些开销,但除非您正在运行图形密集型的东西(例如 3D 游戏),否则您不太可能注意到任何性能下降。-o Ciphers=arcfour
向 ssh添加该选项可能会提高性能。
(顺便说一句,我已经通过这样的连接运行了 3D 程序,例如第二人生客户端ssh -X
,连接到我家庭 LAN 上的另一台计算机。这不是很好,但对于测试目的来说它工作得足够好)