it-swarm.cn

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

假设我的普通用户帐户是user1。我为某些x应用程序创建了单独的user2,我希望以user1身份登录到x应用程序中运行该应用程序,但是这样做会阻止它对user1数据进行读/写访问。我以为我可以使用xauth和Sudo/su从user1到user2来运行此应用程序。我该怎么做呢?我不确定如何配置xauth。

48
Phil

我发现在KDE上最适合我的东西

kdesu -u username /path/to/program
2
Phil

要将xauth (选择性地)作为user1使用,请运行:

xauth list|grep `uname -n`

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

以user2设置您的显示(假定默认情况):

DISPLAY=:0; export DISPLAY

然后运行:

xauth add $DISPLAY . hexkey

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

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

xauth remove $DISPLAY
33
Randall

我放入了.zshrcexport XAUTHORITY=~/.Xauthority,现在我可以执行Sudo -E xcommand。经过大量的谷歌搜索,对我来说这是最简单的方法。

12
kfl62

第一:不要使用xhost +,这很不安全(允许/拒绝空白)。

而是使用X-Cookie机制:

su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority 
export DISPLAY=:0

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

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

笔记:

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

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

Sudo apt-get install sux
sux user -c 'command'
9
ehempel

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

cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF
7
JMS

作为根:

xhost local:yourusername

其中yourusername是您的用户名:)

然后执行su,因为您的用户xclock应该已安装

4
ACV

这些只是黑客:

  • xauth +(不安全)
  • ssh -X user2 @ localhost(难看)

我认为上述sleske有适当的解决方案。

2
alex

在suse/opensuse中使用这种方式: http://www.novell.com/support/kb/doc.php?id=700374

只需修改/etc/pam.d/su,添加选项(粗体):

会话可选pam_xauth.sosystemuser = 1

然后您可以在不带-的情况下使用su进行切换:

苏用户2

并以图形方式运行该应用程序。

0
pojem