bashrc: bagaimana cara mengetahui X window tersedia atau tidak?

10

Ada bagian di saya ~/.bashrc, yang menetapkan $ EDITOR menjadi gvim. Ini berfungsi dengan baik ketika saya berada di jendela X. Namun, jika saya ssh ke workstation saya (dari workstation lain) gvim mulai mengeluh "tidak dapat membuka tampilan".

Oleh karena itu saya ingin meletakkan ifpernyataan di bashrc, bahwa jika jendela X tersedia maka gunakan gvim, jika tidak biarkan vim.

Bagaimana saya bisa mencapainya?

Ryan
sumber

Jawaban:

11

Salah satu cara untuk melakukan ini menguji keberadaan variabel lingkungan DISPLAY:

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

Dalam beberapa kasus, DISPLAY akan ditetapkan meskipun gvim Anda tidak akan dapat menghubungi server X. Dalam kasus tersebut, gunakan program RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi
garyjohn
sumber
if [[ $DISPLAY ]]untuk penggemar braket ganda
Serge Stroobandt
7

The $DISPLAYvariabel lingkungan harus diatur ke sesuatu jika Anda berada di X, dan diset jika Anda tidak terhubung ke tampilan.

Jadi Anda bisa menggunakan ini:

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

Tetapi ada solusi lain. Ini disebut penerusan ssh X.

Lari

ssh -X yourworkstation

maka Anda dapat menjalankan vim pada mesin yang Anda ssh'd masuk, dan itu akan ditampilkan pada mesin tempat Anda menjalankan X.

Mikel
sumber
3

Masukkan ini ke dalam .bashrc Anda:

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

Walaupun ini bukan jawaban untuk pertanyaan Anda, saya pikir mungkin berguna untuk menunjukkan bahwa jika Anda melakukan sshing dari satu workstation yang menjalankan X * ke workstation lain, Anda sebenarnya dapat menggunakan gvim jika Anda mengatur X forwarding dengan ssh. Informasi jendela hanya akan dikirim melalui jaringan dan gvim hanya akan muncul seperti itu jika dijalankan secara lokal.

Tambahkan berikut ini di ~ / .ssh / config

Host *
   ForwardX11 yes 

Sekarang Anda dapat menjalankan gvim.

Jika Anda workstation asal adalah Windows dan tidak menjalankan X, Anda sebenarnya BISA memulai server X secara lokal menggunakan Cygwin. Setelah pengaturan itu, Anda dapat mengonfigurasi klien ssh populer seperti PutTy untuk melakukan penerusan X11, dan kemudian gvim akan muncul dalam apa yang tampaknya merupakan jendela asli yang dihiasi jendela.

mkomitee
sumber
0

Cukup periksa salah satu variabel lingkungan yang Xorg atur saat startup, seperti XLOCAL yang berisi informasi tentang sesi X11 saat ini.

exine
sumber
0

Saya menyukai jawaban garyjohn menggunakan RunningX karena pintar tentang variabel DISPLAY yang buruk tetapi tidak kosong.

Tapi .. saya ingin yang lebih baik. Saya sering menggunakan sesi layar. Saya mungkin memulai sesi layar di rumah, DISPLAY didefinisikan. Kemudian, saya ssh dari tempat lain, DISPLAY masih didefinisikan dan itu benar-benar menampilkan ... di rumah! Jadi .. maka saya akan 'mengekspor $ DISPLAY ='. Ini bagus tapi karena jawaban itu sudah diperiksa, dan menemukan variabel DISPLAY yang valid pada saat itu. Bashrc awalnya menjalankan EDITOR masih akan diatur ke gvim.

Saya datang ke sini mencari solusi untuk masalah yang sama, saya ingin menggunakan yelp untuk browsing manual X-GUI tetapi secara otomatis drop down ke perintah man tradisional ketika tidak menggunakan X. Berdasarkan apa yang saya baca di sini, saya datang dengan ini:

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

Saya berpikir bahwa untuk masalah EDITOR orang dapat melakukan sesuatu seperti berikut:

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

Saya hanya akan memposting bahwa tanpa cerita panjang tapi saya belum mengujinya. Saya menganggap diri saya seorang pemula bash. Saya menguji 'perintah manusia' saya, itu berhasil! Saya menggunakan emacs untuk editor saya, ia melakukan pengecekan sendiri untuk X. Saya bahkan tidak menginstal gvim.

pengguna3042526
sumber