我在服务器上配置了 ssh,有时我必须在其上运行一些图形应用程序。当我使用-X
option 连接时,它工作得很好。我可以运行例如google-chrome
。但是,如果我将用户更改为sudo -i -u other_user
,则无法以此用户身份运行 GUI 应用程序。
我猜是环境和 DISPLAY 出了问题,但不知道该怎么办。我尝试添加-E
,但收到错误消息,说我无法将其与 一起使用-i
。我如何以其他用户身份通过 ssh 运行 GUI 应用程序?
答案1
最简单的方法是使用ssh -X
其他用户身份运行命令。但这会使应用程序运行速度明显变慢,即使在本地也是如此。
该-i
选项指示sudo
重新初始化环境。X 应用程序需要$DISPLAY
和 (在某些设置中)$XAUTHORITY
,并且可能使用其他环境变量,如语言环境设置。请尝试不使用-i
,或者如果必须使用-i
,请运行
sudo -i -u other_user \
env DISPLAY="$DISPLAY" XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \
xapplication
即使您摆脱了-i
,您也可能必须XAUTHORITY
明确提供:默认情况下(如果未设置变量)它位于.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 -
请注意,允许其他用户访问您的显示屏几乎允许他做任何事情,包括向应用程序发送虚假按键。因此,如果您为了隔离而更改用户,那么您将不会得到太多好处。