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

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

在我的终端里,我做了

 $su nextuser

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

$gedit test.c

我明白了

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

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

答案1

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

糟糕安装 sux命令(参见man sux) 会为您处理这个问题,并且采用与 相同的语法su

sux - nextuser
gedit test.c

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

图形应用程序倾向于将配置文件写入你的主目录中,如果你在保留的同时以另一个用户身份运行它们$HOME,它们将尝试以该用户的身份写入配置文件,你的主目录。这将导致无法写入配置,或者导致原始用户的配置混乱(或两者兼而有之)。这就是为什么建议在运行图形应用程序时使用-标志sux(或su)。(对于sudo,你可以改用图形前端喜欢gksu/gksudokdesudo。)

以其他用户身份直接运行图形命令

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

gksu -w -u nextuser gedit test.c

然而,你可能仍然必须xhost local:nextuser先运行(正如你在你回答得很好)才能正常工作。如果你使用sudo 模式,但只有管理员才能执行此操作(并且你将使用你的密码而不是nextuser的密码,因为sudo而不是su是后端):

gksu -u nextuer gedit test.c

以其他用户身份运行终端(不只是 Shell)

您可能只想以其他用户的身份运行图形终端程序(即 shell 在“内部”运行的程序)。一旦它运行,从中启动的图形程序也将无缝运行。

您可以使用上面描述的相同方法以gedit其他用户身份运行。

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

答案2

以 root 身份运行

echo $DISPLAY
xhost local:nextuser

然后

su - nextuser
export DISPLAY=<the value got from echo $DISPLAY above>
(or SET DISPLAY.. if export does not work)

你一切顺利。:)

答案3

使用-p选项保存环境变量包括;或者根据每个命令DISPLAY明确设置它或在其前面加上前缀。export

相关内容