Evince 無法啟動,因為它無法讀取 .Xauthority
我通過 SSH 遠端登錄,X 轉發到執行 Ubuntu 10.04 (lucid) 的機器。大多數 X11 應用程序(例如 xterm、gnome-terminal)都可以正常工作。但是 Evince 沒有啟動。
~/.Xauthority
即使文件存在,它似乎也無法讀取,並且顯然是可讀的(它具有正確的權限,其他應用程序讀取它就好了)。$ evince X11 connection rejected because of wrong authentication. Cannot parse arguments: Cannot open display: $ echo DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY DISPLAY=localhost:10.0 XAUTHORITY= $ strace evince … access("/home/gilles/.Xauthority", R_OK) = 0 open("/home/gilles/.Xauthority", O_RDONLY) = -1 EACCES (Permission denied) … $ ls -l ~/.Xauthority -rw------- 1 gilles gilles 496 Jul 5 13:34 /home/gilles/.Xauthority
Evince 有什麼特別之處以至於它無法閱讀
~/.Xauthority
?我怎樣才能讓它開始?
TL,DR:這是 Apparmor 的錯,並且由於我的主目錄在外部
/home
。在 Ubuntu 10.04 的預設安裝下,apparmor包作為ubuntu-standard包的間接 Recommends 級依賴項被引入。系統日誌 (
/var/log/syslog
) 顯示 Apparmor 拒絕 Evince 的讀取嘗試~/.Xauthority
:
Jul 5 17:58:31 darkstar kernel: [15994724.481599] type=1503 audit(13415 03911.542:168): operation="open" pid=9806 parent=9805 profile="/usr/bin/evince" requested_mask="r::" denied_mask="r::" fsuid=1001 ouid=1001 name="/elsewhere/home/gilles/.Xauthority"
Apparmor (in
/etc/apparmor.d/usr.bin.evince
) 的預設 Evince 配置非常寬鬆:它允許在所有主目錄下進行任意讀取和寫入。但是,我在這台機器上的主目錄是指向非標準位置的符號連結,該位置未在預設 AppArmor 配置中列出。下允許訪問/home
,但我的主目錄的真實位置是/elsewhere/home/gilles
,所以訪問被拒絕。可能受此問題影響的其他應用程序包括:
- Firefox,但預設情況下禁用其配置文件(通過符號連結的存在
/etc/apparmor.d/disable/usr.bin.firefox -> /etc/apparmor.d/usr.bin.firefox
)。- CUPS PDF 列印;我還沒有測試過,但我希望它無法寫入
我的解決方法是編輯
/etc/apparmor.d/tunables/home.d/local
並添加該行@{HOMEDIRS}+=/elsewhere/home/
辨識主目錄的非標準位置(請注意,最後
/
的位置很重要;請參閱 中的註釋/etc/apparmor.d/tunables/home.d/ubuntu
),然後執行/etc/init.d/apparmor reload
以更新 Apparmor 設置。如果您沒有管理員權限並且系統管理員沒有響應,您可以將
evince
二進製文件複製到其他位置,例如~/bin
,它不會被 Apparmor 策略覆蓋(因此您可以啟動它,但是將無法獲得 Apparmor 提供的非常有限的額外安全性)。此問題已報告為Ubuntu 錯誤 #447292。該解決方案處理某些使用者的主目錄列在
/etc/passwd
outside中的/home
情況,但不適用於我的情況,例如/home/gilles
符號連結。