ターミナルウィンドウでリモートで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]のアドバイスに従って試しました。次のように問題を解決しましたが、まだ問題は解決されていません。
- DISPLAY環境変数が正しく設定されているようです
env | grep DISPLAY
。DISPLAY=localhost:11.0
- この行は
export DISPLAY=desktop:0.
エラーを発生させますexport: Command not found
。 - 実行する前の行が
xhost +local:
提供されますInvalid MIT-MAGIC-COOKIE-1 keyxhost: unable to open display "localhost:11.0
。 - 私も試して
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
- 私も試して
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ポップアップウィンドウが開き(黒)、保存されたファイル(45kb)は(空白)ページです。 Google検索による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接続を確立するときは、リモート側で2つのことが必要です。
- リモートデバイスは、
sshd
X11プロキシ(通常はローカル接続のみを許可)を最初の無料TCPポート番号6010以上に設定し、DISPLAY変数をに設定しますlocalhost:<port number - 6000>
。これは、実際のディスプレイへの接続を見つける場所をリモートX11アプリケーションに通知します。 - リモートデバイスは
sshd
X11アプリケーションで使用するMIT-MAGIC-COOKIEを作成し、クライアントがそれを使用できるようにファイルに配置します(通常はリモートxauth
システムでコマンドを使用して)。このファイルのデフォルトパスですが、~/.Xauthority
環境変数にフルパス名を設定している場合は、カスタムXAUTHORITY
パスを使用することもできます。 X11 クライアントがこのファイルを検索またはアクセスできない場合、接続は失敗します。接続ごとに新しいCookieを作成します。古いCookieファイルは機能しません。
XQuartzのないMacシステムでは、X11アプリケーションのエラーメッセージが多少誤解を招く可能性があるこの種の問題が発生する可能性があります。アプリケーションはDISPLAY変数を読み取り、その変数の値に基づいてローカルTCPポート6011に正常に接続し、Xauthorityファイルを見つけて実際のX11ディスプレイサーバーと思われるサーバーにCookieを提供しました(実際にはリモートsshd
X11転送プロキシです)。 )。この時点で、リモート側はsshd
暗号化されたトンネルを介して最初のX11要求をローカルシステムに転送し、ローカル側には実際のXQuartzディスプレイサーバーがないことがわかります。
AInvalid MIT-MAGIC-COOKIE
一般的なエラーメッセージにはエラーコードはありません。
いくつかのトラブルシューティング手順について:
わかりました
export DISPLAY=desktop:0
。エラーが発生しましたexport: Command not found
これは、リモートユーザーアカウントで設定されたシェルがsh
POSIX構文を使用するシェルではない可能性があることを示します。ただし、この方法で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プログラムを実行する前にリモートホストで他のユーザーアカウントを使用またはsu
切り替える必要がある場合にsudo
便利ですが、それは許可されますみんな環境変数で識別されたポート/ソケットDISPLAY
からディスプレイサーバーにアクセスできる人。必ずしも必要な場合でなければ、これをやりたくありません。最初に有効なX11ディスプレイ接続がない場合、これはまったく役に立ちません。
私も試しました
ps aux | grep bin/X | grep -v grep
これは、リモートシステムで実行されているX11ディスプレイサーバーがあることを示します。私自身表示 - リモートX11アプリケーションはそれを表示する必要はありません。権限が付与されると、イメージウィンドウがポップアップ表示されます。リモートコンピュータディスプレイが離れすぎて便利ではない可能性があります。