как узнать из скрипта в иксах ли я?

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
phoque
Сообщения: 5

как узнать из скрипта в иксах ли я?

Сообщение phoque »

Хочу сделать несколько функций в zshrc такого, к примеру, типа:

Код: Выделить всё

mplayer() {
if [[ $(я в иксах) ]];then
  mplayer $@
else
  mplayer -vo fbdev $@
fi
}

Пока для $(я в иксах) придумал так:

Код: Выделить всё

IS_X="no"
CURRENT="tty$(/usr/bin/fgconsole)"
LIST=$(/bin/ps h -C 'X'|awk '{print $2}'|grep tty)
for TYPE in ${LIST}
do
  [[ ${CURRENT} == ${TYPE} ]] && IS_X="yes"
done
echo ${IS_X}

Но иногда, не знаю почему (из-за прав?), fgconsole ругается "Couldn't get a file descriptor referring to the console"
Есть ли у кого-нибудь идеи как еще узнать в иксах ли я вызываю функцию?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как узнать из скрипта в иксах ли я?

Сообщение sash-kan »

[ "$DISPLAY" ] && echo yes
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: как узнать из скрипта в иксах ли я?

Сообщение eddy »

if [ "X$DISPLAY" = "X" ]; then мы не в иксах
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как узнать из скрипта в иксах ли я?

Сообщение sash-kan »

phoque писал(а):
12.04.2010 20:15
Couldn't get a file descriptor referring to the console
tty не отведено?
демонстрация (с ssh просто нагляднее):
QUOTE писал(а):$ ssh -t host.tld ps
PID TTY TIME CMD
5896 pts/3 00:00:00 ps
$ ssh host.tld ps
PID TTY TIME CMD
5903 ? 00:00:00 sshd
5904 ? 00:00:00 ps
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
phoque
Сообщения: 5

Re: как узнать из скрипта в иксах ли я?

Сообщение phoque »

sash-kan писал(а):
12.04.2010 20:24
[ "$DISPLAY" ] && echo yes

Да, так и было в начале у меня. Забыл добавить: хочется чтобы работало в screen, а запущенный не в иксах не имеет DISPLAY переменной и наоборот - запущенный в иксах и присоединенный к консоли имеет :0.0.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как узнать из скрипта в иксах ли я?

Сообщение sash-kan »

phoque писал(а):
12.04.2010 20:30
Да, так и было в начале у меня. Забыл добавить: хочется чтобы работало в screen, а запущенный не в иксах не имеет DISPLAY переменной и наоборот - запущенный в иксах и присоединенный к консоли имеет :0.0.
всё верно.
и, запустив x-клиента в последнем скрине, вы получите картинку на дисплее :0.0
а во фреймбуфере, боюсь, картинки вы не получите.

upd. сравните список и значения переменных окружения. возможно, что-то наведёт вас на правильную мысль.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
phoque
Сообщения: 5

Re: как узнать из скрипта в иксах ли я?

Сообщение phoque »

sash-kan писал(а):
12.04.2010 20:35
всё верно.
и, запустив x-клиента в последнем скрине, вы получите картинку на дисплее :0.0
а во фреймбуфере, боюсь, картинки вы не получите.

upd. сравните список и значения переменных окружения. возможно, что-то наведёт вас на правильную мысль.

Код: Выделить всё

~ $ screen
~ $ env >> 1  - в иксах
~ $ screen -d -R
~ $ env >> 2 - консоль
~ $ diff 1 2
66,67c66,67
< LINES=32
< COLUMNS=110
---
> LINES=50
> COLUMNS=160

разве что по ним?

Впрочем, после сегодняшнего включения fgconsole не "ругается".
Где-то нашел подобное сообщение о "couldn't get ..." там говорилось, что от рута работает.
Если повторится попробую suid поставить.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как узнать из скрипта в иксах ли я?

Сообщение watashiwa_daredeska »

Со screen это совсем-совсем другая проблема. Хорошего решения я пока не нашёл.

phoque писал(а):
12.04.2010 21:05
разве что по ним?
Это совсем-совсем плохо, неправильно и ненадёжно.
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: как узнать из скрипта в иксах ли я?

Сообщение BIgAndy »

Ну, например, так:

Код: Выделить всё

$ echo $DESKTOP_SESSION
gnome
$ echo $GDMSESSION
gnome


Код: Выделить всё

$  echo $DESKTOP_SESSION
kde-safe
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как узнать из скрипта в иксах ли я?

Сообщение watashiwa_daredeska »

BIgAndy писал(а):
12.04.2010 21:21
Ну, например, так:
Нет, со screen проблема совсем в другом. Если сессия создана в консоли, а потом к ней подключились из xterm, то всё, что запускается, запускается на самом деле «сервером» screen, который был создан из консоли и про X'ы нюхом не слыхивал, ибо в его environment нет никаких DISPLAY, DESKTOP_SESSION, GDMSESSION и т.п.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как узнать из скрипта в иксах ли я?

