Проверка, включен ли X на tty8

Здравствуйте, подскажите с bash, мне нужно

проверить, запущен ли X сервер на tty8,
если запущен то просто перейти на него chvt 8,
иначе
выполнить команду xinit `which /home/xbmc/start.sh` – :1 &

башем не силен пока что.
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
grep с ключом -E работает с регулярными выражениями, ключ -c выдаёт количество совпадений вместо найденных строк, в данном случае единицу.
\s+ означает любое количество пробельных символов, \S+ любое количество непробельных, соответственно в выводе ps aux идёт поиск tty8 и /usr/bin/X в одной строке через 4 столбца.

Впрочем, всё это можно сделать и несколькими другими способами :)
Спасибо большое, я сейчас пытаюсь это сделать через проверку, есть ли файлик /tmp/.X1-lock, если нет то запустить новые иксы, если есть, то просто переключиться.
/tmp/.X0-lock
/tmp/.X1-lock
создаются когда запускаешь иксы на нужном дисплее.

Спасибо за помощь!!
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 у меня кстати, тоже не пошел, буду разбираться!
Что-то я не понял, зачем цикл?
У вас он крутится до тех пор, пока не найдёт первый незанятый экземпляром X номер.
В вашем случае достаточно было
if [ -f /tmp/.X1-lock ]
then chvt 8
else xinit `which /home/xbmc/start.sh` -- :1 &
fi
Только тут есть ещё одна проблема – существование lock-файла вовсе не гарантирует нормальную работу экземпляра программы, то есть X-сервера. При ненормальном завершении работы процесс файл может остаться и вообще при отсутствующем процессе.
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
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
Работает отлично
 
Зарегистрироваться или войдите чтобы оставить сообщение.