web-dev-qa-db-ja.com

現在のセッションの$ DISPLAY変数を自動的に設定する方法

$ displayがlocalhost:0,0に設定されているのがわかります。vncサーバーで実行している場合、これは正しくない可能性があります。ログインスクリプトで自動的に設定する方法はありますか?

11
user130334

あなたはバッシュを使いますか?ホームディレクトリの.bashrcファイルに移動して変数を設定し、エクスポートします。

DISPLAY = localhost:0.0;ディスプレイのエクスポート

すべてのユーザーに対して/ etc/bashrcを使用する場合は、/ etc/bashrcを使用できます。

〜/ .bash_profileと/ etc/profileを調べることもできます

編集:

function get_xserver ()
{
    case $TERM in
       xterm )
            XSERVER=$(who am i | awk '{print $NF}' | tr -d ')''(' )    
            XSERVER=${XSERVER%%:*}
            ;;
        aterm | rxvt)           
            ;;
    esac  
}

if [ -z ${DISPLAY:=""} ]; then
    get_xserver
    if [[ -z ${XSERVER}  || ${XSERVER} == $(hostname) || \
      ${XSERVER} == "unix" ]]; then 
        DISPLAY=":0.0"          # Display on local Host.
    else
        DISPLAY=${XSERVER}:0.0  # Display on remote Host.
    fi
fi

export DISPLAY
9
Jonathan

これが私がたたき上げたものです。最後に起動した「gnome-session」プロセスの環境を検査します(VNCがセッション/ウィンドウマネージャーを起動すると、DISPLAYが正しく設定されます)。 「gnome-session」を、VNCサーバーが起動時に起動するプロセスの名前に置き換えます。

PID=`pgrep -n -u $USER gnome-session`
if [ -n "$PID" ]; then
    export DISPLAY=`awk 'BEGIN{FS="="; RS="\0"}  $1=="DISPLAY" {print $2; exit}' /proc/$PID/environ`
    echo "DISPLAY set to $DISPLAY"
else
    echo "Could not set DISPLAY"
fi
unset PID

それを.bashrcファイルにドロップできるだけです。

8
Nick

私はここで、私が解決した過去の問題に基づいて推測しています:

  • マシンBのvncサーバーに接続し、マシンAのVNCクライアントを使用してそれを表示している
  • マシンBでコンソール(xtermまたは同等のもの)を起動し、それを使用してマシンCに接続している
  • マシンCでXベースのアプリケーションを起動し、マシンBのVNCサーバーに表示させて、マシンAで表示できるようにします。

私は2つの解決策に終わりました。私の元のソリューションは、rshの使用に基づいていました。それ以来、ほとんどのサーバーにsshがインストールされているため、これが簡単になっています。

Rshを使用して、PerlでこのプロセスをガイドするマシンとOSとカスタムオプションの表をまとめました。 Bourne Shellは十分ではなく、SunまたはHPマシンにはbashがありませんでした(当時、AIXにはbashがありませんでした-AIX 5Lはまだリリースされていませんでした)。ほとんどのLinuxボックスにはpdkshがインストールされていないため、Korn Shellもあまり選択肢になりませんでした。しかし、これらの制限に直面しない場合は、kshまたはbashでアイデアを実装できると思います。

とにかく、私は基本的に 'rsh $ machine -l $ user "$ cmd"'を実行します。$ machineはもちろん、私がログインしているマシン、$ userでした(同様に明白です) "私は完全に理解していない理由でいくつかのマシンに複数のルートがあるのでこれにはいくつかの差異がありました)、そして$ cmdは基本的に" DISPLAY = $ DISPLAY xterm "でしたが、例えばkonsoleを起動している場合、$ cmdは「konsole --display = $ DISPLAY」。 $ DISPLAYはローカルで評価され(適切に設定されている場合)、rshを介して文字通り渡されないため、表示は常に正しく設定されます。

また、DISPLAYがすでに設定されている場合は、リセットDISPLAYのような愚かなことを誰も行わないようにする必要もあります。

今、私はただsshを使用し、サーバー(sshd_config)でX11Forwardingがyesに設定されていることを確認してから、マシンにsshし、Xコマンドで暗号化されたワイヤを通過させると、常にに戻ります適切な場所。

1
Tanktalus

Vncserverには、ディスプレイ番号を設定する設定ファイルがあります。これを自動的に行うには、1つの解決策は、このファイルを解析し、数値を抽出して正しく設定することです。より単純な(より良い)方法は、この表示番号を構成スクリプトで設定し、VNCサーバーの構成とinitスクリプトの両方で使用することです。

1
neuro

ログインしたら、正しい$ DISPLAYをエクスポートするようにvncクライアントに指示する必要があります。その方法は、おそらくvncクライアントによって異なります。

0
Nifle