1 (09.01.2012 20:11:13 отредактировано riso)

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

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 и заполним его содержимым

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

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

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

2

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

# Устанавливаем значение громкости в 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 при необходимости:

 Консоль:
at -f script.sh hh:mm

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

3

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

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

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

4

мой вариант:

 Консоль:
mpg123 `find | cat | shuf | tail -n1`

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

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

5

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

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

6

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

95% процентов проблем находятся между клавиатурой и стулом.

7

Fat-Zer пишет:

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

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

Fat-Zer пишет:

выпендрёжник=)

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

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

8

riso пишет:

Про shuf не знал

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

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

9

riso пишет:

if [ `date +%A` != Sanday ]

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

Да, у меня Ubuntu.
Нет, не глючит.

10

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

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

11

-=Serj=- пишет:
riso пишет:

if [ `date +%A` != Sanday ]

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

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

Используйте в этом случае

 Консоль:
date +%u

1 == понедельник.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

12

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

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

#!/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 не работало, похоже это особенность железа, по этому просто пришлось вычислять время просыпания в секундах.
Тут просто, если задаешь время когда должен проснуться комп, если реальное время в системе больше заданного времени, то комп просыпается в заданное время на следующий день, если же меньше то просыпается в заданное время в этот же день.