如何通过ssh作为另一个用户通过sudo运行GUI应用程序

我有我的服务器上configuration了ssh,有时我必须运行一些graphics应用程序。 当我用-X选项连接时,它工作的很好。 我可以运行如google-chrome 。 但是,如果我通过sudo -i -u other_user更改用户,则无法以此用户身份运行GUI应用程序。

我认为这是与环境和DISPLAY,但不知道该怎么做。 我试图添加-E ,但是然后我收到错误信息,说我不能和-i一起使用它。 我怎样才能通过SSH运行GUI应用程序作为另一个用户?

最简单的方法是使用ssh -X作为其他用户运行命令。 但这会使应用程序运行速度明显变慢,甚至在本地运行。


-i选项告诉sudo重新初始化环境。 X应用程序需要$DISPLAY和(在某些设置上) $XAUTHORITY ,并可能使用其他环境variables,如语言环境设置。 尝试没有-i ,或者如果你必须使用-i ,运行

 sudo -i -u other_user \ env DISPLAY="$DISPLAY" XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \ xapplication 

即使你摆脱了-i ,你可能必须明确地提供XAUTHORITY :默认情况下(如果variables没有设置)它是主目录中的.Xauthority

到目前为止,我一直假设其他用户可以阅读您的$XAUTHORITY 。 但是,除非你这么做,否则情况就不会这样(比如用setfacl -m user:other_user:r $XAUTHORITY )。

或者,不要让其他用户阅读您的$XAUTHORITY ,您可以将正确的cookie复制到用户可以阅读的另一个文件中。

 xauth extract -f - "$DISPLAY" | sudo -u other_user xauth -f ~other_user/.Xauthority merge - 

请注意,允许其他用户访问您的显示器,使他可以做任何事情,包括发送虚假的按键到应用程序。 所以如果你改变用户隔离,你不会得到太多。