LINUX.ORG.RU

crontab и запуск оконных приложений

 , , , ,


0

0

Доброго времени суток!

Сижу на Ubuntu 11.04. Пользуюсь Thunderbird-ом. К сожалению, «родные» уведомлялки о новых сообщениях в текущей версии громоптыца не поддерживаются.

Ознакомился с полезным демоном 'popper' (например: http://mygeekopinions.blogspot.com/2011/05/popper-another-e-mail-reader-for-u...). Столкнулся с тем, что демон временами (несколько раз в день, а то и в час) отваливается или зависает. Что первое, что второе легко отследить, так что дело было за написанием простого скрипта для проверки и перезапуска демона и добавления сего скрипта в cron...

Итак, скрипт написан и оттестирован ручным запуском. Добавляем в crontab и наблюдаем следующую картину: все элементы скрипта как до, так и после строчки запуска самого демона выполняются на «ура». Сам демон, судя по несложному дебагу, запускается и тут же падает, причём упорно не выдавая никаких сообщений никаким образом. Позже выяснилось, что подобная проблема возникает при запуске любых гуёвых приложений. И плевать, вызываешь ли ты процесс просто так, с помощью setsid или nohup.

Опуская подробности дебага... Берём 'zenity' - определённо гуёвая приблуда. Добавляем в crontab DISPLAY=":0" и радуемся, что zenity наконец-то стал запускаться. Но не 'popper'. Впихиваем в crontab практически все переменные окружения (кроме тех, значения которых генерируются каждую загрузку системы) - мимо.

Господа знатоки, внимание, вопрос: Какие условия нужно обеспечить, дабы запускать оконные приложения так, будто запускаешь их вручную?

Напиши гуёвое приложение которое постоянно висит и запускает другие гуёвые приложения ,например system(«lxterminal &»). Как часы работает.

anonymous ()

Господа знатоки, внимание, вопрос: Какие условия нужно обеспечить, дабы запускать оконные приложения так, будто запускаешь их вручную?

Очевидно, сделать идентичную среду. Среда, в которой работает крон, урезана по самое не могу (см. начало /etc/crontab).

А для оконных приложений ещё нужна переменная DISPLAY.

akk ★★★★★ ()

Забыл добавить. Этот вопрос задавался не единожды. Впоиск!

akk ★★★★★ ()
Ответ на: запускаешь не от root? от invokercd

1. Гуёвое приложение-демон, запускающее другие приложения - не вариант.

2. Про DISPLAY уже писал в сообщении темы. Читайте внимательнее.

3. Запускаю, разумеется, из под себя. В какой ситуации вызов crontab -e на десктопе будет открывать crontab другого юзера, если не указан параметр -u, ась? Откуда такие бредовые идеи? И ещё бредовее: как crontab будет прописывать пароль юзера для исполнения команды, предварённой sudo? Думайте лучше.

xerxes ()

UPD

Сейчас попытался запустить через xvfb-run. Вот результат: self.defaultKeyring = gnomekeyring.get_default_keyring_sync() gnomekeyring.IOError

Прописывание юзерских переменных gnomekeyring* не дало результатов. Есть идеи?

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

Я тебе ответил на вопрос Какие условия нужно обеспечить, дабы запускать оконные приложения так, будто запускаешь их вручную? Откуда такие бредовые идеи что все должны знать как именно запускается скрипт?

От root это работает замечательно:

#!/bin/bash
sudo -u USER -H DISPLAY=:0 vlc
invokercd ★★★★ ()

popper

Возьми gnubiff — работает стабильно, сидит в трее, по дабл клику запускает любимый почтовый клиент

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

Я тебе ответил на вопрос

От root это работает замечательно

Для запуска того же пресловутого VLC root-права не нужны.

Я уже писал, что этих условий недостаточно, и указал на конкретное место, не позволяющее запустить демон. И речь о конкретном приложении. И, ещё раз, как вы в кроне зададите для рута пароль? Процесс запускается по крону, алё, гараж!

Научитесь, в первую очередь, внимательно читать сообщения.

Возьми gnubiff

А вот за это - спасибо. Протестирую.

xerxes ()
Ответ на: Я тебе ответил на вопрос от xerxes

Для запуска того же пресловутого VLC root-права не нужны. - читаем внимательно: vlc в примере запускается НЕ с правами root.

И, ещё раз, как вы в кроне зададите для рута пароль? man cron или след. абзац

Процесс запускается по крону, алё, гараж - это кто еще читать не умеет. Я же написал уже второй раз что это запускается в cron от root (у него тоже есть crontab, представляете). Само собой что пароль никакой для id=0 не требуется, не?
PS: если я написал что это работает значит это реально работает, на машине с многими юзерами.

invokercd ★★★★ ()

К сожалению, «родные» уведомлялки о новых сообщениях в текущей версии громоптыца не поддерживаются.

А плагины вроде «Mailbox Alert» и в трей_пряталки не выход?

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

#

1. Про VLC не так выразился. Имел ввиду, что можно запустить гораздо проще, без sudo.

2. Запуск гуёвого приложения, имеющего непосредственное отношение к одному конкретному пользователю совсем не кошерно запускать из рутовского крона. Т. е. если ты мышкой запускаешь процесс от твоего имени, с какой стати через консоль его нужно запускать способом, требующим доступ к защищённым файлам (в данном случае, как минимум, к системному крону)?

3. gnubiff, может, и хорош, но здоровая дура на экране как-то не привлекает. Если на то пошло, есть такой же стабильный, но аккуратный mail-notification.

4. Mailbox Alert есть именно alert, а не перманетное сообщение. Я с таким же успехом могу тупо zenity вызывать.

xerxes ()
Ответ на: # от xerxes

А если не из крона?
Скажем, скрипт вида

while true; do popper; done
в автозагрузке DE

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

В принципе, можно. Только это из серии использования автомобиля не для езды, а лишь для хранения вещей в его багажнике. Причём, неоптимального.

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

Все равно делаются костыли, потому что «„родные“ уведомлялки о новых сообщениях в текущей версии громоптыца не поддерживаются»

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

Ну вот mail-notification точно такой же. Так же стабилен. Так же выглядит (только вместо пингвина - конверт). Popper же внедряется в ubuntu-вскую примочку под почтовый клиент (конверт).

Короче, нет, так нет. Жаль. Придётся терпеть zenity, уведомляющий о сдохшем popper-е.

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

Мужик, помогло! Реально определённый в кроне DBUS_SESSION_BUS_ADDRESS спасает ситуацию! Осталось лишь решить вопрос красивого получения, если это возможно.

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

В общем, и DISPLAY не понадобился.

Достаточно было в целевом скрипте прописать следующие строчки:

export USER=`ps -C gnome-session -o user=`
pids=`pgrep -u $USER gnome-session`
for pid in $pids; do
  export DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
done

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

Наврал, DISPLAY нужен. Просто его тоже прописать в целевом скрипте, и все дела.

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