我以用户 A 身份登录。我想以用户 B 身份运行 GUI 应用程序。用户,而不是 root。用户 B 也是本地的,而不是远程的,我只需要不同的环境变量。我不想运行第二个 X,我希望它们在同一显示器上。我对在终端中运行的程序没有任何问题,su - ...
工作正常。对于图形化,有一条错误消息:
Application initialization failed: couldn't connect to display ":0.0"
或者
Gtk-WARNING **: cannot open display: :0.0
有没有好的办法解决呢?关于正确使用xhost
什么的文章?
答案1
运行以下命令以授予userBname
对显示的访问权限:xhost +SI:localuser:userBname
You may use xhost +
to grant access to every person;然而这是不安全的。更好的方法是按每个用户授予访问权限。本地用户的 xhosts 条目的正确语法是SI:localuser:username
。
然后su userBname
、export DISPLAY=:0.0
、 最后运行您的 GUI 程序。尽管您之前使用 授予了对显示的访问权限xhost
,但您还必须设置环境变量DISPLAY
,以便程序知道将其图形输出放置在何处。允许DISPLAY
不同的用户使用不同的变量,允许连接到一台机器的多个用户使用不同的物理终端。
答案2
只需使用 gksu -u 所需的用户名,输入密码,您就可以开始了。
DISPLAY=:1.0 gksu [-u <user>] [options] <command>
或者,您可以使用 su,然后将 XDISPLAY 设置到正确的屏幕,最后启动您想要的应用程序。
答案3
这就是我完成此任务的方法:-
- 以具有现有 X 会话的用户身份打开 x 终端。
- 发出命令
xauth list
。您应该看到 X Magic cookie 值,用于验证对 X 服务器的各种描述符的请求。复制带有“unix”参考的那个。例如myhost/unix: MIT-MAGIC_COOKIE-1 df8923ae98098fb890c63454c7c
- 作为初始用户打开第二个终端,但将用户 (su) 切换到您想要的 ID,例如
su - user2
- 现在您已经切换了用户,发出命令
xauth add
并粘贴您之前在第 2 阶段复制的行,然后按回车键,例如xauth add myhost/unix: MIT-MAGIC_COOKIE-1 df8923ae98098fb890c63454c7c
- 从命令行在第二个终端启动 X 程序,例如:
firefox
就是这样!
答案4
首先将第二个用户添加到 localuser:
$ xhost SI:localuser:user2
localuser:玩家被添加到访问控制列表
比运行你的应用程序:
$ sudo -u user2 -H firefox