LINUX.ORG.RU

Куда прописать команду xhost + чтоб она автоматически запускалась?


0

0

Здравствуйте!


Имею такую залипуху. Чтобы сделать графический показ виндовых сообщений net send (принимаются через самбу, показываются через zenity), надо открыть на X-сервере разрешение коннектиться пользователю nobody. Именно под пользователем nobody в моей системе (Ubuntu 7.04) выполняются процессы, запущенные самбой. То есть, при старте иксов нужно дать команду

xhost +local:nobody

И вот вопрос - как это сделать? Команду можно давать от текущего пользователя, а можно и от рута, результат одинаковый (открывается локальный доступ на совершение коннекта пользователю nobody). Но залипуха в том, что я не могу найти, куда нужно впихнуть данную команду.


Пробовал два варианта

1. Прописать команду в /etc/rc.local

2. Вставить в загрузку уровня 2 (когда запущены иксы, команда runlevel показывает "N 2"). Вставляю так

echo 'xhost +local:nobody' > /etc/init.d/autoload
chmod +x /etc/init.d/autoload
ln -s /etc/init.d/autoload /etc/rc2.d/S99autoload


В обоих случаях команда не выполняется, ибо на момент запуска данной команды иксы еще не запущены. Выяснил это путем запуска таким же образом скрипта

whoami >> /tmp/autoload.txt
date >> /tmp/autoload.txt
ps aux | grep /usr/bin/X >> /tmp/autoload.txt
xhost + >> /tmp/autoload.txt
echo "\n\r" >> /tmp/autoload.txt

В логе видно, что процесса /usr/bin/X в моменты запуска скрипта не существует. Соответственно, команда xhost + нужную настройку не выполняет.


Есть еще вариант - поместить скрипт в ~/.kde/Autostart, но он не подходит по нескольким причинам. Первая - у многих пользователей стоит Гном а не KDE, а как сделать автозапуск в гноме не знаю. Вторая причина посерьезней - пользователи не локальные, они в домене находятся. Посему, какой пользователь за каким компом будет сидеть -неизвестно, и каждому прописывать в домашней директории автозапуск данной команды - фиг уследишь, или городить еще какой-то сервис надо чтобы проверял у кого еще это не прописано.

Вариант прописывания команды в /etc/init.d/x11-common вроде как неправильный, не хочу трогать этот скрипт.


В общем, надо запустить команду xhost + при старте иксов. Причем независимо от того, какой пользователь будет входить в DE. Как это сделать правильно и, желательно, просто?


Ответ на: комментарий от JackYF

Re^2: Куда прописать команду xhost + чтоб она автоматически запускалась?

> /etc/X11/xinit/xinitrc

Имхо неверно, во всяком случае в моем debian lenny не срабатывают команды из xinirc при входе в gnome

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

> Имхо неверно, во всяком случае в моем debian lenny не срабатывают команды из xinirc при входе в gnome

Да, у меня в KDE (Ubuntu 7.04) такая же херня что и у товарища APM. Команды, прописанные в

/etc/X11/xinit/xinitrc и /etc/X11/xinit/xserverrc

не выполняются вообще.

(В логирущий скрипт, пишущий в /tmp/autoload.txt добавил команду chmod ugo+rw /tmp/autoload.txt чтобы команды от любого пользователя могли в данный файл писать).

Какие еще варианты будут? Ведь простая вещь - автозапуск, чтож такие сложности?

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

> Какие еще варианты будут? Ведь простая вещь - автозапуск, чтож такие сложности?

ну вот, бывает такое, когда сложности на пустом месте.

могу предложить попробовать вставить в /etc/profile что-то вроде (не проверял):

if [ -n "$DISPLAY" ] ; then xhost +local: ; fi

кстати, кто тебе сказал что есть такая конструкция как «+local:nobody»? что-то мне подсказывает, что если есть желание fine-grained control, то придется с xauth заморачиваться.

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

> могу предложить попробовать вставить в /etc/profile

Выдержка из файла /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

Посему не понял, зачем в этот файл вставлять? Нужно запустить команду при старте иксов. А этот файл выполняется при старте шелла. Какая связь?


> кстати, кто тебе сказал что есть такая конструкция как «+local:nobody»? что-то мне подсказывает, что если есть желание fine-grained control, то придется с xauth заморачиваться.

В инете всюду натыкаюсь на "xhost +local:root". Прочитав ман, понял что после плюса должно быть либо имя компьютера либо имя пользователя, которому разрешается доступ. Может чо не так понял, англицкого не знаю.

> [+]name The given name (the plus sign is optional) is added to the list allowed to connect to the X server. The name can be a host name or a user name.

Посему использую команду "xhost +local:nobody". Она работает, xhost на такие параметры не ругается. Ну в крайнем случае буду использовать "xhost +", секьюрность побоку, лишь бы заработало.


Такое впечатление что автозапуск вообще невозможен. Гугление показыват что люди пыжатся, и обсуждения заканчиваются ничем.

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

> Нужно запустить команду при старте иксов. А этот файл выполняется при старте шелла. Какая связь?

связь такая, что [kgx]dm при старте пользовательской сессии в частности запускает и оболочку. это конечно не самый изящный вариант, но с большо́й долей вероятности прокатит.

> В инете всюду натыкаюсь на "xhost +local:root"

вот уж не знаю. полное имя состоит из «family:name», причем для family «local» вторая часть просто игнорируется. тебе скорее всего надо «xhost +local:»

> буду использовать "xhost +"

плохая идея. это все равно что в инет открыть ssh с root-ом без пароля.

> Такое впечатление что автозапуск вообще невозможен.

возможен, ты еще не начинал пытаться :-)

> англицкого не знаю.

должно быть, это тяжко.

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

>связь такая, что [kgx]dm при старте пользовательской сессии в частности запускает и оболочку. это конечно не самый изящный вариант, но с большо́й долей вероятности прокатит.

Мда, в /etc/profile прокатило, спасибо. Одно непонятно - почему команды из файла, специально предназначенного для автозапуска при старте иксов (/etc/X11/xinit/xinitrc) не работают вообще? Хотелось бы не через выхлопную трубу мотор собирать.


>> В инете всюду натыкаюсь на "xhost +local:root"
> вот уж не знаю. полное имя состоит из «family:name», причем для family «local» вторая часть просто игнорируется. тебе скорее всего надо «xhost +local:»
>> буду использовать "xhost +"
> плохая идея. это все равно что в инет открыть ssh с root-ом без пароля.

Тагда наш выбор "xhost +local:"


> Komintern. в ~/.xsession пробовал?

Нет, ибо нужна "глобальная" настройка для всего компьютера а не для отдельных пользователей. Ибо этих пользователей 80 штук, компы в домене, и на каком компе какой пользователь будет сидеть неизвестно.


А теперь еще один вопрос:
-------------------------

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

Вопрос - как это сделать? Есть ли специальная команда для получения списка номеров активных дисплеев?

xintrea
() автор топика
Ответ на: комментарий от sdio

Спасибо всем помогавшим! По результатам этого обсуждения написано MiniHOWTO

"Настройка приема сообщений, отправленных из Windows через net send, в виде автоматически появляющегося окна".

http://forum.ubuntu.ru/index.php?topic=27598.msg191650#msg191650

Думаю, админам, у которых смешанная сеть (Win и Lin), пригодится.

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