![在 Linux 下以另一个用户身份运行 X 应用程序](https://linux22.com/image/1549763/%E5%9C%A8%20Linux%20%E4%B8%8B%E4%BB%A5%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%20X%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
访问旧话题在 Linux 下以另一个用户身份运行 X 应用程序,因为解决方案一直是“使用gksu
“对我来说,但是今天,当我需要它并尝试它时,它却不起作用。
下列的什么是 gksu 以及为什么要使用它, 我试过,
gksu -u otherusername xterm
通过要求输入密码的对话框后,我得到:
$ gksu -u otherusername xterm
xterm: Xt error: Can't open display: :2
也就是说,它对我来说不起作用。所以,
如何在 Linux 下以另一个用户身份运行 X 应用程序?谢谢。
PS,这是Ubuntu 17.04:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 17.04
Release: 17.04
Codename: zesty
答案1
Ubuntu 17 对吧?你确定你正在运行 Xorg,而不是韦兰?(即是否ps auxfww
实际上显示了一个正在X
运行的程序?)
如果您正在运行 Wayland(默认情况下):以 root 用户身份访问显示不允许由于安全特征(咳嗽)(咳嗽)。他们说你可以通过运行这个命令来解决这个问题前尝试运行 gksu:
xhost si:localuser:root
另一种方法是使用传统的 Xorg 显示系统启动你的 Ubuntu 系统;我认为你可以在登录时设置它。
不过我从未使用过 Ubuntu 17,也绝对不是 Wayland 用户。这可能是Ubuntu 18/LTS 将默认恢复使用经典 Xorg。
重要的提示:如果其他用户名你的不是根,无论您使用的是 Wayland 还是经典 Xorg,您都需要在通过 gksu 运行程序之前运行以下命令:
xhost si:localuser:otherusername
更新:
上述解决方案不适用于 Ubuntu 17.04 Xorg:
$ xhost si:localuser:root
localuser:root being added to access control list
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 109 (X_ChangeHosts)
Value in failed request: 0xe
Serial number of failed request: 7
Current serial number in output stream: 9
它好像Ubuntu Xorg“服务器没有构建 SECURE_RPC 支持,因此尝试添加 FamilyNetname (0xfe) 主机失败。”
因此,目前还没有针对 Ubuntu 的现成解决方案(但这仍然是这回答直到找到一个可行的答案)。
答案2
检查您的DISPLAY
环境变量;看起来新用户正在尝试使用 display :2
,但它可能没有连接 X 服务器。
您可以尝试类似这样的操作:export DISPLAY=localhost:0.0
,它应该会告诉 otherusername 的 X 应用程序使用当前用户的 X 服务器。(我很确定这是一个 hack,因为这个变量应该可以正确配置,而不必设置它,更多细节这里。
答案3
otheruser
代表超级用户将密码分配给此。:passwd otheruser
如果安装了 sudo 程序,则将以下行添加到
/etc/sudoers
,例如:user ALL = (otheruser) ALL
这将允许user
代表用户执行任何程序/命令otheruser
:
`$ sudo -u otheruser xterm`
user
将会要求输入用户的密码。
可以通过在上面一行中添加指令来实现无需密码请求NOPASSWD
:
user ALL = (otheruser) NOPASSWD: ALL
许多帮助额外的标志-c
或-p