Linux simple alarm and rest reminder
Может быть Я плохо искал, но простых решений для будильника и ежечасной кричалки почему-то не нашел. Есть конечно kalarm/gnome-alarm, но ставить их неохота, да и много кликов надо будет делать для каждого нового будильника или напоминания. Можно написать относительно простое решение на bash (теперь просто взять у меня), которое в конечном итоге будет требовать или написать каманду по типу следующих:
Или, например, добавить задачу в крон для еже.*ого выполнения:
Как видно, использовать достаточно просто (linux-style), а вот сам скрипт может показаться сложным. Итак, для того, что бы этот скрипт работал, нам понадобится что-нибудь для вывода текста на экран (osd_cat из библиотеки xosd), что-нибудь для воспроизведения звуков (play из sox, или mplayer) и atd, если вы хотите иметь возможность задавать время срабатывания без кронтаба. Итак, в простом варианте скрипт будет выглядеть так:
Конечно, можно еще ввести проверки на наличие нужных программ, сделать больше опций с помощью getopt, но тогда скрипт разрастётся непомерно.
Возможные проблемы:
1) Что бы вызывать скрипт без полного пути, надо его положить в папку которая есть в PATH (/usr/bin например), или добавить путь где он лежит в PATH. Последнее можно сделать, например дописав в ~/.bashrc или в ~/.xinitrc такую строку:
2) Кронтаб может быть не установлен, тогда надо поставить cron, который позволяет делать задачи каждому пользователю (crond, vixie-cron), а также разрешить это делать конкретному пользователю, т.е. добавить в файл /etc/cron.allow строку с именем пользователя:
P.S. если кому интересно что там за звук, то послушайте
alarmer --set 15:00 'Hello! Go and do yourthing!'
alarmer --set 'now +40min' 'Куда это ты собрался?!'
alarmer --set 'ВРЕМЯ В ФОРМАТЕ at' 'Текст сообщения'
alarmer 'Текст сообщения которое будет показано сразу же'
Или, например, добавить задачу в крон для еже.*ого выполнения:
$ crontab -e
0 * * * * ~/bin/alarmer.sh '!!! Rest RIGHT NOW !!!' #ежечасное напоминание об отдыхе
Как видно, использовать достаточно просто (linux-style), а вот сам скрипт может показаться сложным. Итак, для того, что бы этот скрипт работал, нам понадобится что-нибудь для вывода текста на экран (osd_cat из библиотеки xosd), что-нибудь для воспроизведения звуков (play из sox, или mplayer) и atd, если вы хотите иметь возможность задавать время срабатывания без кронтаба. Итак, в простом варианте скрипт будет выглядеть так:
#!/bin/bash
FONT="-*-liberation sans-medium-r-normal-*-74-*-*-*-*-*-iso10646-1" # шрифт сообщения
SOUNDFILE="/usr/share/games/abuse/sfx/pldeth02.wav" # звук который будет проигран при срабатывании
OSD_TEXT="Alarm triggered!" # сообщение "по умолчанию"
COLOR="#99aaa0" # цвет сообщения
DISP_TIME=15 # время отображения сообщения в секундах
export DISPLAY=:0.0 # дисплей (можно узнать набрав в иксах в консоли \'echo $DISPLAY\')
PLAYER=/usr/bin/play # чем проигрывать звук
if [[ $1 == "--set" ]]; then
SELF=$0
TIME=$2
shift 2
TEXTO=$@
at "$TIME" << EOF
$SELF $TIME! $TEXTO
EOF
exit 0;
fi
if [[ $* ]]; then
OSD_TEXT="$*"
fi
/bin/echo $OSD_TEXT|/usr/bin/osd_cat -p middle -A center -c "$COLOR" -s 3 -d "$DISP_TIME" --font "$FONT" &
$PLAYER $SOUNDFILE >>/dev/null 2>&1
$PLAYER $SOUNDFILE >>/dev/null 2>&1 # для убедительности
Конечно, можно еще ввести проверки на наличие нужных программ, сделать больше опций с помощью getopt, но тогда скрипт разрастётся непомерно.
Возможные проблемы:
1) Что бы вызывать скрипт без полного пути, надо его положить в папку которая есть в PATH (/usr/bin например), или добавить путь где он лежит в PATH. Последнее можно сделать, например дописав в ~/.bashrc или в ~/.xinitrc такую строку:
PATH="/path/to/folder/with/script:${PATH}"
2) Кронтаб может быть не установлен, тогда надо поставить cron, который позволяет делать задачи каждому пользователю (crond, vixie-cron), а также разрешить это делать конкретному пользователю, т.е. добавить в файл /etc/cron.allow строку с именем пользователя:
SOME_USERNAME
P.S. если кому интересно что там за звук, то послушайте