Alarm wizualny (małe JTZ)
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.
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:
ESC-[10;xx]
-- określa częstotliwość dźwięku w Hertzach. Dozwolone wartości xx mieszczą
się w zakresie od 21 do 32766; wynik działania wartości przekraczających te
granice nie jest zdefiniowany. W przypadku braku argumentu xx
('ESC-[10]') stosowana jest wartość domyślna (750Hz)
ESC-[11;xx]
-- określa długość trwania dźwięku w milisekundach. Wartość domyślna
(125 ms) stosowana jest w przypadku wybrania czasu przekraczającego 2 sekundy
oraz jeśli argument xx nie jest podany ('ESC-[10]').
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
zapamiętuje pozycję kursora (na wszelki wypadek),
kilkakrotnie zmienia tło konsoli (z normalnego na odwrócone i z powrotem)
i umieszcza kursor w zapamiętanej pozycji.
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.
Serwer X: konfiguracji brzęczyka dokonuje się poleceniem "xset b".
Polecenie to przyjmuje trzy numeryczne argumenty: głośność,
częstotliwość oraz długość. "xset -b"
całkowicie wyłącza brzęczyk. Konfiguracja działa na wszystkie
programy uruchomione pod X.
xterm:
xterm umie zinterpretować sygnał BEL zarówno jako alarm dźwiękowy, jak
i wizualny. Jeśli zdecydujesz się na alarm dźwiękowy, zadziałają
ustawienia "xset" (patrz punkt "Serwer X"). Alarm wizualny uzyskać
można poprzez podanie opcji "-vb" przy uruchamianiu xterm-a lub
zdefiniowanie zasobów "xterm*visualBell: true".
Podczas działania xterma rodzaj alarmu przełączać można w menu
wywoływanym przez control+lewy_przycisk_myszy.
Jeśli używasz X, prawdopodobnie nie zainteresują cię poniższe informacje.
tcsh (6.04 i nowsze): "set visiblebell".
Instrukcję tę można umieścić w pliku .cshrc
lub podać interaktywnie. Wyłączenie alarmu wizualnego: "unset visiblebell".
Wyłączenie alarmu wizualnego oraz dźwiękowego: "set nobeep".
bash (o ile wiem wszystkie wersje):
umieść linię "set bell-style visible" w pliku ~/.bashrc.
Zamiast "visible" (wizualny) możesz wpisać "audible" (dźwiękowy)
lub "none" (żaden).
bash (z readline,
oraz inne aplikacje korzystające z readline):
umieść linię "set prefer-visible-bell" w pliku ~/.inputrc.
nvi i elvis: umieść linię "set flash"
w pliku ~/.exrc lub interaktywnie podaj ":set flash"
(pamiętaj o dwukropku). Zamiana w powyższej linii słowa "flash"
na "noflash" spowoduje wyłączenie alarmu wizualnego.
emacs: umieść linię "(setq visible-bell t)" w
pliku ~/.emacs. Zamiana w powyższej komendzie końcowej litery
"t" na słowo "nil" spowoduje wyłączenie alarmu wizualnego.
less:
alarm wizualny włącza się podając w linii poleceń opcję "-q",
natomiast wszystkie rodzaje alarmu wyłącza się opcją "-Q".
Opcje domyślne można umieścić w zmiennej środowiskowej "LESS".
screen:
użyj kombinacji klawiszy CtrlA-CtrlG. Zmieni to zachowanie wszystkich
wirtualnych sesji. Więcej informacji na ten temat znajdziesz w
podręczniku systemowym ("man screen") w sekcji "CUSTOMIZATION".
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
Wyszukiwarka
Podobne podstrony:
visual bell pl 8visual bell plvisual bell pl 1visual bell pl 2visual bell pl 3visual bell pl 6visual bell pl 10visual bell pl 9visual bell pl 9visual bell pl 4visual bell pl 7Visual Bell plvisual bell pl 5visual bell 4 5pkniwehhw3htpsc6sytlupziuazr6mxnuhcr7q 5pkniwehhw3htpsc6sytlupziuazr6mxnuhcr7qvisual bell 8 q46jeyxjx4qlbajrd4coeh5h6xkzndblpvkx7aa q46jeyxjx4qlbajrd4coeh5h6xkzndblpvkx7aavisual bell 2 7uyeu6iv7q23ovlwq52gke36yt46jiydylcpjsi 7uyeu6iv7q23ovlwq52gke36yt46jiydylcpjsivisual bell 5 oovhlxjlj2wr6izrt7p7ax6okno2ccmjiaiuy4a oovhlxjlj2wr6izrt7p7ax6okno2ccmjiaiuy4avisual bell 7 7mwbuybvfgv36u6kcnegjnm3ph7stetaj7rf7by 7mwbuybvfgv36u6kcnegjnm3ph7stetaj7rf7byvisual bell 1 yg6ecaysoyqc6jbkj4f6geboudcm422f72rl7ri yg6ecaysoyqc6jbkj4f6geboudcm422f72rl7riwięcej podobnych podstron