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

我的常规用户帐户,比方说,user1。 我为一些x应用程序创build了单独的user2,我想以user1的身份login到x时运行它,但会阻止它对user1数据进行读/写访问。 我以为我可以使用xauth和sudo / su从user1 user2运行此应用程序。 我如何做到这一点? 我不知道如何configurationxauth。

要有select地使用xauth ,请在user1运行:

xauth list|grep `uname -n` 

这会为您打印hex授权条目。 你可以有不同的显示与这些主机相关联。

当user2设置您的显示器(假设默认情况下):

 DISPLAY=:0; export DISPLAY 

然后运行:

 xauth add $DISPLAY . hexkey 

注意$ DISPLAY之后和hexkey之前的点。

当不再需要访问时,用户2可以运行:

 xauth remove $DISPLAY 

假设Debian或Ubuntu(在Red Hat / SUSE上应该是类似的)。

 sudo apt-get install sux sux user -c 'command' 

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

第一:不要使用xhost + ,这是相当不安全的(全部允许/拒绝)。

而是使用X-Cookie机制:

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

或者,如果你安装了sux ,使用它(参见ehempel的答案)。

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

笔记:

  • 根据您的文件权限,您可能需要以其他方式复制.Xauthority。
  • 您可以使用xauth来提取和复制授权密钥(请参阅Randall的答案),而不是复制.Xauthority 。 如果您在.Xauthority文件中有多个键,则更具select性; 否则这是一个味道的问题。

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

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

我在KDE上发现了一些非常适合我的东西

 kdesu -u username /path/to/program 

作为根:

 xhost local:yourusername 

你的用户名是你的用户名:)

然后,如果你的用户的xclock应该工作,如果它已经安装了,那么就这样做

这些只是黑客:

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

上面的sleske,我认为是适当的解决办法。

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

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

会话可选pam_xauth.so systemuser = 1

那么你可以用su切换没有 – :

su user2

并以graphics方式运行应用程序。

对于GNOME(真的没有任何桌面环境,我只用icewm) gksu

 gksu -u username program