LINUX.ORG.RU

Как запустить прогу для X-ов без оконного менеджера ?


0

0

Здраствуйте.
Не подскажите как запустить прогу для X-ов если не использовать
оконный менеджер.
1. можно прописать в  /etc/X11/xinit/xinitrc ,
  но тогда нужно будет запускать скрипт startx - а это не очень нужно.
2.  куда еще можно запихнуть имя проги и как стартовать ?

Может есть у кого опыт или знаете ссылочки где почитать ?
Если не сложно, пожалуйста подскажите.
anonymous

> 1. можно прописать в /etc/X11/xinit/xinitrc , > но тогда нужно будет запускать скрипт startx - а это не очень нужно.

а что нужно?

вообще оконный менеджер к запуску программ не имеет никакого отношения.

X-программу можно запустить откуда угодно если указать ей корректный DISPLAY (DISPLAY=":0" в стандартном случае)

aa5779
()

X :0 </dev/null >/dev/null 2>&1 &

DIPSPLAY=:0.0 /path/to/prog/progname </dev/null >/dev/null 2>&1 &

И всё

cvv ★★★★★
()

Например, (с-под Баша):

(X :1 &); xterm -display :1 -geometry +100+100

Только что ты с ней WMа делать будешь?

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

>(X :1 &); xterm -display :1 -geometry +100+100

здесь у нас есть прекрасный шанс заблокировать Х вместе с прогой

cvv ★★★★★
()
Ответ на: комментарий от aa5779

Честно говоря я не понял.  Может плохо объяснил проблему ?

>> 1. можно прописать в /etc/X11/xinit/xinitrc , 
>> но тогда нужно будет запускать скрипт startx - а это не очень нужно. 

>а что нужно? 

Есть голые X-ы (XFree86)  - они запускаются - проверено.
Есть прога под X-Window - ее и нужно запустить из 
текстовой консоли например.
Хотя в конечном итоге Она должна стартовать после загрузки ядра.
Вот я и спросил 
куда мне воткнуть  <путь к отой проге>
в какой конфигурационный файл и какой командой стартовать ?


>вообще оконный менеджер к запуску программ не имеет никакого отношения. 

Я не шибко силен в графике под X-Window,
но я с Вами абсолютно согласен что оконный менеджер - ни при чем.
но из него все запускается - понятно, а как без него ?

>X-программу можно запустить откуда угодно если указать ей корректный DISPLAY
>(DISPLAY=":0" в стандартном случае) 

Я что должен в исходниках программы возиться ?

Или я просто в переменных окружения должен создать
переменную DISPLAY и присвоить ей значение ":0" ?
 <DISPLAY=":0">

Так что-ли ?

> а что нужно? 

Запустить прогу под X-Window  без оконного менеджера из
консольного режима - понять как это делается,
а вообще она должна стартовать после загрузки ядра
поэтому хотелось бы понять куда чего прописывать ?

подскажите попорядку если не сложно.

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (20.10.2004 18:52:42):

Слушай, тебе несколько раз объяснили, что делать.

> есть прога под X-Window - ее и нужно запустить из текстовой консоли например.

ПРОСТО ЗАПУСТИ ЕЕ! Из текстовой консоли, из стартового скрипта, или еще откуда...

Если она не понимает опции -display, то передай ей номер дисплея через переменную окружения DISPLAY

Если Иксы уже запущены на дисплее 0, то перед запуском проги надо определить переменную окружения DISPLAY (export под sh &co, setenv под sch &co.).

Если Иксы еще не запущены, запусти их в бэкграунде, для вящей надежности переопределив все потоки в/с /dev/null

Тебе все это подробно написАли несколько раз.

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

Да, прошу прощения, сейчас посмотрел на весь дискашн -- 
объяснения несколько путаные.

Короче, вот образец скрипта, стартующего вторые Иксы и прогу

#!/bin/sh

DISPLAY=:1
export DISPLAY

X $DISPLAY </dev/null >/dev/null 2>&1 &

/path/to/prog/progname </dev/null >/dev/null 2>&1 &

Если нужны только одни Иксы, пиши DISPLAY=:0

Если Иксы уже бегут, убери строчку 
X $DISPLAY </dev/null >/dev/null 2>&1 &

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Огромное спасибо  Die-Hard  , не сердитесь.
Последние 2 сообщения внесли ясность.

А что X-ы можно загружать на 2-х экранах ?
Я не знал. :(
Большое спасибо буду пробовать.

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (20.10.2004 20:01:58):

> А что X-ы можно загружать на 2-х экранах ?

И больше ;)

Просто X -- то же самое, что X :0 -- обычные иксы, обычно живущие на 7-й консоли. Если они там уже живут, то X :1 запустит еще Иксы, которые поселятся на 8-й консоли. Затем X :2 -- на 9-й, и т.д.

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

Есть еще способ. В HOME пользователя, из под которого будет пускаться программа создаешь файл .xinitrc, в котором будет одна строка:

exec myprog

В /etc/inittab добавляешь сроку:

