web-dev-qa-db-ja.com

bashrc:Xウィンドウが利用可能かどうかを知る方法は?

私の~/.bashrcには、$ EDITORをgvimに設定する部分があります。 Xウィンドウを表示しているときは正常に動作します。しかし、(別のワークステーションから)自分のワークステーションにSSHで接続すると、gvimは「ディスプレイを開けません」と文句を言い始めます。

したがって、bashrcにifステートメントを入れたいと思います。Xウィンドウが使用可能な場合はgvimを使用し、そうでない場合はvimにします。

どうすればそれを達成できますか?

10
Ryan

これを行う1つの方法は、DISPLAY環境変数の存在をテストします。

if [ "$DISPLAY" ]
then
    EDITOR=gvim
else
    EDITOR=vim
fi

GvimがXサーバーに接続できない場合でも、DISPLAYが設定される場合があります。そのような場合は、 RunningX プログラムを使用してください。

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi
11
garyjohn

$DISPLAY環境変数は、Xを使用している場合は何かに設定し、ディスプレイに接続していない場合は設定を解除する必要があります。

したがって、これを使用できます:

if [ -n "$DISPLAY" ]; then
    alias vim='gvim'
else
    alias vim='vim'
fi

しかし、別の解決策があります。これはsshX転送と呼ばれます。

実行

ssh -X yourworkstation

次に、sshを実行しているマシンでvimを実行すると、Xを実行しているマシンに表示されます。

7
Mikel

これを.bashrcに入れます:

if [ -z "${DISPLAY:-}" ]; then
  EDITOR='vim'
else
  EDITOR='gvim'
fi
3
cahuk

これはあなたの質問に対する答えではありませんが、X *を実行している1つのワークステーションから別のワークステーションにSSHで接続する場合、実際にはcan Xをセットアップする場合はgvimを使用することを指摘しておくと便利だと思います。 sshで転送します。ウィンドウ情報はネットワーク経由で送信され、gvimはローカルで実行された場合と同じようにポップアップ表示されます。

〜/ .ssh/configに以下を追加します

Host *
   ForwardX11 yes 

これで、gvimを実行できるようになります。

OriginのワークステーションがWindowsで、Xを実行していない場合、実際にはCygwinを使用してローカルでXサーバーを起動できます。セットアップが完了すると、PuTTYなどの一般的なsshクライアントを構成してX11転送を実行できます。そうすると、ネイティブのウィンドウで装飾されたウィンドウのように見えるものにgvimがポップアップ表示されます。

1
mkomitee

私はRunningXを使用したgaryjohnの答えが好きでした。それは、悪いが空ではないDISPLAY変数について賢いからです。

でも..もっと上手く行きたいです。私はよくスクリーンセッションを使用します。自宅でスクリーンセッションを開始する可能性があります。DISPLAYが定義されています。次に、他の場所からSSHで接続しますが、DISPLAYはまだ定義されており、実際に表示されます...自宅で!だから..それから私は '$ DISPLAY ='をエクスポートします。これは問題ありませんが、その回答はすでにチェックされており、.bashrcが最初に実行されたときに有効なDISPLAY変数が見つかったため、EDITORは引き続きgvimに設定されます。

同様の問題の解決策を探してここに来ました。X-GUIのマンページブラウジングにYelpを使用したかったのですが、Xを使用しない場合は自動的に従来のmanコマンドにドロップダウンしました。ここで読んだ内容に基づいて、次のことを思いつきました。

man () {
    if RunningX
    then
        Yelp "man:$@";
    else
        /usr/bin/man "$@";
    fi
}

EDITORの問題については、次のようなことができると思います。

EDITOR=vim
vim () {
    if RunningX
    then
        gvim "$@";
    else
        vim "$@";
    fi
}

私はそれを長い話なしで投稿したでしょうが、私はそれをテストしていません。私は自分自身をbash初心者だと思っています。私は自分の「manコマンド」をテストしました、それはうまくいきます!私はエディターにemacsを使用していますが、Xの独自のチェックを行います。gvimもインストールしていません。

0
user3042526

現在のX11セッションに関する情報を含むXLOCALなど、Xorgが起動時に設定する環境変数の1つを確認するだけです。

0
exine