aivs |
|
Темы:
62
Сообщения:
261
Участник с: 31 октября 2006
|
Здравствуйте, подскажите с bash, мне нужно проверить, запущен ли X сервер на tty8, если запущен то просто перейти на него chvt 8, иначе выполнить команду xinit `which /home/xbmc/start.sh` – :1 & башем не силен пока что. |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Xtty8=`ps aux|grep -cE '\stty8\s+\S+\s+\S+\s+\S+\s+/usr/bin/X\s'` if ((Xtty8==0)) then xinit `which /home/xbmc/start.sh` -- :1 & else chvt 8 fi \s+ означает любое количество пробельных символов, \S+ любое количество непробельных, соответственно в выводе ps aux идёт поиск tty8 и /usr/bin/X в одной строке через 4 столбца. Впрочем, всё это можно сделать и несколькими другими способами :) |
aivs |
|
Темы:
62
Сообщения:
261
Участник с: 31 октября 2006
|
Спасибо большое, я сейчас пытаюсь это сделать через проверку, есть ли файлик /tmp/.X1-lock, если нет то запустить новые иксы, если есть, то просто переключиться. /tmp/.X0-lock /tmp/.X1-lock создаются когда запускаешь иксы на нужном дисплее. Спасибо за помощь!! |
aivs |
|
Темы:
62
Сообщения:
261
Участник с: 31 октября 2006
|
DISPLAY_TO_USE=0 while [ -f /tmp/.X${DISPLAY_TO_USE}-lock ] do let DISPLAY_TO_USE+=1 done if ((DISPLAY_TO_USE==1)) then xinit `which /home/xbmc/start.sh` -- :1 & else chvt 8 fi |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Что-то я не понял, зачем цикл? У вас он крутится до тех пор, пока не найдёт первый незанятый экземпляром X номер. В вашем случае достаточно было if [ -f /tmp/.X1-lock ] then chvt 8 else xinit `which /home/xbmc/start.sh` -- :1 & fi P.S. Проверил этот lock-файл – а он оказался неблокированный. То же мне lock… Правда, в нём вписан PID экземпляра X-сервера. Значит для надёжности придётся прочесть и проверить существование такого процесса. P.P.S. Примерно так: F=/tmp/.X1-lock [ -f $F ] && read P < $F if [ -n "$P" -a -d "/proc/$P" ] then chvt 8 else xinit `which /home/xbmc/start.sh` -- :1 & fi |
aivs |
|
Темы:
62
Сообщения:
261
Участник с: 31 октября 2006
|
Natrio спасибо, Вот это по моему самое изящное решение: F=/tmp/.X1-lock [ -f $F ] && read P < $F if [ -n "$P" -a -d "/proc/$P" ] then chvt 8 else xinit `which /home/xbmc/start.sh` -- :1 & fi |