x:5:respawn:/bin/su - myuser -c 'xinit -- :0'

Возможно придется закомментировать аналогичную строчку, пускающую display manager, и указать полный путь к xinit.

anonymous
()
Ответ на: комментарий от Die-Hard

А race'ам такой способ не будет подвержен? Ведь при запуске клиента сервер может и не дойти до прослушки соединений.

anonymous
()
Ответ на: комментарий от anonymous

можно еще и через xinit попробовать, тока ввод/вывод надо заткнуть

anonymous
()
Ответ на: комментарий от anonymous

> x:5:respawn:/bin/su - myuser -c 'xinit -- :0'

Да, забыл. Еще придется с /etc/pam.d/xserver пошаманить.

anonymous
()
Ответ на: комментарий от Die-Hard

Ты не оторвал ввод вывод от консоли следственно если X или прога сделает setsid или чёто подобное то связка Х+прога может получить SIGSTOP со всеми вытекающими последствиями.

xinit точно делает setsid а Х - неуверен но вполне возможно.

cvv ★★★★★
()
Ответ на: комментарий от cvv

cvv (*) (21.10.2004 11:25:06):

> Ты не оторвал ввод вывод от консоли

Разумеется, я просто идею дал, как прогу запустить. Вопрос был -- "как из консоли", а о том, чтобы оно в бэкграунде бегало -- ну, как и для всего прочего; вопроса про это не было.

> следственно если X или прога сделает setsid

При чем тут setsid?

Если ты отрываешь ввод-вывод от консоли, то sessionID не меняется. А если ты где-то в проге сделаешь setsid без изменения process group, то у тебя ничего не выйдет, поскольку она при той модели запуска, что у меня было описано, является лидером группы.

Иксы же могут сделать setsid, поскольку они в подоболочке запущены, сколько угодно -- она уже сама setsid сделала!

Короче, два утверждения:

1. setsid тут не при чем;

2. приведенная конструкция не получит SIGSTOP от терминала, как бы ни извращались Иксы и прога (если только tty не закрывать/открывать).

Если в конце добавить амперсанд, а из проги попытаться ЧИТАТЬ, тогда, действительно, получим SIGSTOP

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

anonymous (*) (20.10.2004 21:18:02):

> А race'ам такой способ не будет подвержен? Ведь при запуске клиента сервер может и не дойти до прослушки соединений.

Вообще, не должно.

Довольно большие таймауты для попытки установить соединение. Попробуй, например, xterm -display :5 -- секунды 2 будет стараться, пока отвалится.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

>setsid тут не при чем;

причём именно изза setsid в большинстве дистрибутивов startx не работает в сабшеле mc.

> приведенная конструкция не получит SIGSTOP от терминала, как бы ни извращались Иксы и прога (если только tty не закрывать/открывать).

А под редхат 7.3 Иксы/Gnome вообще не поднимаются из под рута только потому что после setsid пытаются сообщить пользователю что они запущены из под рута и получают SIGSTOP.

cvv ★★★★★
()

$ X :1 & xterm &

anonymous
()
Ответ на: комментарий от Die-Hard

Всем огромное спасибо. Я все сделал.
Все что писалось пока все работает.  
Несколько способов все работают.

>обычно живущие на 7-й консоли.
> Если они там уже живут, то X :1 запустит еще Иксы, 
> которые поселятся на 8-й консоли. Затем X :2 -- на 9-й, и т.д. 

А вниз они ползут ?, если я поселил X-ы на 11 консоль, а на 12-ую 
у меня вываливает syslog информацию ядра,
наверное не получится.


>В HOME пользователя, из под которого будет пускаться программа создаешь 
>файл .xinitrc, в котором будет одна строка: 
>
>exec myprog 
>
>В /etc/inittab добавляешь сроку: 
>
>x:5:respawn:/bin/su - myuser -c 'xinit -- :0' 

