尝试远程运行程序时出现"Invalid MIT-MAGIC-COOKIE-1 key"错误。

我正在尝试以客户端-服务器模式运行一个应用程序(ParaView),其图形渲染是在远程(服务器)端完成的。我使用SSH作为连接服务器的方式,但不希望使用X转发,因为它会减慢渲染过程。 然而,每次我尝试在服务器的显示器上打开应用程序时,都会出现这样的错误提示:
Invalid MIT-MAGIC-COOKIE-1 keyError: cannot open display ':0'

我对这个问题进行了广泛的研究,并已经尝试了以下建议的步骤,但都没有成功:

  1. 使用 "xauth list" 命令获取本地主机显示器的 MIT-MAGIC-COOKIE-1 值。
  2. 通过 ssh 登录到远程主机。
  3. 在远程主机上使用 "export DISPLAY=:0" 命令。
  4. 在远程主机上使用 "xauth add" 命令,将远程主机的显示器的 cookie 值覆盖为本地主机的值。

我相信这是正确的步骤,只是我没有将正确的 cookie 传输到正确的显示器上。

再次强调,我希望能够使用 ssh 在远程计算机的显示器上打开应用程序。理想情况下,我希望整个过程都通过 xauth 完成,而不是使用 xhost,并且我不需要使用 X-forwarding。我可能遗漏了什么或者做错了什么?


2服务器的控制台上是否运行着X服务器?我不明白你希望程序的输出显示在哪里。你的步骤显然是错误的,因为你获取了本地主机的cookie,但却没有在本地主机上显示。如果远程机器上有一个正在运行的X服务器,并且你希望程序显示在那里,请参考http://unix.stackexchange.com/questions/10121/open-a-window-on-a-remote-x-display-why-cannot-open-display - Gilles 'SO- stop being evil'
11个回答

尝试一下
xhost +local: 
在运行之前。

2太好了,它起到了作用。谢谢,我觉得这是最简短的答案! - loved.by.Jesus
3$ xhost +local: xhost:无法打开显示器"desktop:0" - Mona Jalal
25这个命令做什么? - Moberg
2@Moberg:它禁用了身份验证控制。它允许任何用户在您的显示器上打开图形窗口。所以这不是您想一直做的事情!但当您知道您想以不同的用户身份运行某些图形应用程序时,这就是您需要做的事情。 - AlexC
5$ DISPLAY=:0 xhost +local: 返回 Invalid MIT-MAGIC-COOKIE-1 key - aaa

这个对我有用。所以我把答案留在这里。
 export DISPLAY=:1.0

对我有用!被这个错误困扰了很长时间。不过,你能解释一下它的意思吗? - Arun Kumar Nagarajan
51.0 其实是一个缩写,意思是“在本地主机显示1”。显示变量的格式为[主机]:<显示> [。屏幕]。主机指的是网络主机名,如果没有,则表示通过Unix域套接字连接到本地机器。每个主机可以有多个显示器,每个显示器可以有多个屏幕。屏幕现在已经不常用了,因为xinerama和现在的xrandr将多个屏幕合并成一个逻辑屏幕。来源:https://unix.stackexchange.com/a/16816 - PSN
谢谢,你刚帮助解决了我们(非IT机械工程师)困扰已久的问题。 - John Robinson

您所使用的 DISPLAY 值不正确:如果您不想使用 SSH X 转发,则 DISPLAY 必须指示您 X 服务器的 IP 地址(您想在其上显示程序的桌面)。在远程机器上运行以下命令:
export DISPLAY=desktop:0
desktop替换为您的本地主机名或IP地址。您可能还需要更改X服务器的配置以允许远程IP连接。

6这个忽略了XAUTHORITY问题,而这正是导致主题行中实际错误信息的原因。 - kiko

Invalid MIT-MAGIC-COOKIE-1 key 部分必须是一个单独的(非)错误。 在启动任何图形程序(甚至是 gitk)的正常工作情况下,我会遇到这个问题。

