Когда-то, уже достаточно давно мне понадобился будильник, достаточно громкий, чтобы поднять мертвого, достаточно разнообразный, чтобы не надоедать и при этом достаточно тяжело выключаемый, чтобы не делать этого "на автомате". Всем этим требованиям отлично соответствовал персональный компьютер и решение этой несложной задачи было найдено при помощи интернет-радио и двух консольных утилит: cron и rtcwake.
Время шло, импровизированный “будильник” великолепно справлялся с задачей, хотя и оставался при этом не самым удобным в плане эксплуатации, все-таки для изменения его приходилось править конфиги, а команду на засыпание вводить в терминал напрямую. Так продолжалось почти год, но совсем недавно один знакомый, недавно перешедший на Ubuntu Linux, попросил рассказать ему о таком чудесном явлении, как командная строка и ее интерпретаторе bash. Поскольку обучение даже самым азам программирование в отрыве от практики по моему глубокому убеждению бесполезно, была написана написана статья, которую я представляю вашему вниманию.
Несмотря на то, что основной целью является все-таки обучение азам работы с bash, скрипт, получающийся в итоге вполне можно использовать и по прямому назначению: то есть в качестве будильника.
Содержание статьи
Что такое Bash
Одной из самых интересных особенностей операционных систем на базе GNU/Linux является bash. Bash это интерпретатор командной строки, по сути, скриптовый язык программирования, на котором вполне возможно писать достаточно сложные программы, так называемы shell-скрипты или сценарии. Естественно, что на фоне более “серьезных” собратьев по семейству интерпретируемых языков, подобных java или python, функциональность bash смотрится куда более бедно, но зато он плотно интегрирован в саму систему, а это означает, что значительно проще наладить взаимодействие между ним и многими системными утилитами.
Что нам необходимо
С тех заданием все просто: нам необходим простой, надежный, громкий и разнообразный будильник, который сможет поднять мертвеца. И написан он должен быть исключительно на Bash, то есть системными средствами Linux.
Инструменты:
- Bash - это, я думаю, понятно любому, интерпретатор командной строки, часть любого Linux - дистрибутива.
- rtcwake - встроенный в ядро инструмент, позволяющий использовать драйвер для RTC (Real Time Clock), поддерживающий стандартные флаги для просыпания.
- cron - планировщик задач. Уже установлен в большинстве дистрибутивов.
Создание будильника на Bash
Для начала изготовим скрипт, представляющий собой сигнал будильника. Создаем папку wakeupdude (название строго индивидуально и отражает ваше чувство юмора (да, у меня все с ним плоховато) и серьезность отношения к поставленной задаче), в этой папке создаем файл alarm.sh.
Содержимое файла может быть различным, но я решил, что моим будильником будет любимая интернет-радиостанция, поэтому в моем случае все выглядит так:
cromium-browser https://radio.yandex.ru/user/zmeigorynych3
Сохраняем. Открываем терминал в этой же папке и прописываем:
sudo chmod +x alarm.sh
Вообще, советую запомнить эту команду, поскольку она позволяет, используя терминал присвоить любому файлу любые права доступа ( “+x” означает, что файл отныне будет исполняемым).
В принципе, здесь можно использовать не только интернет-радио, но и запуск музыкальным плеером определенного файла или плей-листа.
Сигнал готов, теперь приступаем к написанию основного скрипта, который будет отвечать за “завод” нашего будильника. Сперва создаем в нашей папке файл wake.sh , в котором записываем следущее:
Теперь сохраняем файл и с помощью команды chmod +x даем ему права исполняемого. В принципе, наш будильник готов, но, поскольку мы живем в благословенном 2018 году, то каждому уважающему себя приложению нужен ярлык на рабочий стол, то мы его и изготовим:
В нужной папке создадим файл с расширением .desktop, откроем этот файл в редакторе, где и пропишем следующее:
Закрываем с сохранением и при следующем запуске выбираем “сделать исполняемым”. Наш будильник готов.
java разве интерпретируемый?
Исходный код на Java -> компилируется в Байт Код ->
JVM -> транслирует команды в -> Машинный код(010101).
Можно конечно и через cron, но, если не стоит задача получения практики в шелле, имеет смысл взять уже готовый user-friendly будильник -- с простой UI-настройкой и минимумом отьедаемых ресурсов. Я, например, пользуюсь стандартным гномовским AlarmClock https://www.linuxlinks.com/AlarmClock (тихо висит в трее, запускает мелодию или плеер/браузер, позволяет ставить пробудку по дням недели и тд.)
всё гениальное придумано до нас, никто не знает про команду at чтоли?
во, у меня даже простая инструкция есть
https://itrus.su/2015/08/28/%D0%B3%D0%B8%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9-%D0%B1%D1%83%D0%B4%D0%B8%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA/
Зачем изобретать велосипед, если есть онлайн будильники(игрушки это всё)
А у меня вот так и не получается запустить, пробовали и браузеры запускать через крон и vlc и я я mplayer, процесс появляется, но окно так и не всплывает, гуглу только намекает, что проблема в переменных, но вот решить задачу не получается, из переменных добавил только DISPLAY=:0, система ubuntu 20.04