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


10

my ~/.bashrcには$ EDITORをgvimに設定する部分があります。Xウィンドウにいるときは問題なく動作します。ただし、自分のワークステーションに(別のワークステーションから)sshすると、gvimが「ディスプレイを開けません」というメッセージを表示し始めます。

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

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

回答:


11

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

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

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

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi

if [[ $DISPLAY ]]以下のためのダブルブラケット愛好家 ...
セルジュStroobandt

7

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

だからあなたはこれを使うことができます:

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

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

走る

ssh -X yourworkstation

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


3

これを.bashrcに入れてください:

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

1

これはあなたの質問への回答ではありませんが、X *を実行している1つのワークステーションから別のワークステーションにsshしている場合、sshを使用してX転送を設定すれば、実際に gvim 使用できることを指摘すると役立つと思います。ウィンドウ情報はネットワーク経由で送信され、gvimはローカルで実行する場合と同様にポップアップします。

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

Host *
   ForwardX11 yes 

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

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


0

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


0

不正ではあるが空ではないDISPLAY変数については賢いので、RunningXを使用したgaryjohnの回答が好きでした。

しかし..私はもっと良くしたいと思います。私はスクリーンセッションをよく使用します。自宅でスクリーンセッションを開始する場合があります。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もインストールしていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.