Сообщение sash-kan »

phoque писал(а):
12.04.2010 21:05
$ env >> 1
есть ещё
$ set
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как узнать из скрипта в иксах ли я?

Сообщение watashiwa_daredeska »

sash-kan писал(а):
12.04.2010 22:27
есть ещё
$ set
Если включен bash-completion, то вывод set ужасен.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как узнать из скрипта в иксах ли я?

Сообщение sash-kan »

watashiwa_darede... писал(а):
12.04.2010 22:31
Если включен bash-completion, то вывод set ужасен.
diff справится.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: как узнать из скрипта в иксах ли я?

Сообщение Frank »

watashiwa_daredeska писал(а):
12.04.2010 21:35
BIgAndy писал(а):
12.04.2010 21:21
Ну, например, так:
Нет, со screen проблема совсем в другом. Если сессия создана в консоли, а потом к ней подключились из xterm, то всё, что запускается, запускается на самом деле «сервером» screen, который был создан из консоли и про X'ы нюхом не слыхивал, ибо в его environment нет никаких DISPLAY, DESKTOP_SESSION, GDMSESSION и т.п.

Дык это не бага, а фича.
Изображение
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как узнать из скрипта в иксах ли я?

Сообщение watashiwa_daredeska »

Frank писал(а):
13.04.2010 10:14
Дык это не бага, а фича.
А я нигде не сказал, что это бага. Это проблема :)
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как узнать из скрипта в иксах ли я?

Сообщение sash-kan »

watashiwa_darede...
а в чём именно проблема? в том, что приходится угадывать содержимое $DISPLAY, чтобы связаться с нужным x-сервером?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: как узнать из скрипта в иксах ли я?

Сообщение t.t »

watashiwa_daredeska писал(а):
13.04.2010 10:26
Frank писал(а):
13.04.2010 10:14
Дык это не бага, а фича.
А я нигде не сказал, что это бага. Это проблема :)
А screen -X "setenv DISPLAY \"$DISPLAY\"" не спасёт отца русской демократии? (Скажу сразу: сам пока не пробовал: пишу с кпк, здесь консоли нет как таковой, только иксы.)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как узнать из скрипта в иксах ли я?

Сообщение watashiwa_daredeska »

sash-kan писал(а):
13.04.2010 11:05
приходится угадывать содержимое $DISPLAY, чтобы связаться с нужным x-сервером?
Ага.

t.t писал(а):
13.04.2010 11:07
А screen -X "setenv DISPLAY \"$DISPLAY\"" не спасёт отца русской демократии?
Нет. Эта штука запустит в скриновой сессии ещё одно окно, в котором выполнит команду, указанную в -X. Эта команда не будет никак влиять на уже запущенные в сессии окна.

Да и вообще, чисто логически, вот запущен у меня bash в screen, в нём DISPLAY=:0.0, тут я захожу по ssh -X, DISPLAY=:10.0 и переподключаюсь к этой сессии. bash тот же, для него ничего не изменилось, кто ему скажет, что DISPLAY теперь другой, кроме меня? :)

Тут проблема даже не в screen'е, а вообще, в принципе.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как узнать из скрипта в иксах ли я?

Сообщение watashiwa_daredeska »

Есть неопробованное решение, которое покрывает 99% моих нужд:
1. Завернуть screen в скрипт, который перед запуском собственно screen будет класть нужные переменные в файл, скажем ~/.screenvars.d/<имя сессии>. Лучше даже в виде shell-команд: export VAR="...", unset VAR, и т.п.
2. В $PROMPT_COMMAND (для bash) прописываем чтение этого файла командой source.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: как узнать из скрипта в иксах ли я?

Сообщение t.t »

watashiwa_daredeska писал(а):
13.04.2010 11:12
t.t писал(а):
13.04.2010 11:07
А screen -X "setenv DISPLAY \"$DISPLAY\"" не спасёт отца русской демократии?
Нет. Эта штука запустит в скриновой сессии ещё одно окно, в котором выполнит команду, указанную в -X. Эта команда не будет никак влиять на уже запущенные в сессии окна.
Я уже и сам понял, что это не то. Новое окно оно не запустит: это запуск команды screen-а, т.е. аналог "^a :", только из командной строки. Но на уже открытые окна действительно не повлияет.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: как узнать из скрипта в иксах ли я?

Сообщение t.t »

watashiwa_daredeska писал(а):
13.04.2010 11:21
Есть неопробованное решение, которое покрывает 99% моих нужд:
Да, примерно об этом я и подумал, когда понял ошибочность своего предыдущего решения. По идее, никаких подводных камней быть не должно.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: