X11:以另一个用户身份运行GNOME应用程序。

21

我使用Ubuntu + X11 + Gnome。

我想要以另一个用户的身份运行一个图形化应用程序。

然而,当我使用命令行以sudo -u otheruser app的方式启动它时,我会得到错误信息"未指定协议"。

我该如何解决这个问题?


3
将被转移到superuser.com。 - Jeff Atwood
7个回答

13

xhost '+si:localuser:USERNAME'


8

首先执行此命令:

$ sudo xhost +

然后以另一个用户身份运行所需的命令:

$ sudo -i -u username
$ command you want to run

完成后:
$ sudo xhost -

不错的发现。现在Chrome和Flash可以作为不同用户正常运行,但是要获取音频,您需要先pkill当前用户的pulseaudio-daemon。 - Stefan Steiger
8
如果您不想从互联网接收连接,请输入以下命令:sudo xhost +local: - maxy
1
"xhost +" 非常不安全:它将允许任何用户连接到您的 X 会话并向您打开窗口。 - trapicki
使用命令“xhost +用户名”将用户名添加到可以访问X服务器的用户列表中。 然后使用命令“xhost -用户名”来删除该用户。 - miller the gorilla

3

使用

xdg-su -u user -c command

我相信你仍然需要使用xhost来允许任何用户的本地连接。 - codeape
man xdg-su:xdg-su 仅适用于桌面会话内部。 - Robert Munteanu

2
大多数提供的解决方案都不与Wayland和PulseAudio集成。我为此编写了ego(Alter Ego),它会自动处理xhost以及Wayland和PulseAudio套接字共享:https://github.com/intgr/ego。因此,您只需运行ego appego -u somebody app。如果遇到问题,请在GitHub上打开一个问题。我可能是唯一的用户,所以它还没有经过太多测试。(我注意到我晚了十年才回答这个问题,但希望它能帮助到某些人:D)

1

你可能需要告诉你的X服务器接受来自拥有服务器实例(即你)以外的其他用户的连接。可以查看xhost命令。


0
gksu -u <user> -c <command>

<user>替换为要运行命令的用户名,将<command>替换为要运行的命令。请记住,程序将在<user>的上下文中运行,但在当前目录中。

在弹出窗口中,当然要输入目标<user>的密码。


0

gksudo -u 命令


在我的Ubuntu桌面上尝试了这个,但它没有工作(与问题中相同的错误消息)。 - codeape

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接