MIT-MAGIC-COOKIE-1 key% WIDGET_CONTROL 无效:无法连接到 X Windows 显示:localhost:11.0

MIT-MAGIC-COOKIE-1 key% WIDGET_CONTROL 无效:无法连接到 X Windows 显示:localhost:11.0

我正在尝试在终端窗口中远程运行 IDL。我想从远程生成 png 文件中的图像,而不在终端中显示弹出窗口(由于某些原因,我不知道弹出窗口图在我的计算机中不能正常工作)。我一直在使用 ssh -X 和 ssh -Y 并收到相同的错误。脚本如下

set_plot,'ps'
device,/color,bits=8,xs=80,ys=60
device,filename=‘test.eps'

loadct, 4
!p.charsize = 1.2

!p.color = 120

lfile = FILE_LINES(filename1)

openr,1,filename1
ar1=fltarr(6,lfile)
readf,1,ar1
close,1

Xcoord=ar1[0,*]     
Ycoord=ar1[1,*]     

h2d=hist_2d(Xcoord,Ycoord,bin1=5, bin2=5) 
h2d = CONGRID(h2d, MAX(Xcoord), MAX(Ycoord))
g0=image(h2d)

device,/close

end

当我通过启动此 script.pro 时,我在下面复制的.r script行中收到错误 g0=image(h2d)

% Compiled module: $MAIN$.
% LOADCT: Loading table BLUE/GREEN/RED/YELLOW
% Compiled module: HIST_2D.
Invalid MIT-MAGIC-COOKIE-1 key% WIDGET_CONTROL: Unable to connect to X Windows display: localhost:11.0
% IMAGE: WIDGET_CONTROL: Unable to establish X Connection.
% Execution halted at: $MAIN$             42 /home/script.pro

我相信这条线 %Invalid MIT-MAGIC-COOKIE-1 key% WIDGET_CONTROL: Unable to connect to X Windows display: localhost:11.0 所指向的问题与该线所指向的问题不同 % IMAGE: WIDGET_CONTROL: Unable to establish X Connection

