bashrc: як знати, що вікно X доступне чи ні?


10

Є моя частина ~/.bashrc, яка встановлює $ EDITOR як gvim. Це добре працює, коли я перебуваю у вікні X. Однак якщо я сш на свою робочу станцію (з іншої робочої станції), gvim починає скаржитися на "не вдається відкрити показ".

Тому я хочу поставити ifзаяву в bashrc, що якщо X вікно доступне, тоді використовуйте gvim, інакше нехай це буде vim.

Як я міг цього досягти?

Відповіді:


11

Один із способів зробити це тестує існування змінної середовища DISPLAY:

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

У деяких випадках буде встановлено DISPLAY, навіть якщо ваш gvim не зможе зв’язатися з сервером X. У цих випадках використовуйте програму RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi


7

$DISPLAYМінлива оточення повинні бути встановлені на те , якщо ви перебуваєте в X, і знятий з охороною , якщо ви не підключені до дисплея.

Отже, ви можете використовувати це:

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

Але є інше рішення. Це називається переадресація ssh X.

Біжи

ssh -X yourworkstation

тоді ви можете запустити vim на машині, в яку ви знаходитесь ssh'd, і він відобразиться на машині, де ви працюєте з X.


3

Помістіть це у свій .bashrc:

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

1

Хоча це не відповідь на ваше запитання, я вважав, що може бути корисним зазначити, що якщо ви переходите з однієї робочої станції під керуванням X * на іншу робочу станцію, ви фактично можете використовувати gvim, якщо налаштувати переадресацію X за допомогою ssh. Інформація про вікно буде просто надіслана по мережі, і gvim просто з’явиться так, як це було б у випадку запуску локально.

Додайте наступне в ~ / .ssh / config

Host *
   ForwardX11 yes 

Тепер ви зможете просто запустити gvim.

Якщо робоча станція походження є Windows, а не працює з X, ви фактично МОЖЕТЕ запустити X-сервер локально, використовуючи Cygwin. Після налаштування ви можете налаштувати популярні клієнти ssh на зразок PuTTy для переадресації X11, а потім gvim з'явиться у вікні, створеному рідним вікном.


0

Просто перевірте одну із змінних середовища, яку Xorg встановлює при запуску, як XLOCAL, яка містить інформацію про поточний сеанс X11.


0

Мені сподобалась відповідь garyjohn, використовуючи RunningX, оскільки вона розумна щодо поганих, але не порожніх змінних DISPLAY.

Але .. Я хотів би піти на один кращий. Я часто використовую екранні сеанси. Я можу почати екранне сеанс вдома, визначено DISPLAY. Потім, я заходжу з іншого місця, DISPLAY все ще визначений, і він фактично відображається ... вдома! Отже .. тоді я експортую $ DISPLAY = '. Це добре, але оскільки ця відповідь вже перевірена і знайшла дійсну змінну DISPLAY на той час .bashrc спочатку запускав EDITOR все одно буде встановлений у gvim.

Я прийшов сюди, шукаючи рішення подібної проблеми, хотів використати yelp для перегляду сторінок X-GUI, але автоматично перейшов до традиційної команди man, коли не використовує X. На основі прочитаного тут я придумав це:

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

Я думаю, що для проблеми EDITOR можна зробити щось на зразок наступного:

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

Я щойно опублікував цю без оповідання, але я не перевіряв її. Я вважаю себе новачком-баш. Я перевірив свою команду man, яка працює! Я використовую emacs для мого редактора, але це перевірка на X. Я навіть не встановив gvim.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.