bashrc: jak się dowiedzieć, czy okno X jest dostępne czy nie?

10

Jest moja część ~/.bashrc, która ustawia $ EDITOR na gvim. Działa dobrze, gdy jestem w oknie X. Jednak jeśli ssh do mojej stacji roboczej (z innej stacji roboczej) gvim zaczyna narzekać „nie można otworzyć wyświetlacza”.

Dlatego chciałbym umieścić ifoświadczenie w bashrc, że jeśli okno X jest dostępne, użyj gvim, w przeciwnym razie niech będzie vim.

Jak mogłem to osiągnąć?

Ryan
źródło

Odpowiedzi:

11

Jednym ze sposobów na sprawdzenie tego jest istnienie zmiennej środowiskowej DISPLAY:

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

W niektórych przypadkach DISPLAY zostanie ustawiony, nawet jeśli twój gvim nie będzie mógł skontaktować się z serwerem X. W takich przypadkach użyj programu RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi
garyjohn
źródło
if [[ $DISPLAY ]]dla miłośników podwójnego przedziału
Serge Stroobandt
7

$DISPLAYZmienna środowiskowa powinna być ustawiona na coś, jeśli jesteś w X i rozbrojony, jeśli nie są podłączone do wyświetlacza.

Możesz więc użyć tego:

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

Ale jest inne rozwiązanie. Nazywa się to przekazywaniem ssh X.

Biegać

ssh -X yourworkstation

wtedy możesz uruchomić vima na komputerze, na którym jesteś ssh'd, i wyświetli się na komputerze, na którym używasz X.

Mikel
źródło
3

Umieść to w swoim .bashrc:

if [ -z "${DISPLAY:-}" ]; then
  EDITOR='vim'
else
  EDITOR='gvim'
fi
Cahuk
źródło
1

Chociaż nie jest to odpowiedź na twoje pytanie, pomyślałem, że użyteczne może być wskazanie, że jeśli sshingujesz z jednej stacji roboczej z X * na inną stację roboczą, tak naprawdę możesz użyć gvim, jeśli skonfigurujesz przekazywanie X z ssh. Informacje o oknie zostaną po prostu wysłane przez sieć, a gvim wyskoczy tak, jakby był uruchomiony lokalnie.

Dodaj następujące w ~ / .ssh / config

Host *
   ForwardX11 yes 

Teraz będziesz mógł uruchomić gvima.

Jeśli twoją stacją roboczą jest system Windows i nie korzystasz z X, faktycznie możesz uruchomić serwer X lokalnie za pomocą Cygwin. Po skonfigurowaniu możesz skonfigurować popularnych klientów ssh, takich jak PuTTy, do przesyłania dalej X11, a następnie gvim wyskoczy w czymś, co wygląda jak natywne okno ozdobione oknami.

mkomitee
źródło
0

Wystarczy sprawdzić jedną ze zmiennych środowiskowych, które Xorg ustawia podczas uruchamiania, np. XLOCAL, która zawiera informacje o bieżącej sesji X11.

exine
źródło
0

Podobała mi się odpowiedź garyjohna przy użyciu RunningX, ponieważ jest mądra o złych, ale niepustych zmiennych DISPLAY.

Ale .. Chciałbym wybrać jedną lepszą. Często używam sesji ekranowych. Mogę rozpocząć sesję ekranową w domu, DISPLAY jest zdefiniowany. Następnie wysyłam wiadomość z innego miejsca, WYŚWIETLACZ jest nadal zdefiniowany i faktycznie wyświetla ... w domu! Więc .. wtedy „wyeksportuję $ DISPLAY =”. Jest w porządku, ale ponieważ ta odpowiedź jest już sprawdzona i znalazła prawidłową zmienną DISPLAY w momencie, gdy .bashrc początkowo uruchomił EDYTOR, nadal byłby ustawiony na gvim.

Przybyłem tutaj, szukając rozwiązania podobnego problemu, chciałem użyć yelp do przeglądania strony X-GUI, ale automatycznie zejdę do tradycyjnego polecenia man, gdy nie używam X. Na podstawie tego, co tu przeczytałem, wymyśliłem:

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

Myślę, że w przypadku problemu EDYTORA można zrobić coś takiego:

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

Właśnie opublikowałbym tę historię bez długiej historii, ale jej nie przetestowałem. Uważam się za nowicjusza. Przetestowałem moją „komendę człowieka”, która działa! Używam emacsa do mojego edytora, sam sprawdza X. Nie mam nawet zainstalowanego gvima.

użytkownik3042526
źródło