LinuxForum.Fans
Тема

Linux - идеальный будильник

Автор: riso 12 сообщений 9295 просмотров
#220050

В детстве увидел в каком-то фильме про хакеров, как комп будит своего хозяина музыкой, компа тогда не было, а сейчас я удачно стал просыпать работу, просто выключаю будильник на телефоне и сплю дальше. Поэтому решил реализовать bash + mplayer + рандомный клип из колекции. Все довольно просто :
В bios выставляем автоматическое включение компа по времени, например 8 утра. Устанавливаем mplayer, alsa-utils.
У меня openbox, поэтому я добавляю в .config/openbox/autostart такие строки

text
amixer -- set Master playback -2dB &

if [ `date +%A` != Sunday ] ; then if [ `date +%H` -lt 9 ] ; then mplayer -fs -shuffle -playlist ~/playlist ; fi fi

Если у вас другой wm/de, тогда добавьте тоже самое в свой скрипт автозапуска ну или в ~/.xinitrc. Здесь мы говорим запускать "будильник" во все дни недели, кроме воскресенья (у меня выходной). Затем создадим файл ~/playlist и заполним его содержимым

text
echo `find /home/user/clips -type f -name *.mkv -or -name *.avi` > ~/playlist

Ну вот собственно и все. mplayer будет запускать рандомный клип при загрузке вашего wm/de. Я понимаю, что сдесь не хабр, просто исполнил мечту детства :)

#220069

Интересная тема. Тоже недавно задался такой идеей. В bash не силён, поэтому пока так. Хотя всё это требует доработки.

text
# Устанавливаем значение громкости в 0%
amixer -q set Master 0% ;
# Запускаем mplayer с бесконечным повторением случайной дорожки
mplayer -loop 0 -shuffle /home/ranyar/Music/Morning/* &
# Бесконечное повышение громкости, чтобы в полусонном состоянии не выкручивать колёсико громкости на ноутбуке на минимум
while true; do amixer sset Master 2%+; sleep 4; done

Запускаю через at при необходимости:
[console]at -f script.sh hh:mm[/console]
т.к. биос ноутбука не позволяет настраивать автоматическое включение.
Пока убиваю mplayer и скрипт через диспетчер задач, успеваю немного отойти ото сна.

#220075

# Бесконечное повышение громкости

нужно себе прикрутить :)

#220117

мой вариант:

[console]mpg123 `find | cat | shuf | tail -n1`[/console]

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

#220125

да, у тебя вышло проще ) Про shuf не знал, спасибо

#220131

drBatty, выпендрёжник=)
1) оно ж и каталоги найдёт и всякий мусор
2) кошка нафига там нужна?

#220134
Fat-Zer написал:
1) оно ж и каталоги найдёт и всякий мусор
2) кошка нафига там нужна?

1) ну и пусть - я-то сплю :P
2) дык:

Fat-Zer написал:
выпендрёжник=)

под руку попалась. замените её на -type f и левую палку тоже уберите. И будет вам счастье.

#220137
riso написал:
Про shuf не знал

простое правило, перед тем как писать хитрый скрипт для работы с текстом - загляни в info coreutils, 99%, что там уже есть нужная программа.

#220145
riso написал:
if [ `date +%A` != Sanday ]

мне кажется надо исправить на Sunday, иначе воскресенье тоже будет рабочим... smile

#220148

Опечатался, спасибо, поправил.

#220198
-=Serj=- написал:
[quote=riso]if [ `date +%A` != Sanday ]

мне кажется надо исправить на Sunday, иначе воскресенье тоже будет рабочим... smile[/quote]

а мне кажется что ваш подход вообще никуда не годится, ибо у меня "воскресенье".

Используйте в этом случае
[console]date +%u[/console]
1 == понедельник.

#286957

Если настроен спящий режим то для автоматического включения по идее можно воспользоваться утилитой rtcwake

Например у меня работает такой скрипт в качестве будильника:

text
#!/bin/bash

# время по умолчанию ${tm:="16:41"}

# громкость volume=10 volume_max=90 # путь к папке с медиафайлами, или к медиафайлу. folder=~/путь* mplayer_start() { # убиваем все процессы mplayer-а id=(`ps al | grep [m]player | gawk '{print $3}'`) for job in ${id[*]} ; do kill -9 $id done # включаем случайную мелодию с бесконечным повтором if [ -z "$1" ] ; then mplayer -loop 0 -shuffle $folder &> /dev/null & fi }

# позволяет вводить время в качестве первого параметра ./xxx.sh 16:41 if [[ "$1" == [0-9]:[0-9][0-9] ]] || [[ "$1" == [0-9][0-9]:[0-9][0-9] ]] ; then tm=$1 fi

date1=$(date -d "`date +%m/%d/%y` $tm" +%s) date2=$(date -d "`date +%m/%d/%y` $tm tomorrow" +%s)

if [[ $date1 < `date -u +%s` ]] ; then date=$(echo $[$date2-`date -u +%s`]) else date=$(echo $[$date1-`date -u +%s`]) fi

# засыпаем sudo rtcwake -m mem -s $date

# устанавливаем громкость amixer -q set Master $volume%

echo "нажмите ENTER для выключения" mplayer_start

# повышаем уровень громкости while true ; do amixer sset Master 1%+ &> /dev/null volume=$(( $volume+1 )) if [ $volume -eq $volume_max ] ; then break fi sleep 1 # задержка повышения громкости done &

read; mplayer_start false

К сожалению у меня rtcwake с ключиком -t не работало, похоже это особенность железа, по этому просто пришлось вычислять время просыпания в секундах.
Тут просто, если задаешь время когда должен проснуться комп, если реальное время в системе больше заданного времени, то комп просыпается в заданное время на следующий день, если же меньше то просыпается в заданное время в этот же день.

Войдите или зарегистрируйтесь, чтобы ответить.