Alarm wizualny (małe JTZ)

Alessandro Rubini, rubini@linux.it
v2.3, 3 grudnia 2001
Wersja polska: Tomasz 'tsca' Sienicki, tsca@edb.dk
v1.01, 10 grudnia 2001


Jak uciszyć komputer: alarm wizualny zamiast dźwiękowego.
SPIS TREŚCI
  1. Licencja oraz prawa autorskie
  2. Wstęp
  3. Głośniczkotomia
  4. Konfiguracja dźwięku na poszczególnych konsolach
  5. Podstawowe wiadomości o plikach termcap i terminfo/*
  6. Definiowanie alarmu wizualnego
  7. Wyłączenie alarmu dźwiękowego na konsoli tekstowej
  8. Uciszanie aplikacji
  9. Ciemna strona zagadnienia
  10. Od tłumacza

1. Licencja oraz prawa autorskie

Copyright (c) 1997, Alessandro Rubini

Niniejszy dokument rozpowszechniany jest na warunkach określonych w licencji GNU Free Documentation License. Jeśli nie otrzymałeś treści licencji FDL z tym dokumentem, zapoznać się z nią możesz pod adresem http://www.fsf.org/licenses/fdl.html.

2. Wstęp

Konsola Linuksa wydaje sygnał dźwiękowy (brzęczyk) po natrafieniu na znak BEL (kod ascii 7). Jest to rozsądnie wybrana standardowa reakcja, jednak wielu użytkowników nie lubi, kiedy ich komputer wydaje dźwięki. Niniejszy dokument opisuje sposób takiej konfiguracji programów, aby nie wysyłały one kodu BEL oraz takiej konfiguracji jądra i X, aby komputer milczał nawet wtedy, gdy kod BEL zostanie wysłany. Większość tekstu dotyczy konsoli, ponieważ konfiguracja serwera X w tym zakresie nie powinna powodować trudności.

Według mnie temperowanie niesfornej maszyny należy rozpocząć na poziomie sprzętowym; np. w moim komputerze głośniczka nie ma!

3. Głośniczkotomia

Głośniczkotomia jest najskuteczniejszym rozwiązaniem problemu alarmu dźwiękowego. Jak sama nazwa wskazuje, sposób polega na fizycznym odłączeniu lub usunięciu głośniczka. Operacja jest prosta -- można się nawet obyć bez znieczulenia.

Istnieją też sposoby nieco bardziej wyrafinowane. Pecety wyposażone są zwykle w przełącznik TURBO. Podczas pracy w środowisku wielozadaniowym guziczka tego nigdy się właściwie do spowalniania procesora nie używa; nie ma takiej potrzeby nawet w przypadku gier opartych na programowych pętlach. Niestety, przyspieszyć komputera tym guziczkiem się nie da; można go za to wykorzystać do włączania/wyłączania głośniczka. Głośniczek, choć generalnie irytujący, czasem jednak bywa przydatny np. do zaanonsowania zakończenia długiej kompilacji.
Aby zmienić funkcję przełącznika, po prostu odłącz go od płyty głównej i połącz szeregowo z głośniczkiem.

W przypadku komputerów przenośnych (laptopów), dostęp do brzęczyka jest niestety ograniczony; brak też przełącznika, któremu możnaby podporządkować nowe zadanie. Użytkownicy takich komputerów muszą ograniczyć się do rozwiązań programowych, o czym poniżej.

4. Konfiguracja dźwięku na poszczególnych konsolach

Od wersji jądra 1.3.43 wzwyż, dzięki łatce Martina Maresa na console.c, istnieje możliwość wyboru częstotliwości i długości trwania alarmu dźwiękowego. Wysyłając odpowiednie sekwencje znaków niedrukowalnych na poszczególne konsole można konsolom tym przypisać różne właściwości dźwięku (lub jego brak). Całość sprowadza się do umieszczenia poleceń konfigurujących dźwięk w pliku ~/.login lub ~/.profile. Odpowiedzialne za właściwości dźwięku kody to:

Przykład: Aby ustawić częstotliwość dźwięku na 50Hz a jego długość na 1 sek, wydaj w bashu polecenie 'echo -e "\\33[10;50]\\33[11;1000]"' (argument -e oznacza 'interpretuj znaki niedrukowalne'). Odpowiednikiem tej komendy dla tcsh jest 'echo "\\033[10;50]\\033[11;1000]"'.

Żadna ze znanych mi obecnie wersji polecenia setterm nie potrafi konfigurować dźwięku, niewykluczone jednak, że w przyszłości ta funkcjonalność zostanie dodana.

Jeśli używasz jądra 1.3.43 lub nowszego i satysfakcjonuje cię powyższe rozwiązanie, możesz tu zakończyć czytanie. Jeśli jednak używasz starszego jądra lub chciałbyć stosować alarm wizualny zamiast dźwiękowego, czytaj dalej.

5. Podstawowe wiadomości o plikach termcap i terminfo/*

Tekstowy plik /etc/termcap to baza danych o możliwościach terminali (ang. terminal capablilities -- stąd nazwa). Wiele programów (np. tcsh, bash, vi i wszystkie korzystające z curses) korzysta przy przesuwaniu kursora i innych operacjach związanych z ekranem z zawartych w tym pliku informacji.

Baza /etc/termcap opisuje poszczególne rodzaje terminali. Do odpowiedniej części tej bazy kieruje aplikacje zmienna środowiskowa TERM.

Poszczególne możliwości terminali opisane są w termcap dwuliterowymi kodami, po których następują sekwencje znaków wymaganych do osiągnięcia danego efektu. Kolejne wpisy przedzielone są dwukropkiem (":"). Na przykład alarm dźwiękowy (kod "bl") zazwyczaj opisany jest jako "bl=^G". Wpis taki oznacza, że brzęczyk uzyskuje się sekwencją control-G (ascii BEL).

Obok alarmu dźwiękowego ("bl") rozpoznawany jest również wizualny ("vb" -- visual bell), jednak zazwyczaj brakuje tego wpisu w poświęconej terminalowi "linux" części termcap.

Większość nowszych aplikacji i bibliotek zamiast z termcap korzysta z bazy danych terminfo. W przeciwieństwie do termcap, termifo nie jest jednym wielkim plikiem, a katalogiem, w którym opisy poszczególnych terminali umieszczone są w osobnych plikach, a te z kolei w podkatalogach o nazwach będących kolejnymi pierwszymi literami alfabetu. Na przykład opis terminala "linux" znajdzie się w pliku /usr/lib/terminfo/l/linux (lub /usr/share/terminfo/l/linux -- przyp. tłum). Opisy terminali w terminfo są plikami binarnymi, kompiluje je się programem tic (patrz man tic).

6. Definiowanie alarmu wizualnego

Dodanie brakującej definicji alarmu wizualnego "vb" do /etc/termcap nie jest trudne. Oto metoda Dennisa Henriksena (duke@diku.dk): należy odnaleźć sekcję "linux" (w starszych dystrybucjach sekcja ta nazywa się "console") i dodać w niej następującą linię:

:vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\
Ostatni ukośnik zapobiega złamaniu linii.
Wg opisu Dennisa powyższa linia

7. Wyłączenie alarmu dźwiękowego na konsoli tekstowej

Jeśli chcesz zmusić konsolę do używania alarmu wizualnego zamiast dźwiękowego (błysk zamiast pisku) znajdź w pliku termcap w sekcji dla twojego terminala definicję efektu "bl" i zmień ją na definicję błysku (podaną w poprzednim rozdziale). To rozwiązanie jest najwygodniejsze, jeśli nie chcesz określać osobno zachowania różnych aplikacji. Ja stosuję ten sposób na wszystkich moich komputerach z Linuksem, w których nie mogę fizycznie odłączyć głośniczka.

8. Uciszanie aplikacji

Poniżej podaję niekompletny spis programów, które można przekonać do używania podanej w termcap lub terminfo definicji "vb" bieżącego terminala.

9. Ciemna strona zagadnienia

Niestety nie wszystkie aplikacje korzystają z informacji zawartych w bazach termcap lub terminfo. Większość małych programików ma na sztywno w kodzie C zaszyte "\a" (alarm). "\a" w ciągach znaków w plikach binarnych interpretowane jest jako ascii BEL. "Prawdziwych" aplikacji problem ten zazwyczaj nie dotyczy, ale uważaj na produkty początkujących programistów C -- najgorsi są tu studenci informatyki!
Jedynym sposobem uciszenia takich programów jest głośniczkotomia lub wykorzystanie sekwencji kodów podanej przez Martina Maresa.

10. Od tłumacza

Wersja oryginalna dokumentu: http://sunsite.unc.edu/LDP/.
Tłumaczenia pozostałych dokumentów HOWTO na język polski:
http://www.jtz.org.pl.

Copyright for the translation
(c) 2001 by Tomasz 'tsca' Sienicki, tsca@edb.dk

1