每次我打开新控制台时,都会显示错误信息
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.{..
如何修复它?
答案1
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 行,但如果您使用了带有 X11 转发的 SSH 连接,则您自己的文件中可能会有其他行,以 例如或更高的显示数字.Xauthority
开头。debian/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
但如果使用文件的默认位置,并且您正在执行此操作仅有的为了允许在使用时使用 GUI 管理工具sudo
来获取 root 访问权限,可能有一种更安全的方法。您可以xhost +local:
将如下内容添加到您的~/.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 shell。)/root/.bashrc
/root/.profile