LINUX.ORG.RU

Простой будильник для Debian на bash + at + rtc

 , ,


1

2

Здравствуйте, уважаемые программисты Линукс! Вопрос: как не авторизуясь в системе запустить bash скрипт и audacious?

Задача: написать будильник, включающий ноутбук в заданное время и запускающий плейлист в audacious с нарастанием громкости.

Тут был найден bash-скрипт включения музыки с прибавлением громкости http://welinux.ru/post/1541/ Переделано так alarm.sh:

#Скрипт запускает audacious на проигрывание плейлиста list.pls, 
#наращивая громкость от 0 до 40% с помощью alsamixer.

#!/bin/bash
amixer sset Master 0% ;
DISPLAY=:0 audacious /home/user/Музыка/list.pls &
for in in $(seq 1 20); do
sleep 2
amixer sset Master 2%+
done

Тут написано http://rus-linux.net/MyLDP/admin/manage-planned-tasks-on-linux-with-the-comma... , как с помощью утилиты at можно добавлять задания в крон. Например так:

> at -f /home/user/alarm.sh 6:30

Следующая статья предлагает метод включения ноутбука через BIOS: https://www.linux.com/learn/wake-linux-rtc-alarm-clock

Например, следующий скрипт настраивает включение компьютера (через BIOS) за две минуты до задачи запуска музыки :

> sudo sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm" 
> sudo sh -c "echo `date '+%s' -d '2017-03-13 6:28:00 MSK'` > /sys/class/rtc/rtc0/wakealarm"

Проблема: ноутбук действительно включается, но в окно входа. Как тогда включить музыку?

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

Как запустить задачу at, находясь на этапе авторизации? Можно ли с помощью at настроить вход под гостем и как, можно ли запустить audacious в окне входа?

★★

Если audacious не умеет работать без иксов, запускай плеер который умеет

disarmer ★★★ ()

Для работы скрипта нужен mplayer-nogui, alsamixer, at, а также необходимо наличие возможности включать компьютер командой BIOS (Resume RTC Alarm).

Подготовка:

sudo apt-get install mplayer alsa-base alsa-utils at

Скрипт, запускающий музыку (сохраните в домашнюю директорию, например /home/user/alarm.sh, заменив в скрипте user на имя пользователя):

#!/bin/bash
amixer sset Master 0% ;
DISPLAY=:0 mplayer '/home/user/Музыка/music.mp3' &
for in in $(seq 1 30); do
sleep 2
amixer sset Master 2%+
done

Сделайте скрипт исполняемым и попробуйте запустить скрипт:

> chmod +x ~/alarm.sh
> ~/alarm.sh

если начнет тихо играть музыка, увеличивая громкость, тогда следующий скрипт настроит включение компьютера и запуск предыдущего скрипта музыки.

Листинг скрипта ago.sh (/home/user/ago.sh)

#!/bin/bash

# Alarm Go! - script that runs cron task using AT,
#            adds BIOS startup time using rtc
# Author: znavko from linux.org.ru
# command line: 
# > ./ago.sh 6:30
# where 6:30 is alarm clock time for tomorrow
# or
# > ./ago.sh
# here will be used default time

DEFAULT_TIME='5:55'
ALARM_SCRIPT='/home/user/alarm.sh'

#check the root privileges
if (( $EUID != 0 )); then
    echo 'Запуск скрипта разрешен от имени root'
    exit
fi

#check the command line data
if [ ${#1} == 0 ]; then 
    alarm_time=$DEFAULT_TIME
else
    alarm_time=$1
fi

echo 'Установить будильник на ' `date '+%c' -d '+ 1 day '$alarm_time':00 MSK'` ' ?'
read -p '(y)/n: ' answer

if [ ${#answer} == 0 ]; then 
    answer='y' 
fi

if echo "$answer" | grep -iq "^y" ;then
    sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm" 
    #start PC 2 minutes before
    sh -c "`date '+%s' -d '+ 1 day -2 minutes '$alarm_time':00 MSK'` > /sys/class/rtc/rtc0/wakealarm"
    #sh -c "echo `date '+%s' -d $alarm_time':00 MSK -2 minutes'` > /sys/class/rtc/rtc0/wakealarm"  #for check it's work today
    at -f $ALARM_SCRIPT $alarm_time 'tomorrow'
    #at -f $ALARM_SCRIPT $alarm_time  #for check it's work today
    echo 'Будильник установлен'
else
    echo 'Будильник не был установлен'
fi

Сделайте скрипт исполняемым, потом получите привилегии root, перейдите в домашнюю папку пользователя root и создайте символическую ссылку в папку пользователя root:

> chmod +x ~/ago.sh
> su -
> cd ~
> ln -s /home/user/ago.sh ~/ago.sh

Теперь для установки будильника запустите с правами root скрипт ago.sh:

> su -
> ~/ago.sh 7:30
Установить будильник на  Пн 13 мар 2017 07:30:00 ?
(y)/n: 
warning: commands will be executed using /bin/sh
job 26 at Sun Mar 12 07:30:00 2017
Будильник установлен

Проверить установлен ли будильник можно так:

> cat /sys/class/rtc/rtc0/wakealarm
1489379280
> atq
39	Mon Mar 13 07:30:00 2017 a root

Соответственно 1489379280 - время в секундах от 1января 1970 года (unix-формат), когда BIOS включит компьютер. Чтобы убедиться, что дата праильная:

> date -d@1489379280
Пн мар 13 07:28:00 MSK 2017

Теперь можно выключить компьютер и ждать запуска скрипта.

Чтобы отключить будильник, нужно отключить задачу автозапуска BIOS:

> sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"

Чтобы снять задачи запуска mplayer, используйте atq для отображения и atrm для удаления (remove):

atq
31	Mon Mar 13 07:30:00 2017 a root
27	Mon Mar 13 07:30:00 2017 a root
37	Mon Mar 13 07:30:00 2017 a root
28	Mon Mar 13 07:30:00 2017 a root
> atrm 31 27 37 28
znavko ★★ ()
Ответ на: комментарий от znavko

устанавливать будильник нужно каждый день, так как в файл /sys/class/rtc/rtc0/wakealarm можно записать только 1 значение времени включения компьютера через BIOS.

Чтобы пользоваться графиком запуска будильника, нужно добавить задачи в крон.

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