有人只是忘记以换行符结束它,所以假装它是一行独立的内容。


我所做的事情: 在我所工作的主机上:
xhost +<remotehost>  #name or ip of remote host
在远程主机上 在/etc/ssh/ssh_config中:
X11Forward Yes  # add line 
在/etc/ssh/sshd_config文件中。
X11DisplayOffset 10   # set display to 10 for ssh forwarding`
最后在外壳中:
export DISPLAY=localhost:10.0 
这样可以建立加密连接,使您的本地X服务器能够管理您调用的远程应用程序的图形,同时不向任何人开放,只对远程机器开放,并且双向都是100%加密的。当然,在更改配置文件后,您必须重新启动ssh服务器。 它还允许远程机器的本地用户在没有远程用户干扰或阻塞的情况下使用本地XWindows。应用程序在自己的窗口中启动,但响应本地键设置。

An error occurred:

marked(): input parameter is undefined or null
Please report this to https://github.com/markedjs/marked.
- undefined

对我来说,错误是:

Invalid MIT-MAGIC-COOKIE-1 keyxcb_connection_has_error() returned true
Invalid MIT-MAGIC-COOKIE-1 keyERROR: Unable to create GUI. Exiting
我尝试过处理 .Xauthority 文件,但是只隐藏了 "MIT cookie" 部分,而没有解决 xcb_connection 错误。最终,通过使用 @PSN 的解答 (export DISPLAY=:1.0),问题得以解决。 顺便提一下,我的操作系统是 Debian 9。

旧问题,但仍然发生在全新安装的Opensuse Leap 15.3上。 在我的情况下,我有一个空的/etc/hostname文件,并且已经填写了内容。
hostnamectl set-hostname mySysName
为了消除"Invalid MIT-MAGIC-COOKIE-1 key"的消息(使用YaST似乎更复杂 - 尚未尝试)

首先添加IP xhost +inet:172.26.95.35 运行xhost命令,不带参数生成/提交访问控制列表 xhost

这可能是你遇到以下错误的原因之一: 无效的MIT-MAGIC-COOKIE-1密钥错误:无法打开显示器::1 请确保你从与vncserver进程所属的用户相同的用户中运行任何GUI进程。 例如:
venkat@home-laptop:~/Downloads/$ ps -eaf | grep vnc
venkat    3504     1  0 Apr06 ?        00:09:52 /usr/bin/Xvnc :1 -auth /run/user/1000/gdm/Xauthority -desktop home-laptop:1 (venkat) -fp /usr/share/fonts/X11//misc,/usr/share/fonts/X11//Type1 -geometry 1024x768 -pn -rfbauth /home/venkat/.vnc/passwd -rfbport 5901 -rfbwait 30000
venkat   10595  8391  0 02:33 pts/5    00:00:00 grep --color=auto vnc
venkat@home-laptop:~/Downloads/$
venkat@home-laptop:~/Downloads/$
venkat@home-laptop:~/Downloads/$ sudo -i
root@home-laptop:~#
root@home-laptop:~# xclock
Invalid MIT-MAGIC-COOKIE-1 keyError: Can't open display: :1
root@home-laptop:~#
root@home-laptop:~#
root@home-laptop:~# exit
logout
venkat@home-laptop:~/Downloads/$
venkat@home-laptop:~/Downloads/$ xclock

尽可能从本地SSH终端以相同的用户身份同时运行VNC服务器和GUI进程。


我有一个设置,其中在Windows上运行的虚拟机中运行着Ubuntu。 我在Windows上运行VcXsrv,并从Virtbox内部启动一些东西。 一开始它运行得很好,然后我的xterms崩溃了,我无法再次启动它,并且出现了这个错误。 我的解决办法是在Windows上重新启动VcXsrv,但这次以管理员模式运行,我记不清以前是否需要这样做。 当我这样做时,它又开始正常工作了,我不再遇到这个错误。 我猜这可能是一个权限错误,但我还没有找出具体原因。