我有我的服务器上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 -
请注意,允许其他用户访问您的显示器,使他可以做任何事情,包括发送虚假的按键到应用程序。 所以如果你改变用户隔离,你不会得到太多。