如何通过终端作为另一个用户执行命令时获得图形显示?

在我的终端,我做到了

$su nextuser 

并登录到该帐户。 现在,当我尝试在该用户的主目录中打开文本文件时

 $gedit test.c 

我明白了

 No protocol specified Cannot open display: Run 'gedit --help' to see a full list of available command line options. 

如何使用图形文本编辑器在新用户的帐户上显示文件?

从另一个用户的Shell运行图形命令

sux 安装sux 命令(请参阅man sux )为您处理此问题,并采用与su相同的语法。

 sux - nextuser gedit test.c 

这将自动确保.Xauthority是正确的,因此您不必运行任何命令来手动授权任何内容。

图形应用程序倾向于在主目录中编写配置文件,如果在保留$HOME同时以另一个用户身份运行它们,它们将尝试在主目录中以该用户身份编写配置文件。 这将导致无法编写配置,或者为原始用户(或两者的某种组合)搞砸了配置。 这就是为什么在运行图形应用程序时使用带有sux (或su )的-标志的原因。 (对于sudo ,你可以使用像gksu / gksudokdesudo这样的图形前端 。)

直接作为另一个用户运行图形命令

您可以在su模式下使用gksu (使用-w标志)以另一个用户身份运行该命令(使用-u标志):

 gksu -w -u nextuser gedit test.c 

但是,您可能仍然必须首先运行xhost local:nextuser (正如您在非常好的答案中详述的)才能使用此function。 如果你使用sudo-mode ,它就不太可能需要它,但是如果你是管理员,你只能这样做(你将使用你的密码而不是nextuser的密码进行身份validation,因为sudo而不是su是后端):

 gksu -u nextuer gedit test.c 

以另一个用户身份运行终端(不仅仅是Shell)

您可能只想运行图形终端程序(shell在“内部”运行)作为另一个用户。 一旦它运行,从它启动的图形程序也将无缝地工作。

您可以使用与上述相同的方法运行gedit作为其他用户。

 gksu -w -u nextuser gnome-terminal 
 gksu -u nextuser gnome-terminal 

以root身份运行

 echo $DISPLAY xhost local:nextuser 

然后

 su - nextuser export DISPLAY= (or SET DISPLAY.. if export does not work) 

你很高兴。 🙂

使用-p选项和su保存环境变量,包括DISPLAY ; 交替使用export显式设置它或在每个命令的基础上为它添加前缀。