Что-то я не понял эту конструкцию. :((
А как стартовать при таком способе прогу ?

Я делал похожую штуку (без изменения /etc/inittab),
 когда явно прописывал какой оконный менеджер мне пускать, писал :
<exec startkde >
и стартовал  
$stsrtx

Но мне не нужен скрипт stsrtx.
Если он не нужен в указанном способе, расскажите как потом стартовать прогу ?

>Возможно придется закомментировать аналогичную строчку, 
>пускающую display manager, и указать полный путь к
>xinit. 

Как  я понимаю нужен скрипт xinit ?

> можно еще и через xinit попробовать, тока ввод/вывод надо заткнуть

Если расскажите поподробнее немного
или где прочитать я бы с радостью узнал побольше.

anonymous
()
Ответ на: комментарий от MS

oldDISPLAY=$DISPLAY 
export DISPLAY=:1 
xinit `which xclock` -g 1024x768 -- :1
export DISPLAY=$oldDISPLAY

man xinit

MS
()
Ответ на: комментарий от anonymous

>>x:5:respawn:/bin/su - myuser -c 'xinit -- :0'

>Что-то я не понял эту конструкцию. :(( А как стартовать при таком способе прогу ?

Как я понял твоя задача --- запустить при загрузке системы иксы и в них программу. Так вот программа прописывается в .xinitrc пользователя, от которого она будет пускаться (не из под рута же пускать), а в inittab для пятого runlevel'а (или для того, который у тебя используется для графического режима) указывается, что от пользователя myuser необходимо запустить xinit (он запустит иксы и затем выполнит .xinitrc).

>Я делал похожую штуку (без изменения /etc/inittab), когда явно прописывал какой оконный менеджер мне пускать, писал : <exec startkde > и стартовал $stsrtx

>Но мне не нужен скрипт stsrtx.

То есть не нужен? Он же стандартный, идет с X-сервером. Является обверткой вокруг xinit. И чем объясняется твоя неприязнь?

>Если он не нужен в указанном способе, расскажите как потом стартовать прогу ?

Когда потом? Когда уже все загрузилось? Это уже говорили:

DISPLAY=:0 myprog2

>>Возможно придется закомментировать аналогичную строчку, пускающую display manager, и указать полный путь к xinit.

>Как я понимаю нужен скрипт xinit ?

Это не скрипт. Это иксовая пускалка, которая помимо сервера, загружает еще клиентов (то есть как раз делает то, что тебе надо).

>> можно еще и через xinit попробовать, тока ввод/вывод надо заткнуть

>Если расскажите поподробнее немного или где прочитать я бы с радостью узнал побольше.

Почитай Xwindow HOWTO, например здесь http://www.ibiblio.org/mdw/HOWTO/HOWTO-INDEX/howtos.html (ищи где-то внизу страницы). На opennet, наверное, можно найти русские переводы.

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (23.10.2004 19:43:08):

>>обычно живущие на 7-й консоли. Если они там уже живут, то X :1 запустит еще Иксы, которые поселятся на 8-й консоли. Затем X :2 -- на 9-й, и т.д.

>А вниз они ползут ?, если я поселил X-ы на 11 консоль, а на 12-ую у меня вываливает syslog информацию ядра, наверное не получится.

Вообще все это настраивается, но навскидку не скажу, как.

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

> А вниз они ползут ?, если я поселил X-ы на 11 консоль, а на 12-ую
у меня вываливает syslog информацию ядра,
наверное не получится.

man XFree86
/vt

anonymous
()
Ответ на: комментарий от anonymous

Огромное спасибо, что Вы отвечаете развернуто. Я понял. 

>То есть не нужен? Он же стандартный, идет с X-сервером. 
>Является обверткой вокруг xinit. И чем объясняется твоя неприязнь? 

Да нет я все люблю. :)
Просто не стал особенно расписывать.
Я делаю резанный Linux на малый объем диска (FLASH), чем меньше тем лучше.
Ну и понимаете, что любая прога или скрипт, который что-то вызывает или
загружает тянет за собой библиотеки или другие программы.
У меня есть только голый XFree86 и то, что ему необходимо.
Я поробовал со 'startx' - у меня не вышло, причем вывалило ошибки,
 которые я не смог однозначно идентифицировать.
А делал я так-же примерно как Вы посоветорали изменил  xinitrc
но не стал курочить /etc/inittab .
Я попробую то, что Вы сказали и почитаю по ссылке.
Еще раз спасибо. Не очень представлял как решить такую задачку.

anonymous
()
Ответ на: комментарий от anonymous

> Да нет я все люблю. :) Просто не стал особенно расписывать. Я делаю резанный Linux на малый объем диска (FLASH), чем меньше тем лучше.

Никогда раньше не занимался урезанием линукса, поэтому ничего конкретного подсказать не могу, но думаю, что на 128Мб флешку он должен влезть без особых проблем, для меньшего объема нужен нож побольше.

Могу посоветовать wm http://ctwm.free.lp.se/ . Улучшенный twm, при размере в 300 кб имеет возможность гибкой настройки, поддерживает виртуальные десктопы.

> Ну и понимаете, что любая прога или скрипт, который что-то вызывает или загружает тянет за собой библиотеки или другие программы. У меня есть только голый XFree86 и то, что ему необходимо. Я поробовал со 'startx' - у меня не вышло, причем вывалило ошибки, которые я не смог однозначно идентифицировать.

Здесь возможны проблемы с pam, точнее с pam_console (/etc/pam.d/xserver). Можно поменять ее на pam_permit, либо на pam_wheel с указанием группы, которая может запускать иксовый сервер.

> А делал я так-же примерно как Вы посоветорали изменил xinitrc но не стал курочить /etc/inittab . Я попробую то, что Вы сказали и почитаю по ссылке. Еще раз спасибо. Не очень представлял как решить такую задачку.

Пожалуйста. :) Всегда приятно помочь человеку, который хочет в чем-то разобраться.

Еще вспомнил про ссылку: хорошее, хотя и старое, введение в иксы на русском языке http://web.archive.org/web/20011006225130/http://ep2-ts2.inp.nsk.su/lecture/ .

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.