X11

GUI 在未定義 $XAUTHORITY 的情況下執行,但不適用於 root

  • December 24, 2014

我正在使用 CentOS 6,將 Xfce 作為桌面環境,並已切換xdmgdm顯示管理器。

但是,在進行此更改後,我發現了一個非常奇怪的現象:圖形應用程序可以在沒有$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

X (7)概述手冊頁(順便建議閱讀全文)告訴我們:

Xlib 從中提取授權數據的文件可以使用環境變數 XAUTHORITY 指定,預設為主目錄中的文件 .Xauthority。

所以不,如果您的授權文件位於通常的位置,則 XAUTHORITY 不是強制性的。X 客戶端在沒有它的情況下工作是完全正常的。切換使用者可能會破壞它,因為主目錄不同,在這種情況下設置環境變數會有所幫助。

引用自:https://unix.stackexchange.com/questions/175731