Сколько там, почти полгода прошло с предыдущего поста? Пожалуй, пора нарушить тишину еще одной заметкой про Linux. Как раз в долгом ящике томилась история про beep.
Что такое beep? Это утилита для подачи звуковых сигналов через встроенный динамик (или пьезопищалку, она же PC-speaker), который мы обычно слышим после процедуры POST при включении компа, либо в играх времен DOS. Казалось бы, для настольного ПК это по большей части бесполезный атавизм, но в моем случае речь идет про подстольный ПК, он же сервер, он же хранилище. Колонки и монитор к нему не подключены, и на фоне этого факта PC-speaker выглядит вполне неплохим способом оповещать о состоянии машины.
В общем, применение этой штуке найти можно. Осталось заставить ее работать.
Для начала утилиту, как обычно, нужно установить
sudo apt install beep
Затем можно просто написать в консоли beep (ради короткого писка), либо проявить фантазию и параметрами задать частоту и время
beep -f 1174 -l 500 -n -f 1046 -l 250
Слышно что-нибудь? Нет? Добро пожаловать в клуб.
Поиск решения в интернете привел меня к вот такой команде
sudo modprobe pcspkr
После этого beep начал подавать признаки жизни. Другими словами, PC-speaker был просто отключен, а с помощью modprobe мы включили его, загрузив соответствующий модуль ядра.
Впрочем, это еще не все. Такое действие будет иметь силу только до перезагрузки. Чтобы включить спикер навсегда, попробуйте заглянуть в файл /etc/modprobe.d/blacklist.conf. На Linux Mint я нашел там следующие строки:
# ugly and loud noise, getting on everyone's nerves; this should be done by a
# nice pulseaudio bing (Ubuntu: #77010)
blacklist pcspkr
То есть кто-то с нежными ушами обругал спикер и отключил его миллионам пользователей. Хотя логика этого поступка в принципе ясна - большинству людей он и не нужен. Понятно, что для наших целей blacklist pcspkr надо закомментировать или удалить.
Так же некоторые мануалы содержат дополнительные телодвижения типа создания каких-то файлов, но я у себя таких действий не помню и следов подобных действий не вижу. Похоже, зависит от дистрибутива.
Но и это еще не все! Как выяснилось, пиликать сидя за компом - это одно дело, и совсем другое - пиликать скриптом из крона или удаленно через ssh. Решение второй проблемы содержится в PERMISSIONS.md. Надо создать клуб любителей пищать группу beep
addgroup --system beep
И затем создать правило, которое через ACL дает группе beep права на запись в спикер. В моем случае мощное заклинание записано в файле /etc/udev/rules.d/70-pcspkr-beep.rules (не обязательно было делать это в /lib, и заодно отделил свои правила от дефолтных)
# Add write access to the PC speaker for the "beep" group
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", RUN+="/usr/bin/setfacl -m g:beep:w '$env{DEVNAME}'"
Правильность настойки можно проверить командой getfacl
getfacl /dev/input/by-path/platform-pcspkr-event-spkr
И после этого мои скрипты, запускаемые кроном, наконец-то запели. Ну и руками через ssh тоже все отлично получается.
Теперь, когда все работает, можете попробовать угадать мелодию с семи нот
#!/bin/bash
#coded by dez
beep -f 466 -l 200 -n -f 494 -r 2 -l 90 -D 10 -n -f 494 -r 1 -l 190 -D 10
beep -f 466 -l 200 -n -f 494 -r 2 -l 90 -D 10 -n -f 494 -r 1 -l 190 -D 10
beep -f 466 -l 200 -n -f 494 -r 2 -l 90 -D 10 -n -f 494 -r 1 -l 190 -D 10
beep -f 466 -l 200 -n -f 494 -r 2 -l 90 -D 10 -n -f 494 -r 1 -l 190 -D 10
beep -f 493 -l 200 -n -f 466 -l 200 -n -f 440 -l 200 -n -f 392 -l 200 -n -f 329 -l 200
Если что - это из игры, где есть шикарный инженер и еще 8 каких-то чуваков.
На этом пока все, удачного пищания для пользы и не только :)
Сообщение может быть отклонено, если содержит спам, противозаконный контент, а так же оскорбления и грубость по отношению к другим участникам обсуждения.