PC speaker (Русский)
Начиная с первых IBM PC, большинство компьютеров имеют встроенный динамик (PC speaker, «пищалка»), который может издавать звуковые сигналы. Этот динамик не способен обеспечить высокое качество звука и лишь используется для обратной связи в виде звуковых сигналов. Некоторые программы, например, веб-браузеры, редакторы и терминалы, могут издавать звуковые сигналы, которые могут как нравиться, так и не нравиться пользователю. Поэтому данная статья описывает, как настроить или даже отключить такие звуковые сигналы.
Для случаев, когда нет звуковой карты или динамиков, и требуется простое аудио оповещение, смотрите раздел #Beep.
Механизм
Динамик ПК обычно представляет собой физическое устройство, подключаемое к разъёму для передней панели на материнской плате. Некоторые производители плат вообще не комплектуют их динамиком, а у некоторых динамик может быть припаян прямо на плате. На ноутбуках обычно нет такого динамика, а звуковой сигнал выводится на обычные внутренние динамики ноутбука. В некоторых случаях звуковой сигнал подаётся на обычный выход (колонки, наушники) звуковой карты и может оказаться неожиданно громким.
Обычно BIOS при загрузке издаёт один короткий звуковой сигнал во время POST. В более современных моделях материнских плат звуковой сигнал POST отсутствует ради более быстрой загрузки в ОС. BIOS обычно позволяет включить или выключить звуковые сигналы POST, но не позволяет полностью отключить встроенный динамик.
После загрузки Linux и модуля ядра pcspkr
встроенный динамик может использоваться окружением, вызываться пользователем вручную и в некоторой степени настраиваться. Поскольку он управляется напрямую процессором, а также в силу того, что он предназначен только для воспроизведения звуковых сигналов, его нельзя использовать для воспроизведения аудиофайлов. Но если очень хочется, то можно вместо модуля pcspkr
попробовать snd-pcsp-dkmsAUR, который реализует примитивный аудиовывод.
Отключение PC Speaker
Отключение конкретного источника звука, в то время, когда остальные продолжают работать, возможно только в том случае, если мы может определить какая часть окружения сгенерировала конкретный звук. Это позволяет выборочно настраивать звуки. Пожалуйста, размещайте свои примеры настроек и конфигураций, которые могут оказаться полезными для других пользователей.
Физически
После удаления встроенного динамика система не сможет издавать звуковые сигналы. На некоторых платах можно физически отсоединить динамик от неё. Некоторые производители устанавливают джампер для его отключения.
Глобально
PC speaker может быть отключен выгрузкой модулей ядра pcspkr
и snd_pcsp
:
# rmmod pcspkr # rmmod snd_pcsp
Помещение в чёрный список модулей pcspkr
и snd_pcsp
предотвратит их загрузку через udev при загрузке системы. Создайте такой файл:
/etc/modprobe.d/nobeep.conf
blacklist pcspkr blacklist snd_pcsp
Размещение в чёрном списке в командной строке ядра — ещё один способ добиться похожего эффекта. Просто добавьте module_blacklist=pcspkr,snd_pcsp
в параметры ядра в настройках вашего загрузчика.
Терминал
Вы можете добавить эту команду в /etc/profile
или в отдельный файл вроде /etc/profile.d/disable-beep.sh
:
setterm -blength 0
Другой способ - это раскомментировать или добавить строку в /etc/inputrc
или ~/.inputrc
:
set bell-style none
Less
Для отключения PC speaker при использовании утилиты less, вы можете запустить её с параметром less -q
, чтобы заглушить PC speaker по достижении конца постраничного вывода, или less -Q
чтобы отключить повсеместно. Для получения справки, выполните man -P "less -Q"
или настройте переменные окружения $MANPAGER
или $PAGER
.
Также, вы можете добавить следующие строки в ваш .bashrc:
alias less='less -Q' alias man='man -P "less -Q"'
Xorg
$ xset -b
Можно добавить эту команду в файл запуска, например /etc/xprofile
, чтобы сделать её постоянной; смотрите статью xprofile (Русский).
ALSA
Для большинства звуковых карт PC speaker отображается как канал ALSA, и может называться как PC Speaker, PC Beep, или Beep. Чтобы заглушить динамик, воспользуйтесь alsamixer или amixer.
$ amixer set 'PC Speaker' 0% mute
Для включения звука обратитесь к странице руководства Advanced Linux Sound Architecture#Unmuting the channels.
GNOME
При использовании GSettings:
$ gsettings set org.gnome.desktop.wm.preferences audible-bell false
KDE Plasma
Настроить звуковые сигналы можно через Параметры системы > Специальные возможности > Сигнал.
Cinnamon
В Cinnamon, похоже, используется звук «падающей капли». Для его отключения измените в gsettings(1):
$ gsettings set org.cinnamon.desktop.wm.preferences audible-bell false
GTK
Добавьте следующую строку в ~/.gtkrc-2.0
:
gtk-error-bell = 0
Добавьте такую же строку в секцию [Settings] файла $XDG_CONFIG_HOME/gtk-3.0/settings.ini
:
[Settings] gtk-error-bell = 0
Подробно это рассмотрено в Gnome Developer Handbook.
PulseAudio
В качестве реакции на X11 bell events можно воспроизводить звук через PulseAudio; смотрите PulseAudio (Русский)#Сигналы событий X11.
Beep
Пользователь может запустить короткий звуковой сигнал, когда он работает в виртуальной консоли; смотрите Wikipedia:Bell character#Usage.
Beep - это улучшенная программа для подачи звукового сигнала посредством PC speaker. Она может оказаться востребована в ситуациях, когда звуковая карта отсутствует или нет доступных динамиков, но требуется простое звуковое уведомление.
Установка
Установите пакет beep.
Возможно, вам потребуется включить звук канала PC speaker в ALSA.
Запуск от имени обычного пользователя
Для управления встроенным динамиком beep
использует /dev/input/by-path/platform-pcspkr-event-spkr
. Чтобы получить к нему доступ как обычный пользователь (не root), нужно задать соответствующие разрешения. Создайте файл /etc/udev/rules.d/70-pcspkr-beep.rules
с таким правилом:
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", TAG+="uaccess"
Это позволит любому пользователю, работающему в активной в данный момент виртуальной консоли, использовать PC speaker.
Другой вариант — создать новую группу пользователей (например, beep
) с соответствующим правилом для установки нужных разрешений на файл устройства:
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", GROUP="beep", MODE="0620"
Тогда любой пользователь, входящий в группу beep
, сможет управлять динамиком.
Чтобы принудительно перезагрузить правила и применить новые права без перезагрузки, выполните:
# udevadm control --reload && rmmod pcspkr && modprobe pcspkr
Советы и рекомендации
В то время, как большинство пользователей устраивает звуковой сигнал по умолчанию, некоторые, возможно, захотят его слегка изменить. Следующий пример позволит сделать звуковой сигнал выше и короче, и повторит два раза.
# beep -f 5000 -l 50 -r 2
Смотрите также
- xset(1), setterm(1), bash(1)
- https://github.com/NaWer/beep и https://github.com/ShaneMcC/beeps — репозитории, в которых собраны bash-скрипты, воспроизводящие различную музыку с помощью beep