昔々、
DISPLAY=:0.0 totem /path/to/movie.avi
トーテムは私のラップトップからSSHに接続した後、movie.avi
私のデスクトップで再生されます。
これでエラーが発生します。
No protocol specified Cannot open display:
Debian スクイズは両方のコンピュータで安定した後に再インストールしましたが、設定が壊れているようです。
私はこれをグーグルしましたが、一生の間に何をすべきかわかりません。
(VLCには利用可能なHTTPインターフェイスがありますが、SSHほど便利ではありません。)
cronジョブで実行しようとすると同じ問題が発生します。
ベストアンサー1
(で適応Linux:ssh + screenを介してセッションを開始するとwmctrlがディスプレイを開くことができない)
表示と権限
XプログラムはXディスプレイに接続するために2つの情報が必要です。
表示する必要があるアドレスは通常、
:0
ローカルにログインするときのアドレス、またはリモート:10
で:11
ログインするときのアドレスです(ただし、この数はアクティブなX接続の数によって変わることがあります)。モニターのアドレスは通常、DISPLAY
環境変数に表示されます。パスワードを表示する必要があります。 X はパスワードが呼び出されたことを示します。魔法のクッキー。マジッククッキーは直接指定されません。常に
:42
「display has cookie」形式のレコード集であるX権限ファイルに保存されます123456
。 X権限ファイルは通常環境変数に表示されますXAUTHORITY
。設定しないと、$XAUTHORITY
プログラムはを使用します~/.Xauthority
。
デスクトップに表示されたウィンドウで作業しようとしています。あなたがデスクトップコンピュータを使用している唯一の人なら、あなたの表示名はおそらくです:0
。 X権限ファイルの場所を見つけるのは、Debian squeezeまたはUbuntu 10.04のgdm設定でランダムに生成された名前のファイルにあるため、難しいです。 (以前のバージョンのgdmでは~/.Xauthority
。
変数値の取得
DISPLAY
合計値を求めるいくつかの方法は次のとおりですXAUTHORITY
。
デスクトップでは、体系的に、おそらく自動的にログインスクリプトからスクリーンセッションを開始できます。
~/.profile
ただし、Xでログインしている場合にのみこれを実行してください。次からDISPLAY
始まる値に設定されていることをテストします。:
)).存在する~/.profile
:case $DISPLAY in :*) screen -S local -d -m;; esac
次に、SSHセッションで次のことを行います。
screen -d -r local
DISPLAY
合計値をXAUTHORITY
ファイルに保存し、その値を読み込むこともできます。存在する~/.profile
:case $DISPLAY in :*) export | grep -E '(^| )(DISPLAY|XAUTHORITY)=' >~/.local-display-setup.sh;; esac
SSHセッションで:
. ~/.local-display-setup.sh screen
実行中のプロセスの値を検出できます
DISPLAY
。XAUTHORITY
これは自動化するのがより困難です。使用したいモニターに接続されているプロセスのPIDを見つけたら、/proc/$pid/environ
(1)でeval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')
環境変数を取得する必要があります。
クッキーのコピー
他の方法(提案通りアローキング)は、sshセッションから値を取得しようとせずに$XAUTHORITY
XセッションにCookieをコピーすることです~/.Xauthority
。ログインするたびにクッキーが生成されるためです~/.Xauthority
。
リモート管理者がその内容を表示できるようにするNFSまたは他のネットワークファイルシステムを介してホームディレクトリにアクセスできる場合、セキュリティ上の問題が発生する可能性があります。 X TCP接続を有効にしない限り(DebianはデフォルトでX TCP接続を解除します)、何らかの方法でコンピュータに接続する必要があります。したがって、ほとんどの人にとってこれは適用されない(NFSなし)、問題にはなりません(X TCP接続なし)。
デスクトップXセッションにログインしたときにCookieをコピーするには、次の行を~/.xprofile
(~/.profile
またはログイン時に読む他のスクリプト)に追加します。
case $DISPLAY:$XAUTHORITY in
:*:?*)
# DISPLAY is set and points to a local display, and XAUTHORITY is
# set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac
1原則として、正しい引用符が不足していますが、この特別な場合には$DISPLAY
シェルメタ$XAUTHORITY
文字は含まれません。