bashrc: come sapere se X Window è disponibile o no?


10

C'è una parte in my ~/.bashrc, che imposta $ EDITOR su gvim. Funziona bene quando sono in X Window. Tuttavia, se ssh alla mia workstation (da un'altra workstation) gvim inizia a lamentarsi "impossibile aprire il display".

Quindi vorrei mettere una ifdichiarazione in bashrc, che se X window è disponibile, allora usa gvim, altrimenti lascia che sia vim.

Come potrei farlo?

Risposte:


11

Un modo per eseguire ciò verifica l'esistenza della variabile di ambiente DISPLAY:

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

In alcuni casi, DISPLAY verrà impostato anche se gvim non sarà in grado di contattare il server X. In questi casi, utilizzare il programma RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi

if [[ $DISPLAY ]]per gli appassionati della doppia parentesi
Serge Stroobandt,

7

La $DISPLAYvariabile d'ambiente dovrebbe essere impostata su qualcosa se ci si trova in X e non impostata se non si è collegati a un display.

Quindi potresti usare questo:

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

Ma c'è un'altra soluzione. Si chiama ssh X forwarding.

Correre

ssh -X yourworkstation

quindi puoi eseguire VIM su una macchina in cui sei ssh, e verrà visualizzato sulla macchina su cui stai eseguendo X.


3

Metti questo nel tuo .bashrc:

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

1

Anche se questo non è una risposta alla tua domanda, ho pensato che forse utile ricordare che se stai sshing da una postazione di lavoro in esecuzione X * a un'altra workstation, è effettivamente possibile utilizzare gvim se l'inoltro si imposta X con ssh. Le informazioni sulla finestra verranno semplicemente inviate sulla rete e gvim apparirà come se fosse eseguito localmente.

Aggiungi quanto segue in ~ / .ssh / config

Host *
   ForwardX11 yes 

Ora sarai in grado di eseguire gvim.

Se la tua workstation di origine è Windows e non esegui X, in realtà PUOI avviare un server X localmente usando Cygwin. Una volta configurato, è possibile configurare i client ssh più diffusi come PuTTy per eseguire l'inoltro X11, quindi gvim comparirà in quella che sembra essere una finestra nativa decorata da Windows.


0

Basta controllare una delle variabili d'ambiente che Xorg imposta all'avvio, come XLOCAL che contiene informazioni sull'attuale sessione X11.


0

Mi è piaciuta la risposta di garyjohn utilizzando RunningX perché è intelligente per le variabili DISPLAY cattive ma non vuote.

Ma .. vorrei andare ancora meglio. Uso spesso sessioni di schermate. Potrei iniziare una sessione di schermate a casa, DISPLAY è definito. Quindi, arrivo da altrove, DISPLAY è ancora definito e in realtà visualizza ... a casa! Quindi .. allora esporterò $ DISPLAY = '. Questo va bene, ma dato che quella risposta è già stata verificata e ha trovato una variabile DISPLAY valida al momento .bashrc inizialmente eseguito EDITOR sarebbe comunque impostato su gvim.

Sono venuto qui alla ricerca di una soluzione a un problema simile, volevo usare yelp per la navigazione nella manpage di X-GUI ma scendevo automaticamente al comando man tradizionale quando non usavo X. Sulla base di ciò che ho letto qui, ho trovato questo:

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

Sto pensando che per il problema EDITOR si potrebbe fare qualcosa del genere:

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

L'avrei appena pubblicato senza la lunga storia ma non l'ho provato. Mi considero un principiante timido. Ho testato il mio "comando uomo", che funziona! Sto usando Emacs per il mio editor, fa il proprio controllo per X. Non ho nemmeno installato gvim.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.