X11:使用 sudo 调用时客户端未获得授权

X11:使用 sudo 调用时客户端未获得授权

可能的重复:
我可以以 root 身份在另一个用户的桌面上启动图形程序吗?

我正在尝试做相当于:

$ 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 上的另一台计算机。这不是很好,但对于测试目的来说它工作得足够好)

相关内容