![GUI 在未定义 $XAUTHORITY 的情况下运行,但不适用于 root](https://linux22.com/image/35227/GUI%20%E5%9C%A8%E6%9C%AA%E5%AE%9A%E4%B9%89%20%24XAUTHORITY%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E8%BF%90%E8%A1%8C%EF%BC%8C%E4%BD%86%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%20root.png)
我使用 CentOS 6,使用 Xfce 作为桌面环境,并已切换xdm
为gdm
显示管理器。
然而,进行此更改后,我观察到一个非常奇怪的现象:图形应用程序可以在没有$XAUTHORITY
定义的情况下运行:
$ echo $DISPLAY
:0.0
$ echo $XAUTHORITY
$ zenity --error --text ".........."
$ echo $?
0
然而,当我 sudo 时:
$ sudo -s
[sudo] password for xxxxxx:
# echo $DISPLAY
:0.0
# echo $XAUTHORITY
# zenity --error --text "........."
No protocol specified
(zenity:3793): Gtk-WARNING **: cannot open display: :0.0
我认为 和 都$DISPLAY
需要$XAUTHORITY
定义才能运行 GUI,但这并没有发生。有人知道发生了什么事吗?
编辑:
评论中建议检查和使用 的值DBUS_SESSION_ADDRESS_VALUE
,但是:
$ echo $DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-ypE50rEtQu,guid=7e2bc970a8ca43af3f7bb01000000255
$ echo $DISPLAY
:0.0
$ sudo -s
# export DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-ypE50rEtQu,guid=7e2bc970a8ca43af3f7bb01000000255"
# echo $DISPLAY
:0.0
# echo $DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-ypE50rEtQu,guid=7e2bc970a8ca43af3f7bb01000000255
# zenity --error --text "..........."
No protocol specified
(zenity:16931): Gtk-WARNING **: cannot open display: :0.0
答案1
这X(7) 概述手册页(顺便推荐阅读整篇文章)告诉我们:
Xlib从中提取授权数据的文件可以使用环境变量XAUTHORITY指定,默认为主目录中的文件.Xauthority。
因此,如果您的授权文件位于常用位置,则 XAUTHORITY 不是强制性的。 X 客户端在没有它的情况下工作是完全正常的。切换用户可能会破坏它,因为主目录不同,设置环境变量在这种情况下会有所帮助。