bashrc: как узнать, доступно ли окно X или нет?

10

В my есть часть ~/.bashrc, которая устанавливает $ EDITOR в gvim. Он отлично работает, когда я в окне X. Тем не менее, если я ssh на свою рабочую станцию ​​(с другой рабочей станции), gvim начинает жаловаться "не могу открыть дисплей".

Поэтому я хочу поместить ifв bashrc утверждение, что если X window доступно, используйте 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
garyjohn
источник
if [[ $DISPLAY ]]для поклонников двойных скобок
Серж
7

$DISPLAYПеременная окружения должны быть установлены на то , если вы находитесь в X, и снят с охраной , если вы не подключены к дисплею.

Так что вы можете использовать это:

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

Но есть и другое решение. Это называется ssh X forwarding.

Пробег

ssh -X yourworkstation

тогда вы можете запустить vim на машине, с которой вы работаете в ssh'd, и она отобразится на машине, на которой вы запускаете X.

Mikel
источник
3

Поместите это в ваш .bashrc:

if [ -z "${DISPLAY:-}" ]; then
  EDITOR='vim'
else
  EDITOR='gvim'
fi
cahuk
источник
1

Хотя это не ответ на ваш вопрос, я подумал, что может быть полезно указать, что если вы работаете с одной рабочей станцией, на которой запущен X *, на другую рабочую станцию, вы можете использовать gvim, если вы настраиваете переадресацию X с помощью ssh. Информация об окне будет просто отправлена ​​по сети, и gvim просто появится, как если бы он работал локально.

Добавьте следующее в ~ / .ssh / config

Host *
   ForwardX11 yes 

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

Если вы используете рабочую станцию ​​Windows и не используете X, вы на самом деле МОЖЕТЕ запустить X-сервер локально, используя Cygwin. После настройки вы можете настроить популярные ssh-клиенты, такие как PuTTy, на переадресацию X11, а затем появится окно gvim, которое выглядит как окно с собственным декором.

mkomitee
источник
0

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

экзина
источник
0

Мне понравился ответ garyjohn с использованием RunningX, так как он хорошо разбирается в плохих, но непустых переменных DISPLAY.

Но .. Я хотел бы пойти один лучше. Я часто использую сеансы экрана. Я мог бы начать сеанс экрана дома, определен DISPLAY. Затем, я ssh в другом месте, DISPLAY все еще определен, и он на самом деле отображает ... дома! Так что .. тогда я 'экспортирую $ DISPLAY ='. Это хорошо, но так как этот ответ уже проверен и найден допустимая переменная DISPLAY в то время, когда .bashrc первоначально запустил EDITOR, он все равно будет установлен в gvim.

Я пришел сюда в поисках решения аналогичной проблемы, я хотел использовать yelp для просмотра man-страниц X-GUI, но автоматически переходил к традиционной команде man, когда не использовал X. Исходя из того, что я здесь прочитал, я придумал следующее:

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

Я думаю, что для проблемы редактора можно сделать что-то вроде следующего:

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

Я бы только что опубликовал это без длинной истории, но я не проверял это. Я считаю себя новичком Баш. Я проверил мою «команду человека», это работает! Я использую emacs для своего редактора, хотя он выполняет собственную проверку X. У меня даже не установлен gvim.

user3042526
источник