mini COMO FAZER sobre Sinais Sonoros (Beeps) Alessandro Rubini, rubini@linux.it v2.2, 11 de novembro de 1997 Este documento explica como usar o termcap para configurar uma campainha no sistema e descreve como desativar sinais sonoros. ______________________________________________________________________ Índice geral 1. Introdução 2. Extrair os alto-falantes 3. Configuração do Beep pelo console 4. Conceitos Básicos sobre o Termcap e o Terminfo 5. Definindo uma Campainha Visível 6. Desabilitando a Campainha Audível no Console do Texto 7. Dizendo às Aplicações para evitar os sinais sonoros 8. o Lado Escuro do Problema ______________________________________________________________________ 11.. IInnttrroodduuççããoo O controlador do console do Linux produz um sinal audível se um caracter BEL é a saída (7 do código ASCII). Ainda que esta seja uma escolha certa para o comportamento padrão, muitos usuários não gostam de seus computadores com o beep. Este >mini COMO FAZER explica como falar às aplicações para que suas saídas não possuam o código BEL, e também explica como instruir o kernel e o Sistema X Window para evitar o beep quando um BEL é a saída. Observe que a maioria deste documento se refere ao console, como configurar o servidor X é uma armadilha fácil para qualquer usuário que trabalha com um ambiente gráfico. Na minha opinião o melhor modo de enfrentar um computador complicado é consertando o hardware, e o meu próprio computador não carrega ainda um alto-falante. 22.. EExxttrraaiirr ooss aallttoo--ffaallaanntteess Cortar os alto-falantes é de longe a solução mais brilhante para o problema da dos sinais sonoros. Como o seu nome sugere, consiste em remover os sinais sonoros (beeps) pela remoção do beeper (dispositivo). A operação é direta e você não precisa de nenhum anestésico, mas se você quiser existe uma sala para purificação... Os PC's são geralmente equipados com uma inocente interruptor para abaixar o clock da CPU; ele nunca é usado quando você trabalha em um ambiente multitarefa, pois você não precisa reduzir a velocidade do computador cada vez que você executar jogos baseados em loops. Infelizmente você não pode usar o interruptor para aumentar a velocidade do processador, mas pode usá-lo para habilitar/desabilitar os alto-falantes. Algumas vezes o alto-falante é útil se você aprecia um ruído respectivo, como por exemplo o sinal de finalização de uma compilação prolongada. Para modificar a funcionalidade do interruptor, apenas separe-o da placa mãe e conecte os seus fios em série com o alto-falante. Os proprietários de laptops, infelizmente, não têm acesso fácil aos alto-falantes e não possuem nenhum interruptor separado para converter uma tarefa diferente. A solução preferida para tais usuários é configurar seu software para permitir os sinais, como descrito acima. 33.. CCoonnffiigguurraaççããoo ddoo BBeeeepp ppeelloo ccoonnssoollee Assim como o Linux 1.3.43, Martin Mares adicionou a capacidade de configurar a densidade e a duração do Beep, modificando o console.c. Cada console pode ser configurado para caracterizar uma duração diferente de densidade do som do sinal; a tarefa é realizada pelo uso de seqüências de escape para o dispositivo do console. Você pode configurar o seu próprio arquivo ~/.profile ou ~/.login para selecionar um diferente som associado a cada console (ou sem som, se necessário). As seqÜências de escape trabalham como a seguir: · ESC-[10;xx] seleciona a freqüência do som em Hertz. O valor deve estar na faixa de 21-32766, caso contrário o resultado não é definido. Se o argumento `xx' está faltando, o valor padrão (750Hz) será aplicado, como em `ESC-[10]. · ESC-[11;xx] seleciona a duração do sinal, em milisegundos. Se você especificar mais que 2 segundos, o padrão é aplicado (125ms). Novamente, se o argumento `xx' está faltando, o valor padrão será usado (ESC-[11]). Para selecionar, por exemplo, uma densidade de 50Hz para a duração de um segundo, você pode usar "echo -e "\\33[10;50]\\33[11;1000]"" com o bash (onde "-e" significa `compreensão das seqüências de escape'). Se você usa o tcsh, o mesmo comando forma "echo "\\033[10;50]\\033[11;1000]"". Embora eu não conheça qualquer versão do comando setterm que suporta tal configuração, uma versão futura do comando poderá suportar uma opção da linha de comando para configurar um som de campainha. Se está executando o Linux-1.3.43 ou um mais novo, você pode estar satisfeito com as seqüências de escape e permitir a leitura posterior. Se você está executando um kernel velho, ou se quer um sinal sonoro, você apreciará o resto deste documento. 44.. CCoonncceeiittooss BBáássiiccooss ssoobbrree oo TTeerrmmccaapp ee oo TTeerrmmiinnffoo O arquivo /etc/termcap é um arquivo de texto que lista as funcionalidades de um terminal. Várias aplicações usam a informação do termcap para mover o cursor sobre a tela e fazer outras tarefas na tela. O tcsh, o bash e o vi e todas as aplicações baseadas em cursores usam a base de dados do termcap. A base de dados descreve os vários tipos de terminais. A variável de ambiente TERM seleciona o comportamento correto na hora da execução, pela nomeação de uma entrada do termcap para ser usada pelas aplicações. Dentro da base de dados, cada potencialidade do terminal aparece como um código com duas letras e uma representação da seqüência de escape atual usada para obter o efeito desejado. O caracter separador entre as capacidades do terminal são os dois pontos (":"). Como um exemplo, a campainha audível, com o código "bl", usualmente aparece como "bl=^G". Esta seqüência conta que o som da campainha é obtido pela impressão do caracter control-G, o ASCII BEL. Além da potencialidade do bl, a potencilidade do vb é reconhecida. Ela é usada para representar o "som visível". O vb é geralmente perdido na entrada do arquivo termcap no linux. Muitas aplicações modernas e bibliotecas usam a base de dados do terminfo ao invés do termcap; ela usa um arquivo por tipo de terminal e os deixa em /usr/lib/terminfo; para evitar o uso de enormes diretórios, a descrição de cada tipo de terminal está armazenada em um diretório nomeado depois de sua primeira letra; a entrada do linux, conseqüentemente, é /usr/lib/terminfo/l/linux. Para construir uma entrada do terminfo você ``compilará''a descrição do termcap; dirija- se ao programa tic e às suas páginas do manual. 55.. DDeeffiinniinnddoo uummaa CCaammppaaiinnhhaa VViissíívveell Você pode adicionar a entrada para a potencialidade do vb em seu próprio arquivo termcap, se ainda um não está definido. Dennis Henriksen (duke@diku.dk) sugeriu inserir a seguinte linha na entrada do termcap para o Linux ( note que a entrada é chamada console em distribuições velhas): :vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\ A barra invertida é usada para abandonar a linha nova na base de dados. O código de Dennis faz o seguinte (suas próprias palavras): · Salve a posição do cursor (só por questão de segurança). · Mude a cor de fundo várias vezes entre normal e reverso. · Restaure a posição do cursor. 66.. DDeessaabbiilliittaannddoo aa CCaammppaaiinnhhaa AAuuddíívveell nnoo CCoonnssoollee ddoo TTeexxttoo Se você quiser forçar o som visível no seu console você pode usar a entrada "bl" no termcap e defini-la com a mesma string sugerida pelo "vb" acima. Esta abordagem é conveniente se você não quer pesonalizar cada aplicação (que é descrita abaixo de qualquer jeito). Eu uso esta opção em todas as máquina onde eu possa rodar o Linux e onde eu não possa separar os alto-falantes. 77.. DDiizzeennddoo ààss AApplliiccaaççõõeess ppaarraa eevviittaarr ooss ssiinnaaiiss ssoonnoorrooss Esta é uma lista incompleta de aplicações que podem ser instruídas para usar a entrada vb para o tipo de terminal atual (usando ou a informação do termcap ou a do terminfo): · O servidor X: use o comando "xset b" para selecionar o comportamento dos sinais sonoros. O comando toma três argumentos numéricos: volume, densidade e duração. "xset -b" desabilita completamente o som. A configuração do servidor X afeta todos os aplicativos que estão rodando na tela. · xterm: o xterm pode converter cada som ou para um sinal visível ou um sinal audível. Se você usa o sinal audível, os ajustes ao "xset" serão aplicados. O padrão da campainha no xterm é o audível, mas você pode usar a opção da linha de comando "-vb" e o recurso "xterm*visualBell: true" para movê-lo para um sinal luminoso visível. Você pode juntar os sinais audível/visível na hora da execução pelo uso do menu invocado pelos botões control-botão esquerdo do mouse. Se você executar o X muito provavelmente precisará da informação a seguir. · tcsh (6.04 e posterior): "set visiblebell". A instrução pode ser colocada no .cshrc ou pode ser distribuída interativamente. Para restaurar o sinal audível apenas digite "unset visiblebell". Para desabilitar qualquer notificação em vez disso use "set nobeep". · bash (qualquer bash): coloque "set bell-style visible" em seu ~/.bashrc. Os estilos possíveis do sinal sonoro também são "none" (nenhum) ou "audible" (audível). · bash (com o readline, tão bem como outras aplicações baseadas no readline): coloque "set prefer-visible-bell" no arquivo ~/.inputrc. · nvi e elvis: coloque "set flash" no ~/.exrc ou digite ":set flash" interativamente (observe os dois pontos). Para desabilitar o sinal sonoro visível use noflash no lugar de flash. · emacs: coloque "(setq visible-bell t)" no seu ~/.emacs. Ele é desabilitado pelo "(setq visible-bell nil)". · less: use o "-q" na linha de comando para usar o sinal sonoro visível, e use "-Q" para desabilitar qualquer informação. As opções padrão podem ser colocadas na sua variável de ambiente "LESS". · screen: emita o comando CtrlA-CtrlG; ele muda o comportamento de todas as telas virtuais. Dirija-se a página do manual sobre "CUSTOMIZATION" (personalização) para ajustar no modo padrão. 88.. oo LLaaddoo EEssccuurroo ddoo PPrroobblleemmaa A má notícia é que nem toda aplicação usa o termcap ou o terminfo. Muitos programas pequenos configuram os caracteres "\a" (barra invertida - a =alarme) no código fonte do C. O código do "alarme" torna-se nas strings um ASCII BEL literal como armazenado no binário executável. As aplicações reais usualmente não falham nesta categoria, mas seja cuidadoso com iniciantes do C que oferecem a você os seus próprios programas. O único modo de fazer estas aplicações silenciosas é cortando os alto- falantes, ou usando as seqüências de escape de Martin Mares.