X11
GUI 在未定義 $XAUTHORITY 的情況下執行,但不適用於 root
我正在使用 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
X (7)概述手冊頁(順便建議閱讀全文)告訴我們:
Xlib 從中提取授權數據的文件可以使用環境變數 XAUTHORITY 指定,預設為主目錄中的文件 .Xauthority。
所以不,如果您的授權文件位於通常的位置,則 XAUTHORITY 不是強制性的。X 客戶端在沒有它的情況下工作是完全正常的。切換使用者可能會破壞它,因為主目錄不同,在這種情況下設置環境變數會有所幫助。