遵循(类似的 Stackexchange 问题)[https://unix.stackexchange.com/questions/199891/invalid-mit-magic-cookie-1-key-when-trying-to-run-program-remotely] 的建议,我尝试按照以下方式进行故障排除,但尚未解决问题:

  1. DISPLAY 环境变量似乎设置正确:env | grep DISPLAY给出DISPLAY=localhost:11.0
  2. 该行export DISPLAY=desktop:0.给出错误export: Command not found
  3. 运行之前的行xhost +local:给出了Invalid MIT-MAGIC-COOKIE-1 keyxhost: unable to open display "localhost:11.0.
  4. 我也尝试过ps aux | grep bin/X | grep -v grep并收到
root      1745  0.0  0.1 323536 22172 tty1     Ssl+ Feb06   1:43 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-DUUgHB/database -seat seat0 -nolisten tcp vt1
  1. 我也尝试过ps aux | grep /Xorg | grep -v grep并收到
root       758  0.0  0.0 225860  2872 ?        Ss   Feb06   0:00 /usr/bin/abrt-watch-log -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg -xD

当我尝试从另一台计算机运行相同的脚本(通过终端窗口再次连接到同一台远程计算机)时,我没有收到该行 %Invalid MIT-MAGIC-COOKIE-1 key% WIDGET_CONTROL: Unable to connect to X Windows display: localhost:11.0,但仍然收到% IMAGE: WIDGET_CONTROL: Unable to establish X Connection.

所以我认为这MIT-MAGIC条线是我的计算机的可视化问题,但widget_control无论如何我无法调试该错误。如果我至少能解决小部件问题,我也许可以在另一台机器上生成绘图。谢谢。

非常感谢您的详尽解释,telcoM。现在我更清楚了一些事情。我已在 Mac 上重新安装了 XQuartz(XQuartz 2.7.11)。 MIT-MAGIC-COOKIE 上的错误似乎已经消失,但我使用相同的脚本收到一个与 IDL 库相关的错误(我认为执行在与之前相同的行,即 image 命令):

% Compiled module: $MAIN$. 
% LOADCT: Loading table BLUE/GREEN/RED/YELLOW 
% Compiled module: HIST_2D. 
libGL error: No matching fbConfigs or visuals found 
libGL error: failed to load driver: swrast 
% Loaded DLM: PNG. 
% WIDGET_EVENT: Failure to acquire window rendering context. 
% IMAGE: WIDGET_EVENT: Unable to acquire device context. 
% Execution halted at: $MAIN$

Idl 弹出窗口打开(黑色),保存的文件 (45 kb) 是一个(空白)页面。谷歌搜索让我找到了https://www.l3harrisgeospatial.com/Support/Forums/aft/4922但我无法访问 IDL 库。我应该要求系统管理员更改 IDL 首选项吗?

答案1

为了能够显示 X11 图形,Mac 需要有X石英安装。这是X11显示服务器:有效地,本地和远程 X11 应用程序可以在其上绘制其显示窗口的画布。 Apple 已对其进行了设置,以便 Mac SSH 将设置 X11 转发,并且如果 XQuartz 在需要时尚未运行,则通常会自动启动。

XQuartz 曾经是 MacOS 的一部分,但现在是一个单独的开源项目。

当建立具有 X11 转发的 SSH 连接时,远程端应该发生两件事:

  1. 远程sshd将设置一个 X11 代理(通常只允许本地连接)到第一个空闲 TCP 端口号 6010 或以上,并将 DISPLAY 变量设置为localhost:<port number - 6000>。这告诉远程 X11 应用程序在哪里可以找到与实际显示器的连接。
  2. 远程sshd将生成一个 MIT-MAGIC-COOKIE 供 X11 应用程序使用,并将其放置到一个文件中以允许客户端使用它(通常通过xauth在远程系统上使用命令)。该文件的默认路径是~/.Xauthority,但如果将完整路径名也设置到XAUTHORITY环境变量中,则可以使用自定义路径。如果 X11 客户端无法找到或访问此文件,它将无法连接。为每个连接生成一个新的 cookie:旧的 cookie 文件将不起作用。

在没有 XQuartz 的 Mac 系统上,可能会出现此类问题,其中 X11 应用程序的错误消息可能有点误导。应用程序已读取 DISPLAY 变量并根据该变量的值成功连接到本地 TCP 端口 6011,并找到 Xauthority 文件并将 cookie 呈现给它认为是真正的 X11 显示服务器(但实际上是远程sshd的X11 转发代理)。此时,远程端sshd通过加密隧道将第一个 X11 请求转发到本地系统,本地端发现实际的 XQuartz 显示服务器...不在那里。

X11 协议没有错误代码可以有效地表示“抱歉,我不是实际的服务器;我只是一个代理,一个中间人。实际的服务器似乎没有响应。”由于第一次尝试使用 cookie 时会检测到错误,Invalid MIT-MAGIC-COOKIE因此会生成一条通用错误消息。

关于一些故障排除步骤:

export DISPLAY=desktop:0。给出错误export: Command not found

这表明为远程用户帐户配置的 shell 可能不是使用 POSIXsh语法的 shell。但是以这种方式设置 DISPLAY 环境变量意味着跳过 SSH 隧道并告诉 X11 应用程序在主机上的端口 6000 中与 X11 显示服务器建立直接的未加密 TCP 连接desktop这不安全许多现代 X11 显示服务器根本不会侦听 TCP 连接,或者至少只会侦听来自本地系统的连接。通过采取特殊步骤,可以使这种不安全的遗留方法发挥作用,但是你不想那样做。

运行之前的行xhost +local:给出了Invalid MIT-MAGIC-COOKIE-1 keyxhost: unable to open display "localhost:11.0.

xhost仅当您已与 X11 显示服务器建立有效连接时才能使用该命令。它可以用于为一个用户“打开一扇门”,让其他用户连接到同一台显示器,如果您需要在运行 GUI 程序之前在远程主机上使用susudo切换到另一个用户帐户,这可能很有用,但它允许每个人谁可以访问环境变量标识的端口/套接字DISPLAY来访问您的显示服务器。除非绝对必要,否则你不想这样做,如果您一开始就没有有效的 X11 显示连接,那么这对您根本没有帮助。

我也尝试过ps aux | grep bin/X | grep -v grep

这表明有一个 X11 显示服务器正在为远程系统运行自己的显示 - 远程 X11 应用程序不需要将其显示给您。如果您有使用它的授权,您的图像窗口将弹出到远程计算机的显示屏,可能离您太远而无用。

相关内容