| 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 |