0byte — Banshee, cron и будильник
Долгое время в качастве будильника пользовался небольшой программиной alarm-clock, пока с очередным апдейтом она не отвалилась напрочь. Поскольку просыпаться как-то все-таки надо, я решил наконец-то освоить силу cron'а.
Для начала, я не собираюсь ипользовать cron в чистом виде, есть замечательная программа gnome-schedule, которая позволит настроить расписание с помощью графического интерфейса. Значительно более проблематичной вещью для меня стал сам скрипт будильника.
Создадим где-нибудь файл alarm со стандартным заголовком скрипта:
И сделаем его исполняемым:
Это - наш будущий скрипт. Теперь начнем с ним собственно разбираться.
Самый простой способ - это воспользоваться mplayer:
Это будет весьма эффективно в качестве будильника, так как Вам придется набирать killall mplayer, чтобы его вырубить. Попробуем запустить mplayer в каом-нибудь графическом терминале, чтобы он был более интерактивен:
И вот тут нас ждет первый подводный камень: необходимо указать, на каком дисплее запускать xterm. Для этого нужно определить переменную DISPLAY. В нашем случае будем пускать xterm на дисплее :0.0, и код будет выглядеть так:
Отлично. Но душа просит чего-то более изящного, с возможностью поменять утреннюю мелодию. Лично я использую плеер banshee, который снимается с паузы командой banshee --play (для Вашего плеера такая команда наверняка тоже есть), так что было бы логично использовать именно этот функционал. И тут второй подводный камень, посерьезнее. Сообщение плееру отдается через шину системных сообщений dbus, которую тоже нужно указать. Однако имя шины меняется при каждом лодине, то есть его надо найти его для данной сессии. Итак.
Для начала, найдем все номер процесса gnome-session (dbus привязан к gnome-session):
Данные об имени сессии dbus хранятся в файле /proc/$pid/environ ($pid - номер процесса gnome-session), так что их можно получить. Нижеприведенная строка получает из соответствующего файла строку, содержащую DBUS_SESSION_BUS_ADDRESS, после чего убирает из нее текст "DBUS_SESSION_BUS_ADDRESS=". В сухом остатке - имя сессии.
Теперь осталось только определить переменную DBUS_SESSION_BUS_ADDRESS и запустить музыку:
А что если с вечера Вы забыли запустить banshee? В таком случае есть смысл воспользоваться mplayer. Проверим, запущен ли banshee, и если нет - запустим mplayer:
Небольшое пояснение: команда ps aux | grep banshee вернет не только процесс banshee, но и процесс grep, так что его нужно отсеять опцией -v.
И, если Вам еще не надоело, окончательный код скрипта:
Для начала, я не собираюсь ипользовать cron в чистом виде, есть замечательная программа gnome-schedule, которая позволит настроить расписание с помощью графического интерфейса. Значительно более проблематичной вещью для меня стал сам скрипт будильника.
Создадим где-нибудь файл alarm со стандартным заголовком скрипта:
echo '#!/bin/bash' > alarm
И сделаем его исполняемым:
chmod +x alarm
Это - наш будущий скрипт. Теперь начнем с ним собственно разбираться.
Самый простой способ - это воспользоваться mplayer:
mplayer -ao pulse '/home/stetzen/Music/J-rock/CODE GEASS Ending 1.mp3'
Это будет весьма эффективно в качестве будильника, так как Вам придется набирать killall mplayer, чтобы его вырубить. Попробуем запустить mplayer в каом-нибудь графическом терминале, чтобы он был более интерактивен:
xterm -e "mplayer -ao pulse '/home/stetzen/Music/J-rock/CODE GEASS Ending 1.mp3'"
И вот тут нас ждет первый подводный камень: необходимо указать, на каком дисплее запускать xterm. Для этого нужно определить переменную DISPLAY. В нашем случае будем пускать xterm на дисплее :0.0, и код будет выглядеть так:
export DISPLAY=:0.0
Отлично. Но душа просит чего-то более изящного, с возможностью поменять утреннюю мелодию. Лично я использую плеер banshee, который снимается с паузы командой banshee --play (для Вашего плеера такая команда наверняка тоже есть), так что было бы логично использовать именно этот функционал. И тут второй подводный камень, посерьезнее. Сообщение плееру отдается через шину системных сообщений dbus, которую тоже нужно указать. Однако имя шины меняется при каждом лодине, то есть его надо найти его для данной сессии. Итак.
Для начала, найдем все номер процесса gnome-session (dbus привязан к gnome-session):
1 2 |
user=`whoami` pids=`pgrep -u $user gnome-session` |
Данные об имени сессии dbus хранятся в файле /proc/$pid/environ ($pid - номер процесса gnome-session), так что их можно получить. Нижеприведенная строка получает из соответствующего файла строку, содержащую DBUS_SESSION_BUS_ADDRESS, после чего убирает из нее текст "DBUS_SESSION_BUS_ADDRESS=". В сухом остатке - имя сессии.
DBUS_SESSION_BUS_ADDR=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pids/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
Теперь осталось только определить переменную DBUS_SESSION_BUS_ADDRESS и запустить музыку:
1 2 |
export DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDR banshee --play |
А что если с вечера Вы забыли запустить banshee? В таком случае есть смысл воспользоваться mplayer. Проверим, запущен ли banshee, и если нет - запустим mplayer:
1 2 3 4 5 6 |
if ps aux | grep -v grep | grep banshee > /dev/null then (код включения banshee) else (код запуска mplayer) fi |
Небольшое пояснение: команда ps aux | grep banshee вернет не только процесс banshee, но и процесс grep, так что его нужно отсеять опцией -v.
И, если Вам еще не надоело, окончательный код скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/bash if ps aux | grep -v grep | grep banshee > /dev/null then user=`whoami` pids=`pgrep -u $user gnome-session` # find DBUS session bus for this session DBUS_SESSION_BUS_ADDR=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pids/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'` # use it export DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDR banshee --play else export DISPLAY=:0.0 xterm -e "mplayer -ao pulse '/home/stetzen/Music/J-rock/CODE GEASS Ending 1.mp3'" fi |