Недавно я поставил xset b off
на свой .bashrc. Теперь меня раздражает ошибка, возникающая при входе в систему через tty или через ssh, то есть вне сеанса X.
Первое, что мне пришло в голову, было [[ -z "$SOME_VAR" ]] && xset b off
(ну, получается, что проверяемая переменная устанавливается против пустого - это другой вопрос). Но какой SOME_VAR является правильным?
Поэтому я просмотрел вывод tty и set
вывод urxvt, set
чтобы увидеть, какие переменные установлены в X и отсутствуют в tty. Как и ожидалось, было довольно много различий (перечисляя только те, которые мне показались актуальными):
DESKTOP_SESSION
DISPLAY
GDMSESSION
SESSION_MANAGER
WINDOWID
WINDOWPATH
XAUTHORITY
XDG_SESSION_COOKIE
XDG_CONFIG_DIRS
XDG_DATA_DIRS
XDG_MENU_PREFIX
Какой из них наиболее правильный и универсальный для тестирования, чтобы определить, нахожусь ли я в сеансе Х или нет? Что-то, что будет работать на максимально возможном количестве дистрибутивов, платформ и сред рабочего стола?
Или есть даже лучший способ, чем тестирование переменных среды?
источник
ssh -X
; работает отлично!Я думаю, что проверка
DISPLAY
будет лучшим подходом.источник
DISPLAY
или просто подавил сообщение об ошибке вообще. Дарите/dev/null
время от времени немного любви.ssh
s до тех пор, пока я не начал делать этоssh -X
- чтобы иметь возможность использовать Vim поверх ssh, чтобы контент, выбранный в визуальном режиме, попадал в локальный буфер обмена X, для чего вам не нужен xserver на стороне сервера. Таким образом, DISPLAY устанавливается как эффект простого включения пересылки, даже если xserver и xset отсутствуют.if [[ $DISPLAY ]]; then … fi
DISPLAY
переменная может указывать на экран, на котором на самом деле не запущен X-сервер (например, когда он жестко задан в скрипте или X-сервер был выключен после того, как была установлена переменная).Я обычно использую
TERM
переменную для проверки X в моих скриптах.TERM
обычно устанавливаетсяlinux
на TTY иxterm
на X. Здесья использую слово «обычно», поскольку такие приложения, как GNU Screen и TMux, похоже, путаются с
TERM
переменной.источник
echo $TERM
выяснить настройку richt на своем компьютере в разных консолях. Я использую[ $TERM == "linux" ] && echo do some stuff
на UbuntuЭто должно работать на отлично:
http://tldp.org/LDP/abs/html/fto.html
Итак, когда это оценивается как false (
[ ! -t 0 ]
), мы находимся в среде графического интерфейса.источник
[ -t 0 ]
и[ -t 1 ]
оба являются истинными.[ -t 0 ]
отлично работает на консоли в Ubuntu (с помощью CTRL ALT F1)Есть много способов сделать это.
В bash попробуй
Или в зш попробуйте
источник
echo 1
если X работает, и вы входите через tty1-6 или ssh. Другой всегда делает "не-X материал" - я думаю, что${CURRENT_VT[6]}
это скорее 6-я строка, чем 6-й символzsh
) и, возможно, сделать некоторые изменения, если хотите, чтобы это работало в bash..zshrc
и ищитеexport VT
. Я использую переменную для хранения того, что у меня Linux VT / console / tty (для приглашения zsh), но в X я просто устанавливаю его в «X» (хотя и не в VT). Но это детали, вы можете решить это любым способом в bash, используя тот же принцип.if [[ $DISPLAY ]]
На том же компьютере
$DISPLAY
вернется, например,0:0
в эмуляторе терминала, но ничего в реальном терминале. Это можно легко проверить с CtrlAltF1против CtrlAltF7.bash
Состояние на основе$DISPLAY
будет выглядеть следующим образом :источник