無效的 MIT-MAGIC-COOKIE-1 keyxhost:無法打開顯示“:0”
每次我打開一個新控制台時,都會顯示錯誤資訊
xxd ~/.Xauthority 00000000: 0100 0006 6465 6269 616e 0002 3130 0012 ....debian..10.. 00000010: 4d49 542d 4d41 4749 432d 434f 4f4b 4945 MIT-MAGIC-COOKIE 00000020: 2d31 0010 1fba cba8 1f6a f8b6 e00d 8c1a -1.......j...... 00000030: c7cb 7d86 0100 0006 6465 6269 616e 0001 ..}.....debian.. 00000040: 3000 124d 4954 2d4d 4147 4943 2d43 4f4f 0..MIT-MAGIC-COO 00000050: 4b49 452d 3100 1050 f7f6 b85b 77e1 49e4 KIE-1..P...[w.I. 00000060: a0c6 470d 7b11 a9 ..G.{..
如何解決?
Invalid MIT-MAGIC-COOKIE-1 keyxhost: unable to open display ":0"
這實際上是在同一行列印出的兩條錯誤消息:
Invalid MIT-MAGIC-COOKIE-1 key xhost: unable to open display ":0"
當您使用 X11 GUI 登錄時,該會話會自動獲得一個
DISPLAY
環境變數和一個特定於會話的訪問密鑰(儲存在環境變數~/.Xauthority
指定的文件中或文件中XAUTHORITY
)。控制台登錄與 GUI 登錄是分開的,因此控制台登錄會話不會自動獲得任何這些。
xhost
除非您首先有權訪問 GUI 會話,否則您不能使用它來配置 GUI 會話的訪問控制。當 GUI 會話結束並重新啟動 X11 伺服器時,會在 X11 伺服器端生成一個新的會話密鑰,這會自動使之前的密鑰失效。但是舊的會話密鑰可能會留在使用者的
.Xauthority
文件中。它將在下次 GUI 登錄期間自動替換。因此,文件中存在 MIT-MAGIC-COOKIE-1 密鑰.Xauthority
並不意味著它一定是目前密鑰。如果您執行
pgrep -a Xorg
,您可能會看到 X 伺服器程序的命令行參數類似於Xorg -nolisten tcp -auth <some path> <other options...>
. 該-auth
選項指定的路徑是目前伺服器端會話密鑰文件:如果您有 root 訪問權限,您可以使用 eg 查看它xauth -f <some path> list
並將其與您自己.Xauthority
文件的內容進行比較,最好使用xauth list
. 輸出將是這樣的一行或多行:debian/unix:0 MIT-MAGIC-COOKIE-1 <actual key in hexadecimal>
伺服器端密鑰文件應該總是正好有 1 行,但是如果您使用 SSH 連接和 X11 轉發,您自己的
.Xauthority
文件中可能有其他行,以 egdebian/unix:10
或更高的顯示數字開頭。如果文件的
xauth list
輸出.Xauthority
包含與 顯示的單行完全匹配的行xauth -f <some path> list
,則您將能夠訪問 X 伺服器;如果沒有匹配的行,X 伺服器將拒絕您的請求並Invalid MIT-MAGIC-COOKIE-1 key
報錯。我猜您的 或任何類似的登錄腳本中可能有 一個命令
xhost
。您應該將它包裝在一個測試中,該測試將在執行之前測試變數的存在,而不是例如:~/.profile``~/.bashrc``$DISPLAY``xhost
xhost +local:
你會有例如
if [ "$DISPLAY" != "" ] then xhost +local: fi
但是,如果使用該
~/.Xauthority
文件的預設位置,並且您這樣做只是為了在用於獲取 root 訪問權限時允許使用 GUI 管理工具sudo
,則可能有一種更安全的方法。而不是添加xhost +local:
(= 允許每個人,例如 SSH 到同一主機訪問您的 GUI 會話),您可以添加類似這樣的內容到您的~/.bashrc
:if [ "$SUDO_USER" != "" ] && [ "$DISPLAY" != "" ] then export XAUTHORITY=$(grep "^${SUDO_USER}:" /etc/passwd | cut -d : -f 6)/.Xauthority fi
這不是放鬆 GUI 會話的安全性,而是使用 root 可以讀取所有內容的事實(因此,如果您的主目錄是使用選項導出的 NFS 掛載,它將不起作用
root_squash
)。當您使用sudo
時,它會將XAUTHORITY
變數設置為直接指向.Xauthority
您個人使用者帳戶主目錄中的文件。
sudo su -
(此外,如果您使用.代替,則此技巧不起作用sudo -i
,並將類似的片段添加到/root/.bashrc
or/root/.profile
。但在編輯這些文件時要小心:一個不幸的錯誤可能會使再次獲得工作的 root shell 變得非常困難。)