//

Программы (Автор: dez)

Сколько там, почти полгода прошло с предыдущего поста? Пожалуй, пора нарушить тишину еще одной заметкой про 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 каких-то чуваков.

На этом пока все, удачного пищания для пользы и не только :)

Статья опубликована 2023-02-19 10:51:14, её прочитали 4404 раз(а).

Внимание! Комментарии публикуются после проверки (что занимает некоторое время).
Сообщение может быть отклонено, если содержит спам, противозаконный контент, а так же оскорбления и грубость по отношению к другим участникам обсуждения.

Добавить комментарий