Done. >

Мини-HOWTO: Визуализация звукового сигнала

Alessandro Rubini

Перевод: Павел Гашев, ASPLinux

Аннотация

В этом документе содержится информация о том, как визуализировать звуковой сигнал при помощи termcap.


Содержание
Введение
Онемение
Настройка звукового сигнала на каждой консоли
Основные понятия Termcap и Terminfo
Определение визуального сигнала
Отключение звукового сигнала в текстовом режиме
Заставляем приложение замолчать
Другая сторона проблемы
Авторские права

Введение

Драйвер консоли Linux производит звуковой сигнал каждый раз, когда выводится символ BEL (ASCII код 7). Это считается нормальным поведением, но некоторым пользователям не нравится, когда их компьютер начинает пищать. Это мини-HOWTO описывает, как указать приложениям не выводить символ BEL, и как заставить ядро и X-windows не пищать при выводе символа BEL. Замечу, что большая часть этого документа имеет отношение к текстовой консоли; тем не менее любой пользователь, работающий в графическом окружении, может легко понять, как настроить X-сервер.

Хотя, по-моему, лучший выход усмирить нервный компьютер - это отключить динамик (что я и сделал).


Онемение

Онемение (лат. speakerotomy :-) - это самое лучшее решение нашей проблемы. Как следует из названия, она представляет из себя удаление звуковых сигналов путем удаления того, что издает эти сигналы. Операция довольна проста и не требует никаких анестезирующих средств.

Персональный компьютер обычно поставляется с идиотской кнопкой "Turbo", снижающей тактовую частоту процессора. Обычно она никогда не используется, за исключением случаев, когда вы хотите поиграть в старую-добрую игру времен XT. Т.е. обычно мы не используем эту кнопку по прямому назначению, но мы можем легко ее переделать для включения/выключения динамика, т.к. иногда динамик очень даже нужен (например, для уведомления о том, что закончилась продолжительная компиляция). Чтобы это сделать, просто отключите ее от материнской платы и подсоедините провода последовательно с динамиком.

К сожалению, пользователи портативных компьютеров не имеют доступа к динамику, кроме того, у них нет свободной кнопки для этого. Самое лучшее решение для таких пользователей - соответственно настроить программное обеспечение. Что мы и сделаем.


Настройка звукового сигнала на каждой консоли

В Linux 1.3.43, Martin Mares, изменив console.c, добавил возможность настраивать частоту и длительность звукового сигнала. Каждая консоль, при помощи escape-последовательностей, может быть настроена на звуковой сигнал с разной частотой и/или длительностью. Вы можете изменить ~/.profile или ~/.login, настроив разный сигнал для каждой консоли (или вообще его выключить).

Escape-последовательности следующие:

Например для установки звукового сигнала в 50Гц и длительностью в одну секунду, вы можете выполнить "echo -e "\\33[10;50]\\33[11;1000]"" в bash (гдк "-e" означает `используются escape-последовательности'. Если вы пользуетесь tcsh, та же команда выгдядит так "echo "\\033[10;50]\\033[11;1000]"".

Насколько я знаю, команда setterm не поддерживает такую настройку, хотя вполне может быть, что будущие версии будут делать это.

Если у вас Linux-1.3.43 или выше, вас могут удовлетворить escape-последовательности, и можно не читать дальше. Если у вас старое ядро или вы хотите настроить визуальный сигнал, то вам понравится оставшаяся часть документа.


Основные понятия Termcap и Terminfo

/etc/termcap - это текстовый файл, описывающий возможности терминала (terminal capabilities). Различные приложения используют termcap для получения информации о том, как двигать курсор по экрану и т.д. tcsh, bash, vi и другие приложения, основанные на curses, используют базу данных termcap.

База данных описывает различные типы терминалов. Переменная окружения TERM указывает приложениям на соответствующий терминал в termcap.

Внутри базы данных каждая возможность терминала описывается двухбуквенным кодом и представляет из себя escape-последовательность, которую надо вывести, чтобы добиться желаемого эффекта. Для разделения используется символ двоеточия (":"). Например, звуковой сигнал с кодом "bl" обычно описывается как "bl=^G". Это значит, что для звукового сигнала нужно вывести символ Ctrl-G (ASCII BEL).

В дополнении к bl поддерживается код vb Он описывает визуальный сигнал ("visible bell") и обычно отсутствует в файле termcap для терминала linux.

Большинство современных приложений и библиотек вместо termcap используют базу данных terminfo. Эта база данных описывает каждый вид терминала в отдельном файле из каталога /usr/lib/terminfo. Чтобы избежать использования каталога с большим количеством файлов, каждый файл находится в подкаталоге, названном по первой букве названия терминала; например, терминал linux описывается в файле /usr/lib/terminfo/l/linux. Чтобы создать запись в terminfo, вы должны "откомпилировать" описание termcap (man tic).


Определение визуального сигнала

Вы можете добавить запись vb в файл termcap, если там ее еще нет. Dennis Henriksen (duke@diku.dk) предложил вставлять в termcap для терминала linux (в старых дистрибутивах console) следующую строку:
:vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\
Последняя наклонная черта необходима, чтобы избежать перевод строки в файле базы данных. Эта строка выполняет следующее (по словам Dennis'а):


Отключение звукового сигнала в текстовом режиме

Если вы хотите использовать визуальный сигнал вместо звукового, определите в termcap "bl" так же, как "vb" из предыдущего раздела. Этот метод удобен, если вы не хотите настраивать каждое приложение (впрочем, это все равно описывается ниже). Я использую этот способ на всех машинах, где не могу отключить динамик.


Заставляем приложение замолчать

Вот незаконченный список приложений, которые можно заставить использовать визуальный сигнал вместо звукового:


Другая сторона проблемы

Есть плохие новости. Не каждое приложение использует termcap или terminfo. Большинство маленьких программ используют символы '\a' (alarm) прямо в исходном тексте на C. Во время выполнения программы этот символ превращается в ASCII BEL. Реальное приложение обычно не падает под эту категорию, но остерегайтесь новичков в C, дающих вам свои программы. Из них хуже всего студенты, изучающие информатику.

Единственный путь заставить эти программы замолчать - это онемение, или использование escape-последовательностей Martin'а Mares'а.


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу