如何使用 xauth 通过其他用户在 linux 上运行图形应用程序

Phi*_*hil 55 linux sudo

我的常规用户帐户是,比方说,user1。我为某些 x 应用程序创建了单独的 user2,我希望在以 user1 身份登录 x 时运行该应用程序,但以防止它对 user1 数据进行读/写访问的方式。我想我可以使用 xauth 和 sudo/su 从 user1 到 user2 来运行这个应用程序。我该怎么做呢?我不确定如何配置 xauth。

小智 40

选择性地使用 xauth ,请作为 user1 运行:

xauth list|grep `uname -n`
Run Code Online (Sandbox Code Playgroud)

这将为您打印十六进制授权条目。您也可以拥有与这些主机相关联的不同显示。

作为 user2 设置您的显示(假设默认情况):

DISPLAY=:0; export DISPLAY
Run Code Online (Sandbox Code Playgroud)

然后运行:

xauth add $DISPLAY . hexkey
Run Code Online (Sandbox Code Playgroud)

请注意 $DISPLAY 之后和十六进制键之前的点。

当不再需要访问时,您可以作为 user2 运行:

xauth remove $DISPLAY
Run Code Online (Sandbox Code Playgroud)


小智 13

我把我.zshrc的一行,export XAUTHORITY=~/.Xauthority现在我可以执行sudo -E xcommand. 经过大量的谷歌搜索,对我来说这是最简单的方法。


sle*_*ske 11

第一:不要使用xhost +,它相当不安全(一揽子允许/拒绝)。

而是使用 X-Cookie 机制:

su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority 
export DISPLAY=:0
Run Code Online (Sandbox Code Playgroud)

或者,如果您已sux安装,请使用它(请参阅 ehempel 的答案)。

在这两种情况下,user2 将使用 .Xauthority 中的秘密 cookie 向 X 服务器授权,其他人将无法访问它。

笔记:

  • 根据您的文件权限,您可能需要以其他方式复制 .Xauthority。
  • 除了 copying .Xauthority,您还可以使用xauth提取和复制授权密钥(请参阅 Randall 的回答)。如果.Xauthority文件中有多个键,则更具选择性;否则这是一个品味问题。


小智 8

假设是 debian 或 ubuntu(在 Red Hat / SUSE 上应该类似)。

sudo apt-get install sux
sux user -c 'command'
Run Code Online (Sandbox Code Playgroud)

  • `sux` 未维护(并从 Debian/Ubuntu 的存储库中删除):https://packages.qa.debian.org/s/sux/news/20140101T172633Z.html (6认同)

ACV*_*ACV 8

作为根用户:

xhost local:yourusername
Run Code Online (Sandbox Code Playgroud)

其中 yourusername 是您的用户名:)

然后执行 su ,因为 xclock如果安装了它,您的用户应该可以工作


小智 7

这将为所有用户解决问题:

cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF
Run Code Online (Sandbox Code Playgroud)


Phi*_*hil 3

我在 KDE 上发现了一些对我来说非常有用的东西

kdesu -u username /path/to/program
Run Code Online (Sandbox Code Playgroud)