Campana-Visual Mini-COMO <author>Alessandro Rubini, <tt><htmlurl url="mailto:rubini@linux.it" name="rubini@linux.it"></tt>&nl; Traducido por Iosu Santurtún, <tt><htmlurl url="mailto:sorgina@sidam.es" name="sorgina@sidam.es"></tt> <date>v2.1, Agosto de 1996. Fecha de la traducción 3 de Junio de 1998 <abstract> Este documento muestra el uso de <tt>termcap</tt> para configurar una campana visual en el sistema propio y describe cómo deshabilitar las campanas sonoras al gusto de cada uno. </abstract> <toc> <sect>Introducción <label id="intro"> <p> El manejador de consola de Linux emite un sonoro pitido siempre que se produce la salida de un caracter <tt/BEL/ (código ASCII 7). Aunque ésta es una buena elección para el comportamiento por defecto, a determinados usuarios no les agrada que el computador les pite (N. del T.: a mi, por ejemplo). Este miniCOMO está orientado a explicar cómo decirles a las aplicaciones que no produzcan el código <tt/BEL/ como salida. También se proporcionan indicaciones para enseñar al núcleo y al sistema X a evitar el pitido cuando se produce la salida de un <tt/BEL/. La mayor parte del documento se refiere a la consola de texto, ya que la configuración de este aspecto en un servidor X es sencilla para cualquier usuario que trabaje en un entorno gráfico. En mi opinión, la mejor solución para enfrentarse a un computador ruidoso es arreglar el <it/hardware/, así que mi computador ni siquiera lleva altavoz. <sect><it>Altavozectomía</it> <p> La <it/altavozectomía/ es con mucho, la solución más brillante para la campana sonora. Como su nombre indica, consiste en acabar con los pitidos extirpando el altavoz. Esta operación es directa y ni siquiera se necesita anestesia, pero también hay lugar para el refinamiento si se desea. Normalmente los PCs están equipados con un estúpido interruptor para cambiar el reloj de la placa a una velocidad inferior. Este interruptor es innecesario cuando se trabaja en un entorno multitarea, ya que no es necesario enlentecer el computador para ejecutar juegos basados en bucles de <it/software/. Desafortunadamente no se puede usar el interruptor para aumentar la velocidad del procesador, pero podemos convertirlo en un interruptor que habilite/deshabilite el altavoz. A veces el altavoz es útil incluso aunque se desee una máquina machaca-numeros silenciosa, por ejemplo, para indicar el final de una lenta compilación. Para modificar la funcionalidad del interruptor, únicamente sepárelo de la placa madre y conecte sus hilos en serie con el altavoz. Los poseedores de portátiles, desafortunadamente, no tienen fácil acceso al altavoz, y tampoco tienen un interruptor libre para dedicarlo a otra tarea. La solución preferible para tales usuarios es intentar configurar su <it/software/ para evitar el pitido. <sect>Configuración del pitido en consola <p> A partir de Linux 1.3.43, Martin Mares añadió la opción de configurar la campana sonora en <tt/console.c/. Se puede cambiar la duración y el tono del pitido independientemente en cada consola, escribiendo secuencias de escape en la <tt/tty/. Se puede guardar una configuración personalizada en el propio <tt>˜/.profile/</tt> o <tt>˜/.login/</tt>, para tener un pitido diferente (o no tener pitido) asociado a cada consola. Las secuencias de escape funcionan de la siguiente manera: <itemize> <item> <tt/ESC-[10;xx]/ selecciona la frecuencia de la campana en Hercios. El valor debe estar en el rango 21-32766, de otro modo el resultado es impredecible (por lo menos hasta la versión 2.0.x -- no puedo predecir el futuro). Si falta el argumento 'xx', se aplica el valor por defecto (750 Hz), como en <tt/ESC-[10]/. <item> <tt/ESC-[11;xx]/ selecciona la duración de la campana en milisegundos. Si se especifican más de 2 segundos, se aplica el valor por defecto (125 ms). De nuevo, si falta el argumento 'xx' (<tt/ESC-[11]/) se utilizará el valor por defecto. </itemize> Para seleccionar, por ejemplo, un tono de 50Hz y 1 segundo de duración, se puede probar <tscreen><verb> echo -e "\33[10;50]\33[11;1000]" </verb></tscreen> en <tt/bash/ (donde <tt/"-e"/ significa 'interpretar secuencias de escape'). Con <tt/tcsh/ <tscreen><verb> echo " 33[10;50] 33[11;1000]" </verb></tscreen> tendrá el mismo efecto. Aunque no conozco ninguna versión del comando <tt/setterm/ que soporte dicha configuración, una versión futura podría soportar una opción de línea de comando para configurar el sonido de la campana. Si utiliza Linux 1.3.43 o superior, debe estar satisfecho con las secuencias de escape, y evitará tener que seguir leyendo. Si utiliza algún núcleo antiguo (yo lo hago, en mi pequeño 386), o si desea una campana visual, siga leyendo. <sect>Conceptos básicos sobre <tt/termcap/ <p> El fichero <tt>/etc/termcap/</tt> es un fichero de texto que lista las capacidades de la terminal. Numerosas aplicaciones utilizan la información de termcap para mover el cursor por la pantalla y realizar otras tareas relacionadas con la pantalla. <tt/tcsh/, <tt/bash/, <tt/vi/ y todas las aplicaciones basadas en <tt/curses/ usan la base de datos de <tt/termcap/. La base de datos representa varios tipos de terminal. La variable de entorno <tt/TERM/ selecciona el comportamiento correcto en tiempo de ejecución, nombrando una entrada de <tt/termcap/ para que sea usada por las aplicaciones. Dentro de la base de datos, cada capacidad está aparece como un código de dos letras y una representación de la secuencia de escape real utilizada para conseguir dicho efecto. El caracter separador entre diferentes capacidades son los dos puntos (":"). Como ejemplo, la camapana sonora, con código "<tt/bl/" ("bell", campana), se representa normalmente por el string "<tt/bl=^G/", que indica a las aplicaciones que usen el caracter <tt/control-G/, el <tt/BEL/ de ASCII. Además de la capacidad <tt/bl/, hay una capacidad <tt/vb/, que representa la campana visual ("visual bell"). <tt/vb/ normalmente no aparece en la entrada de consola en el <tt>/etc/termcap/</tt> de Linux. Las aplicaciones y librerías más modernas utilizan la base de datos <tt/terminfo/ en lugar de <tt/termcap/. Esta base de datos utiliza un fichero por cada tipo de terminal y se encuentra en <tt>/usr/lib/terminfo</tt>; para evitar directorios enormes, la descripción de cada tipo de terminal se guarda en un directorio nombrado con su primera letra; la entrada <tt/linux/ es, por tanto <tt>/usr/lib/terminfo/l/linux</tt>. Para construir una entrada <tt/terminfo/ habrá que 'compilar' la descripción de <tt/termcap/. Véase el programa <tt/tic/ y su página del manual. <sect>Definir una campana visual <p> Se puede añadir la entrada para la capacidad <tt/vb/ en el fichero <tt/termcap/ propio. Dennis Henriksen, <tt><htmlurl url="mailto:duke@diku.dk" name="duke@diku.dk"></tt> sugirió insertar la siguiente línea en la entrada 'linux' del fichero <tt/termcap/ (en las distribuciones antiguas esta entrada se conoce como 'console'): <tscreen><verb> :vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\ </verb></tscreen> La última barra se utiliza para escapar el caracter de nueva línea en la base de datos. El código de Dennis hace lo siguiente (según sus propias palabras): <itemize> <item> Salvar la posición del cursor (precaución de seguridad). <item> Cambiar el color de fondo varias veces entre normal y video inverso. <item>Restaurar la posición del cursor. </itemize> <sect>Deshabilitar la campana sonora en la consola de texto <p> Si quiere forzar una campana visual en su consola, puede reemplazar la entrada "<tt/bl/" en el <tt/termcap/ con la misma cadena literal sugerida para "<tt/vb/" antes. Este enfoque puede evitarle el tener que adecuar cada aplicación. Yo me decanto por esta opción en todas las máquinas en las que puedo usar Linux y no puedo quitar el altavoz. <sect>Avisar a las aplicaciones <p> Esta es una lista incompleta de aplicaciones a las que se puede obligar a usar la entrada <tt/vb/ para el tipo de terminal actual (ya sea usando la información de <tt/termcap/ o la de <tt/terminfo/): <itemize> <item>el servidor X: utilize el comando '<tt/xset b/' para seleccionar el comportamiento de la campana. Este comando tiene 3 argumentos numéricos: volumen, tono y duración. '<tt/xset -b/' deshabilita la campana. La configuración del servidor X afecta a todas las aplicaciones que se ejecuten en la pantalla. <item><tt/xterm/: <tt/xterm/ puede convertir cada pitido en una señal visible o audible. Si utiliza la campana sonora, se aplicarán los valores de <tt/xset/. Por defecto la campana en <tt/xterm/ es sonora, pero puede usar la opción de línea de comando '<tt/-vb/' y el recurso <tt/xterm*VisualBell: true/ para convertirla en un destello visible. Se puede cambiar la señalización visible/audible en tiempo de ejecución utilizando el menú invocado al pulsar <tt/control+botón izq. del ratón/. Si suele utilizar X seguramente no necesite la información siguiente. <item><tt/tcsh/ (6.04 y superior): '<tt/set visible bell/'. La instrucción puede aparecer en el <tt/.cshrc/ o se puede introducir interactivamente. Para restaurar la campana sonora vale con '<tt/unset visiblebell/'. Para deshailitar cualquier notificación introduzca '<tt/set nobeep/'. <item><tt/bash/ (cualquier bash, por lo que yo se): ponga '<tt/set bell-style visible/' en su <tt>&tilde/.bashrc/</tt>. Los valores posibles para <tt/bell-style/ son '<tt/none/' (niguno) o '<tt/audible/' (sonoro). <item><tt/bash/ (con readline, así como otras aplicaciones basadas en <tt/readline/): ponga '<tt/set prefer-visible-bell/' en <tt>&tilde/.inputrc/</tt>. <item><tt/nvi/ y <tt/elvis/: ponga '<tt/set flash/' en <tt>&tilde/.exrc/</tt> o introduzca '<tt/:set flash/' interactivamente (ojo con los dos puntos). Para deshabilitar la campana use '<tt/noflash/' en lugar de '<tt/flash/'. <item><tt/emacs/: ponga '<tt/(setq visible-bell t)/' en su <tt>~/.emacs/</tt>. Se deshabilita con '<tt/(setq visible-bell nil)/'. <item><tt/less/: use '<tt/-q/' en la línea de comando para utilizar la campana visual, use '<tt/-Q/' para deshabilitar cualquier acción. Las opciones por defecto se pueden añadir en su variable de entorno <tt/LESS/. <item><tt/screen/: utilice la combinación CtrlA-CtrlG. Funciona en todas las pantalla virtuales. Vea la página del manual en la sección <tt/customization/ para los valores por defecto. </itemize> <sect>El lado oscuro del problema <p> La mala noticia es que no todas las aplicaciones se basan en <tt/termcap/ o en <tt/terminfo/. La mayoría de los programas pequeños tienen la secuencia <tt/"\a"/ (alarma) en su código fuente C. Estos caracteres se convierten en el <tt/ASCII BEL/ en el binario ejecutable. Las aplicaciones reales no suelen caer en este fallo, pero cuidado con los novatos en C que le dan sus propios programas; los estudiantes de informática son los peores, garantizado. La única manera de hacer callar el altavoz con estas aplicaciones es la altavozectomía, o usar las secuencias de escape de Martin Mares. <sect>Anexo: El INSFLUG <label id="Grupos"> <p> El <em/INSFLUG/ forma parte del grupo internacional <it/Linux Documentation Project/, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés. En el <bf/INSFLUG/ se orienta preferentemente a la traducción de documentos breves, como los <em/COMOs/ y <em/PUFs/ (<bf/P/reguntas de <bf/U/so <bf/F/recuente, las <it/FAQs/. <tt/:)/ ), etc. Diríjase a la sede del INSFLUG para más información al respecto. En la sede del INSFLUG encontrará siempre las <bf/últimas/ versiones de las traducciones: <tt><htmlurl url="http://www.insflug.org" name="www.insflug.org"></tt>. Asegúrese de comprobar cuál es la última versión disponible en el Insflug antes de bajar un documento de un servidor réplica. Se proporciona también una lista de los servidores réplica (<it/mirror/) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano. Francisco José Montilla, <tt><htmlurl url="mailto:pacopepe@insflug.org" name="pacopepe@insflug.org"></tt>. </article>