LINUX.ORG.RU

Проблема запуска X-приложения через cron «cannot connect to X server»


0

0

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


Задаю вопрос, не особо надеясь на ответ.. Дистриб Ubuntu 7.04. Нужно сделать простую вещь - вызвать из cron какое-нибудь X-приложение.

Порыскал в инете - у всех эта проблема есть, но решения которые предлагаются у меня не работают.

Например, надо вызвать команду

kdialog --msgbox 'Hello from kdialog'

Если ее просто запустить в консоли, то она работает. Если ее прописать в крон, то получаем ошибку.

Ошибка 1
kdialog: cannot connect to X server

В интернетах нашел, что надо попробовать определить переменную DISPLAY. И если не поможет - попробовать добавить команду xhost.

Я пробую делать так

export DISPLAY=:0.0; xhost +; kdialog --msgbox 'Hello kdialog'

В ответ получаю

Ошибка 2
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
xhost: unable to open display ":0.0"
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
kdialog: cannot connect to X server :0.0

Так как во всех обсуждениях какая-то путаница, что должно содержать переменная DISPLAY, и как вызывать xhost, я пробовал следующие команды и разные их варианты, настраивал чтобы cron запускал скрипт от root, от games, от кого только не пробовал (от пользователя не пробовал, ибо на машине в разное время работают разные пользователи). Man на xhost ясности не принес, ибо неясно что имется в виду под "именем" которое задает эта команда.

xhost +; kdialog --msgbox 'Hello kdialog'
xhost local:root; kdialog --msgbox 'Hello kdialog'
xhost +local; kdialog --msgbox 'Hello kdialog'
xhost +local:root; kdialog --msgbox 'Hello kdialog'
export DISPLAY=:0; kdialog --msgbox 'Hello kdialog'
export DISPLAY=:0.0; xhost +; kdialog --msgbox 'Hello kdialog'
export DISPLAY=":0.0"; xhost +; kdialog --msgbox 'Hello kdialog'
export DISPLAY=:0; xhost +; kdialog --msgbox 'Hello kdialog'
export DISPLAY=:0; xhost +local; kdialog --msgbox 'Hello kdialog'
export DISPLAY=:0.0; xhost +local:root; kdialog --msgbox 'Hello kdialog'
export DISPLAY=:0.0; xhost local:root; kdialog --msgbox 'Hello kdialog'
export DISPLAY=:0; xhost local:root; kdialog --msgbox 'Hello kdialog'
...

И все время получаю либо ошибку 1 либо ошибку 2.


Вопрос - как же можно запустить нужное X-приложение из cron?


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

JackYF ★★★★
()

оно едет от рута. или пропиши magic cookie для рута, или пускай через su от своего имени. DISPLAY у тебя задан верно (если ты не игрался с иксами, конечно).

anonymous
()

вдогон: «у всех эта проблема есть» — это 4.2.

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

> оно едет от рута. или пропиши magic cookie для рута, или пускай через su от своего имени. DISPLAY у тебя задан верно (если ты не игрался с иксами, конечно).


По поводу magic cookie

Не совсем понял, что такое magic cookie. Точнее совсем не понял. Вроде как это - генератор псевдослучайных чисел

"mcookie Эта команда создает псевдослучайные шестнадцатиричные 128-битные числа, так называемые "magic cookie", обычно используется X-сервером в качестве "сигнатуры" авторизации. В сценариях может использоваться как малоэффективный генератор случайных чисел."

Куда и как его применять? Куда прописывать?

"Если для регистрации используется xdm (x display manager), вы получаете намного лучший метод доступа: MIT-MAGIC-COOKIE-1. Генерируется 128-битный cookie и сохраняется в вашем файле .Xauthorty. Если вы хотите удаленной машине разрешить доступ к вашему дисплею, то для предоставления доступа именно этому соединению вы можете использовать команду xauth и информацию из вашего файла .Xauthority."

Какую информацию использовать из файла .Xauthority? Как ее оттуда достать, если он имеет бинарный формат?

Внятных описаний не нашел, ткните ссылкой если они есть (на русском, англицкий не изучал). А вообще хотелось бы точнее узнать, что подразумевается под фразой "пропиши magic cookie для рута".


По поводу "пускай через su от своего имени"

Непонятно как это реализовывать в настройке cron, если на машине работают разные пользователи, со своими логинами и паролями. Под каким именем надо переключаться в su? А как писать пароль? Ведь su при переключении на другого пользователя требует пароль (если это не системный пользователь без пароля), как его вводить вообще когда крон работает где-то в фоне?


Впринципе интересует любой метод, лишь бы можно було запустить X-программу из крона.

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

Обычные задания прописываю в /etc/crontab.

Задания от пользователя прописывал через Webmin, ибо в доке на опеннет говорится что должен быть каталог /var/cron/tabs, а его в системе нет. Щас нашел вот в /var/spool/cron/crontabs.

И сделал следующее - там лежали файлы от последних экспериментов

-rw------- 1 games crontab 201 2008-04-27 01:47 games
-rw------- 1 root crontab 417 2008-04-28 13:35 root

Я создал в системе обычного пользователя с именем xconnector и скопировал файл root под именем xconnector. Потом назначил этому файлу пользователя xconnector. Получилось так

-rw------- 1 games crontab 201 2008-04-27 01:47 games
-rw------- 1 root crontab 417 2008-04-28 13:35 root
-rw------- 1 xconnector crontab 423 2008-04-28 13:35 xconnector

В файле root у меня прописана прописана команда (выполнять каждую минуту)

export DISPLAY=:0.0; xhost +; /usr/bin/kdialog --msgbox 'Hello kdialog root'

В файле xconnector я исправил сообщение на 'Hello kdialog xconnector'.


После этих действий произошла странная вещь. Стали появляться сообщения каждую минуту от root! Интересно, почему они раньше не появлялись??? Сообщений от xconnector не появляется, хотя команды идентичные.

Посему два вопроса

1. Почему резко стали видны X-сообщения от root? Файл не менялся, только был скопирован под другим именем. Зависит ли обработка cron файла от, например, даты файла? Чудеса продолжаются - в Webmin есть такая хорошая кнопочка "Выполнить команду сейчас". Так вот для рутовской команды раньше появлялись ошибки. Сейчас она нормально срабатывает. НО Я НИЧЕГО НЕ МЕНЯЛ! Почему так??

2. Почему не появляются сообщения от xconnector?

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

> Млин, читай man xauth, man xhost и man Xsecurity до просветления

Неправильный ответ. Так больше пожалуйста не отвечайте ни мне, ни другим товарищам.

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