bashrc: woher weiß man, ob das X-Fenster verfügbar ist oder nicht?

10

Es gibt einen Teil in meinem ~/.bashrc, der $ EDITOR auf gvim setzt. Es funktioniert gut, wenn ich im X-Fenster bin. Wenn ich jedoch auf meine Workstation (von einer anderen Workstation) ssh, beschwert sich gvim "Anzeige kann nicht geöffnet werden".

Daher möchte ich eine ifAussage in bashrc setzen, dass wenn g verfügbar ist, gvim verwendet wird, andernfalls sei es vim.

Wie könnte ich das erreichen?

Ryan
quelle

Antworten:

11

Eine Möglichkeit, dies zu tun, testet die Existenz der Umgebungsvariablen DISPLAY:

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

In einigen Fällen wird DISPLAY eingestellt, obwohl Ihr gvim den X-Server nicht kontaktieren kann. Verwenden Sie in diesen Fällen das RunningX- Programm:

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi
Garyjohn
quelle
if [[ $DISPLAY ]]für die Doppelklammer-Liebhaber
Serge Stroobandt
7

Die $DISPLAYUmgebungsvariable sollte auf etwas gesetzt werden, wenn Sie sich in X befinden, und deaktiviert werden, wenn Sie nicht mit einer Anzeige verbunden sind.

Sie könnten also Folgendes verwenden:

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

Es gibt aber noch eine andere Lösung. Es heißt SSH X-Weiterleitung.

Lauf

ssh -X yourworkstation

Dann können Sie vim auf einem Computer ausführen, auf dem Sie ssh'd sind, und es wird auf dem Computer angezeigt, auf dem Sie X ausführen.

Mikel
quelle
3

Fügen Sie dies in Ihre .bashrc ein:

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

Zwar ist dies nicht eine Antwort auf Ihre Frage ist, dachte ich , es vielleicht nützlich , darauf hinweisen , dass , wenn Sie sshing von einem Arbeitsplatz läuft X auf eine andere Workstation *, die Sie tatsächlich können Gvim verwenden , wenn Sie Setup - X - Forwarding mit ssh. Die Fensterinformationen werden nur über das Netzwerk gesendet und gvim wird wie bei einer lokalen Ausführung angezeigt.

Fügen Sie Folgendes in ~ / .ssh / config hinzu

Host *
   ForwardX11 yes 

Jetzt können Sie einfach gvim ausführen.

Wenn Ihre Ursprungsarbeitsstation Windows ist und kein X ausführt, können Sie einen X-Server tatsächlich lokal mit Cygwin starten. Sobald dies eingerichtet ist, können Sie beliebte SSH-Clients wie PuTTy für die X11-Weiterleitung konfigurieren. Anschließend wird gvim in einem scheinbar nativen Fenster mit Windows-Dekor angezeigt.

mkomitee
quelle
0

Überprüfen Sie einfach eine der Umgebungsvariablen, die Xorg beim Start festlegt, z. B. XLOCAL, die Informationen zur aktuellen X11-Sitzung enthält.

exine
quelle
0

Ich mochte Garyjohns Antwort mit RunningX, da es klug ist, schlechte, aber nicht leere DISPLAY-Variablen zu verwenden.

Aber ... ich würde gerne einen besseren machen. Ich benutze oft Bildschirmsitzungen. Ich könnte zu Hause eine Bildschirmsitzung starten, DISPLAY ist definiert. Dann, wenn ich von woanders hereinkomme, ist DISPLAY immer noch definiert und wird tatsächlich angezeigt ... zu Hause! Also ... dann werde ich '$ DISPLAY = exportieren'. Dies ist in Ordnung, aber da diese Antwort bereits geprüft wurde und zum Zeitpunkt der ersten Ausführung von .bashrc eine gültige DISPLAY-Variable gefunden wurde, wäre EDITOR immer noch auf gvim gesetzt.

Ich bin hierher gekommen, um nach einer Lösung für ein ähnliches Problem zu suchen. Ich wollte yelp für das Durchsuchen von X-GUI-Manpages verwenden, aber automatisch zum traditionellen man-Befehl zurückkehren, wenn ich X nicht verwende. Basierend auf dem, was ich hier gelesen habe, habe ich Folgendes gefunden:

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

Ich denke, dass man für das EDITOR-Problem Folgendes tun könnte:

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

Ich hätte das ohne die lange Geschichte gepostet, aber ich habe es nicht getestet. Ich betrachte mich als Bash-Neuling. Ich habe meinen 'Mannbefehl' getestet, das funktioniert! Ich verwende Emacs für meinen Editor, es führt eine eigene Überprüfung für X durch. Ich habe nicht einmal gvim installiert.

user3042526
quelle