MIT-MAGIC-COOKIE-1 keyxhost 无效:无法打开显示“:0”

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.{..

如何修复它?

答案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$DISPLAYxhost

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

相关内容