The Linux Keyboard HOWTO
The Linux Keyboard HOWTO
Andries Brouwer,
aeb@cwi.nl
v2.5, 27 sierpień 1997
Wersja polska: Gwidon S. Naskrent
naskrent@hoth.amu.edu.pl
v1.1, 29 X 1997
Notka ta zawiera informacje na temat klawiatury i konsoli
w Linuxie, oraz używania znaków spoza ASCII. Opisuje ona wersję 2.0
Linuxa.
Dokument ten został napisany w standardzie ISO-8859-2.
Oryginał tego dokumentu znajduje się pod adresem
ftp.icm.edu.pl/pub/Linux/sunsite/docs/HOWTO/
1. Użyteczne programy
Poniższe pakiety zawierają programy odnoszące się do klawiatury
lub konsoli:
kbd-0.90.tar.gz zawiera loadkeys, dumpkeys, showkey,
setmetamode, setleds, setfont, showfont, mapscrn,
kbd_mode, chvt, resizecons, disalloc,
getkeycodes, setkeycodes.
util-linux-2.6 zawiera setterm, kbdrate. (Tak, more
w util-linux 2.6 zrzuca core z powodu konfliktu nazw. Zachowaj swoją
starą kopię, albo używaj util-linux-2.5, albo zmień 'savetty' na
'my_savetty' w more.c).
shutils-1.12 zawiera stty.
open-1.4.tgz zawiera open (które powinno się przemianować
na openvt. Patrz też dynamic-vc-1.1.tar.gz).
SVGATextMode-1.6.tar.gz zawiera SVGATextMode, program który
zastępuje stare resizecons
Dystrybucja X zawiera xmodmap, xset, kbd_mode
(patrz też X386keybd(1) co do sytuacji pod XFree86 1.3, oraz
Xserver(1) co do rozszerzenia XKEYBOARD pod X11R6).
termcap-2.0.8.tar.gz zawiera termcap, starą bazę danych właściwości
terminala. ncurses-1.9.9e.tar.gz zawiera bazę termlib która zastępuje
termcap (wiele programów jednak ciągle używa termcap).
Patrz loadkeys(1), setleds(1), setmetamode(1) co do kodów wysyłanych
przez różne klawisze i ustawiania diod poza X. Pod X, użyj xmodmap(1).
Patrz setfont(8) co do ładowania czcionek konsoli. Wielu ludzi woli
załadować jakąś czcionkę w rodzaju iso01.f16, ponieważ domyślna
jest czcionką sprzętową karty graficznej, i często jest to
czcionka "Code Page 437", w której brakuje akcentowanych znaków i innych
symboli z zestawu Latin-1.
Patrz setterm(1), kbdrate(8) co do właściwości takich jak kolory tła i
pisma, wygaszanie ekranu, szybkość powtarzania klawiszy - wszystko poza X.
Pod X, patrz xset(1), też co do dźwięku przy naciśnięciu klawisza i
głośności dzwonka.
Plik /etc/termcap definiuje Esc-sekwencje dla wielu programów
które odnoszą się do konsoli (lub innego terminala). Bardziej nowoczesna
wersja znajduje się w /usr/lib/terminfo. (Patrz terminfo(5).
Pliki terminfo są kompilowane kompilatorem terminfo
/usr/lib/terminfo/tic, patrz tic(1). Ich zawartość obejrzeć
można używając programu infocmp, patrz infocmp(1). Sekwencje konsoli
linuxowej opisane są w console_codes(4).
2. Ogólnie o klawiaturze
Naciskasz klawisz, a kontroler klawiatury wysyła kody skanowe do
sterownika klawiatury jądra. Niektóre klawiatury można programować,
ale przeważnie kody klawiszy odpowiadające klawiszom są stałe.
Sterownik klawiatury jądra przesyła po prostu cokolwiek otrzymuje
do programu aplikacji, gdy ta jest w trybie skanowania kodów,
na przykład podczas działania X. W przeciwnym razie przekłada
on strumień kodów skanowych na kody klawiszy, odpowiadające zdarzeniom
naciśnięcia i zwolnienia klawisza (pojedyncze naciśnięcie klawisza
może wytworzyć do sześciu kodów skanowych).
Kody te [klawiszy] są przesyłane do programu aplikacji gdy znajduje
się on w trybie kodów klawiszy (używane, na przykład, przez
showkey). W przeciwnym razie, owe kody klawiszy porównywane są
z rozkładem klawiatury, i znaleziony tam znak lub ciąg znaków jest
przesyłany do aplikacji, bądź następuje wykonanie opisanej tam
czynności.
(Na przykład, jeśli naciśnie się i zwolni klawisz a, klawiatura
wysyła kody skanowe 0x1e i 0x9e, przekształcane są one na kody klawiszy
30 i 158, a potem przesyłane jako 0141, kod ASCII lub Latin-1 litery 'a';
jeśli naciśnie się i zwolni Delete, klawiatura wysyła kody skanowe
0xe0 0x53 0xe0 0xd3, przekształcane na kody klawiszy 111 i 239, a potem
przesyłane jako czterosymbolowa sekwencja ESC [ 3 ~, wszystko
to zakładając amerykański układ klawiatury jako domyślny (przykładem
kombinacji klawiszy której przypisana jest czynność jest Ctrl-Alt-Del).
Tłumaczenia pomiędzy nieczęstymi kodami skanowymi i klawiszy można
dokonać używając narzędzia setkeycodes - tylko bardzo nieliczni
będą go potrzebować. Tłumaczenia pomiędzy kodami klawiszy i znakami bądź
ciągami znaków lub czynności, to jest układem klawiatury, dokonuje się
przy pomocy narzędzia loadkeys.
Po szczegóły patrz getkeycodes(8), setkeycodes(8), dumpkeys(1), loadkeys(1).
Tam gdzie w powyższym opisie piszę "przesłane do aplikacji", znaczy to
rzeczywiście "przesłane do sterownika terminala". To jest, dalsze
przetwarzanie jest bardzo podobne do przetwarzania tekstu który odbierany
jest na złączu szeregowym. Szczegóły tego przetwarzania ustala program
.
3. Ogólnie o konsoli
I odwrotnie, kiedy wypisujesz coś na konsolę, najpierw podpada to pod
standardowe przetwarzanie tty, a potem dostarczane jest sterownikowi
konsoli. Sterownik konsoli emuluje vt100 i przekłada dane wejściowe
aby rozpoznać Esc-sekwencje vt100 (ruchu kursora, czyszczenia ekranu itp.)
Znaki które nie są częścią Esc-sekwencji są najpierw przetwarzane na
Unicode, używając jednej z czterech tablic odwzorowań jeśli konsola
nie była od początku w trybie UTF-8, potem odnoszone do tabeli opisującej
zależność między wartościami Unicode i pozycjami w czcionce, a uzyskane
ośmio- lub dziewięciobitowe indeksy zapisywane są w pamięci ekranu,
gdzie powodują wyświetlenie kształtów znaków znalezionych w ROMie znakowym
karty graficznej. Do ROMu znakowego można załadować własne czcionki
używając setfont, załadować odpowiadającą tablicę odwzorowań Unicode
używając loadunimap, i załadować tablicę odwzorowań użytkownika
używając mapscrn. Więcej szczegółów poniżej.
Istnieje wiele konsol (zwanych Wirtualnymi Konsolami lub Wirtualnymi
Terminalami) które dzielą ten sam ekran. Możesz ich używać jako
oddzielnych urządzeń, albo uruchamiając na nich oddzielne sesje logowania,
albo po prostu przesyłając na nie jakieś dane wyjściowe z początku
czy końca system log. Patrz niżej ("Przełączanie konsol") co do
tego jak je ustawiać i przełączać się między nimi.
4. Kasowanie terminala
Na ekranie są śmieci, a wszystkie naciśnięcia klawiszy dają w efekcie
znaki do rysowania ramek. Co robić?
Wiele programów przerysuje ekran po naciśnięciu ^L. Może to pomóc
w sytuacji gdy na ekranie znajdują się śmieci z modemu lub nadany
komunikat. Komenda clear czyści ekran.
Komenda reset kasuje sterownik konsoli. Pomaga to w sytuacji
gdy ekran pełen jest dziwnych znaków graficznych, a także jeśli
skurczy się do jednej linii na dole. Jeśli nie masz tej komendy,
bądź jeśli robi ona coś innego, stwórz własną dodając poniższe
dwie linie do pliku wykonywalnego reset w swojej ścieżce:
#!/bin/sh
echo -e \\033c
to jest, masz zamiar posłać dwa znaki: Esc-c, na konsolę.
Dlaczego ekran czasami się miesza i wyświetlane jest 24 lub jedna
linia, zamiast zwykłych 25? Cóż, głównym winowajcą jest
tutaj TERM=vt100 (albo jakiś inny terminal z 24 liniami) zamiast TERM=
linux przy łączeniu się zdalnie. Jeśli stanie się to na /dev/tty2 napisz:
% cat > /dev/tty2
^[c
^D
na jakieś innej WK (gdzie wpisujesz cztery symbole do cat: Esc, c,
Enter, Ctrl-D) i odśwież ekran na /dev/tty2 (możliwie używając ^L), co
przywróci porządek. Oczywiście stałym rozwiązaniem jest używanie
odpowiedniego kawałka termcap lub terminfo.
Dlaczego tak się dzieje że czasami dostajesz masę znaków do rysowania
ramek, np. po wysłaniu na ekran pliku binarnego za pomocą cat ?
Istnieje wiele Esc-sekwencji które zmieniają zestaw znaków, a twój
plik może przypadkiem zawierać niektóre z nich. Esc c to ogólne
przekasowanie, lekarstwo na wszystko, ale jeżeli wiesz dokładnie co
poszło nie tak, możesz to naprawić bez kasowania innych atrybutów
konsoli. Na przykład po
% cat
^N
^D
twój znak zachęty konsoli będzie się cały składał ze znaków do rysowania
ramek. Napisz teraz (na ślepo):
% cat
^O
^D
I wszystko jest znów w porządku (wpisałeś trzy symbole do każdego cat:
^N lub ^O, Enter, ^D). Żeby zrozumieć co się dzieje, patrz "Zestawy znaków
konsoli" poniżej.
Jeśli załadowałeś jakiś dziwną czcionkę i chcesz powrócić do domyślnej.
% setfont
wystarczy (założywszy że zachowałeś domyślną czcionke w domyślnym
miejscu). Jeśli ta czcionka nie zawiera osadzonej mapy unikodowej (i
wypisuje złe symbole dla znaków akcentowanych), wpisz
% loadunimap
Na przykład, jeśli wykonam
% loadkeys de-latin1
będę miał niemiecką klawiaturę, a klawisz na lewo od Enter wypisze mi
a-umlaut. Działa to, ponieważ a-umlaut występuje na stronie kodowej 437,
i mapa unikodowa jądra jest inicjalizowana dla CP 437, a moja karta
graficzna ma wbudowaną czcionkę CP 437. Jeśli teraz załaduję czcionkę
ISO-8859-1 używając
% setfont iso01.f16
nadal wszystko działa, bowiem setfont podstawia jądru ważną mapę
unikodową (jeśli do czcionki nie jest dołączona mapa), a bez mapy jądro
odwołuje się bezpośrednio do czcionki, a to jest zupełnie poprawne dla
systemu ISO-8859-1 z czcionką iso01.f16. Ale przywrócenie poprzedniej
czcionki za pomocą
% setfont
daje dużą sigmę zamiast a-umlaut - wszystkie akcentowane znaki są
pomieszane, ponieważ ta czcionka również nie ma osadzonej mapy unikodowej.
Po wykonaniu
% loadunimap
która ładuje domyślną mapę unikodową (prawidłową dla domyślnej czcionki),
wszystko znów działa jak trzeba. Zwykle loadunimap nie jest
wywoływane bezpośrednio, lecz przez setfont. Tak więc poprzednie
dwie komendy można zastąpić przez
% setfont -u def
Czcionki etiopskie oraz lat1u*.psf mają osadzone tabele znaków Unicode.
Większość pozostałych nie ma.
Na starych terminalach wydruk zawierający znaki tabulacji
może wymagać opóźnienia, więc musisz napisać
% stty tab3
(patrz stty(1)).
Tryb graficzny zmienić możesz używając resizecons
albo SVGATextMode. To zwykle załatwia aspekt wyświetlania.
Po stronie wprowadzania może istnieć wiele potencjalnie niewłaściwych
rzeczy. Jeśli X, DOOM, albo jakiś inny program używający
trybu "surowego" pada, twoja konsola może ciągle znajdować się w stanie
"surowym" (lub "półsurowym"), i trudno jest wydawać polecenia. Patrz
"Jak wyjść z trybu surowego" poniżej. Jeśli załadowałeś zły układ
klawiatury, to
% loadkeys -d
ładuje ponownie układ domyślny, ale może się okazać że trudno jest
napisać "-" ! Alternatywa to:
% loadkeys defkeymap
Czasami nawet litery są poplątane. Warto wiedzieć że istnieją cztery
główne typy klawiatur: QWERTY, QWERTZ, AZERTY i Dvoraka. Trzy pierwsze
nazwane są od pierwszych sześciu klawiszy i z grubsza odpowiadają
krajom angielsko-, niemiecko-, i francuskojęzycznym. W porównaniu z
QWERTY, układ QWERTZ zamienia Y i Z. W porównaniu z QWERTY, układ
AZERTY zamienia Q i A, W i Z, i ma M na prawo od L, na pozycji średnika.
Układ Dvoraka ma zupełnie inny porządek liter.
4.1 Sprzętowe kasowanie klawiatury
Coś może być nie w porządku na poziomie niższym niż wie o tym Linux.
Istnieją co najmniej dwa różne niższe poziomy (klawiatura i sterownik
klawiatury) w których wydać można komendę "wyłącz klawiaturę" sprzętowi
za nią odpowiedzialnemu. Klawiatury często można zaprogramować
na używanie jednego z trzech różnych zestawów kodów skanowych.
Niemniej nie wiem o żadnym przypadku w którym okazałoby się to
jakimś problemem.
Niektóre klawiatury mają wbudowaną zdolność zmiany układów. Stormy
Henderson (stormy@ghost.net) pisze:
"Jeśli twoja klawiatura przeprogramowała się przez przypadek, możesz
(na klawiaturze Gateway AnyKey) nacisnąć control-alt-suspend_macro
by skasować ustawienia klawiszy do stanu normalnego".
5. Delete i Backzspace
Nakłonienie Delete i Backspace do prawidłowej pracy jest wcale trywialne,
zwłaszcza w środowisku mieszanym, gdzie komunikujesz się z konsolą, z X,
bash, emacsem, logujesz się zdalnie itd. Może będziesz musiał
wyedytować kilkanaście plików konfiguracyjnych żeby powiedzieć wszystkim
konkretnym programom czego dokładnie chcesz. Z jednej strony problemem
jest jakie klawisze wypisują jakie kody (i jak te kody przetrawia
kermit czy emacs), a z drugiej strony jakie funkcje są przypisane
jakim klawiszom.
Ludzie często skarżą się "mój klawisz wstecznej spacji nie działa", jak
gdyby ten klawisz miał wbudowaną funkcję "skasuj poprzedni znak". Niestety
wszystko co ten, albo każdy inny, klawisz robi to wypisanie kodu, i można
tylko mieć nadzieję że sterownik tty jądra i wszystkie aplikacje można
tak skonfigurować że klawisz wstecznej spacji rzeczywiście działa jako
klawisz kasujący poprzedni znak.
Większość unixowych programów otrzymują swoje dane wejściowe tty przez
sterownik tty jądra w trybie "niesurowym", i zwykłe polecenie stty
ustala znak kasujący. Jednak programy takie jak bash, emacs
czy X przetwarzają dane wejściowe własnymi metodami, i muszą być
każde z osobna przekonane do właściwego działania.
5.1 Jak powiedzieć Unixowi jakiego znaku chcesz używać żeby skasowaćostatnio napisany znak?
% stty erase ^?
Jeśli znak jest kasowany, ale w dziwny sposób, coś jest nie w porządku
z twoimi ustawieniami tty. Jeśli ustawione jest echoprt, kasowane
znaki ujęte są między \ oraz /.
Jeśli echoe nie jest ustawione, znak kasowania jest wypisywany
(co jest rozsądne w przypadku gdy jest to znak drukujący, jak #).
Większość ludzi woli stty echoe -echoprt. Napisanie stty sane
zrobi to i więcej. Napisanie stty -a pokazuje bieżące ustawienia.
Jak to się stało że domyślnie nie były poprawne? Będą, jeżeli użyjesz
poprawnego getty.
Zauważ że wiele programów (jak bash, emacs itd.) mają swoje
własne przypisania klawiszy (zdefiniowane w ~/.inputrc,
~/.emacs itd.) i nie wpływa na nie ustawienie znaku kasowania.
Standardowy unixowy sterownik tty nie rozpoznaje kursora, ani klawiszy
(takich jak klawiszy strzałek) przesuwających bieżącą pozycję, i stąd
nie ma też komendy takiej jak "skasuj bieżący znak". Ale na przykład
możesz nauczyć bash na konsoli rozpoznawania Delete wstawiając
set editing-mode emacs
"\e[3~":delete-char
do ~/.inputrc
"Kiedyś getty dobrze oddawało DEL i BS, ale teraz się popsuło"
Dawniej, sterownik konsoli zwykle wypisywał BS-spacja-BS
(\010\040\010)
gdy otrzymał znak DEL (\177). Dzisiaj, znaki DEL są
ignorowane (tak jak powinny, ponieważ sterownik emuluje vt100). Zdobądź
lepsze getty, tj. takie które nie wypisuje DEL.
"Login zachowuje się inaczej przy pierwszej i drugiej próbielogowania"
Przy pierwszej próbie, komunikujesz się z getty. Przy drugiej
próbie, komunikujesz się z login, innym programem.
5.2 Jak powiedziec Linuxowi jaki kod wysyłać po naciśnięciu klawisza
Na konsoli lub, ściślej, gdy nie jesteś w trybie (pół)surowym, użyj
% loadkeys mykeys.map
A pod X użyj
% xmodmap mykeys.xmap
[gdzie mykeys.(x)map to oczywiście konkretny plik definicji klawiatury -
przyp. tłum.]
Zauważ że (od XFree86-2.1) X czyta linuxowe ustawienia układów klawiatury
przy initializacji Xowego keymap. Chociaż oba systemy nie są w 100%
kompatybilne, oznacza to że w wielu przypadkach używanie xmodmap>
stało się zbędne.
Załóżmy, na przykład, że chcesz żeby twój klawisz Backspace dawał
wsteczną spację (^H, ósemkowe 010), a szary klawisz Delete DEL (ósemkowe
012), dodaj poniższe do etc/rc.local (albo tam gdzie trzymasz swoje
pliki inicjalizacyjne).
/usr/bin/loadkeys << EOF
keycode 14 = BackSpace
keycode 111 = Delete
EOF
Zauważ że zmieni to funkcję tych klawiszy tylko gdy nie używa się
modyfikatorów. Domyślnie jądro Linuxa pozwala Ctrl-Backspace wypisywać
wsteczną spację - czasami przydaje się to jako zapasowe wyjście, gdy
stwierdzisz że możesz wypisywać tylko znaki DEL.
Lewy klawisz Alt jest czasem zwany klawiszem Meta, a domyślnie kombinacje
AltL-X są przypisane do symbolu Meta-X. Ale jakim ciągiem znaków jest
Meta-X? Ustalane jest to (via tty) przez znacznik Meta, ustawiony
komendą setmetamode. Dwiema możliwościami są: Esc X albo X iloczyn
logiczny 0200.
Dlaczego klawisz Backspace nie wysyła domyślnie wstecznejspacji?
(i) Ponieważ vt100 miał klawisz Delete nad klawiszem Enter.
(ii) Bo Linus tak postanowił.
5.3 Jak nakazać X zamianę Delete i Backspace
% xmodmap -e "keysym BackSpace = Delete" -e "keysym Delete = BackSpace"
Albo, jeśli chcesz tylko żeby klawisz Backspace dawał wsteczną spację:
% xmodmap -e "keycode 22 = BackSpace"
Albo, jeśli chesz tylko żeby klawisz Delete dawał Delete:
% xmodmap -e "keycode 107 = Delete"
(ale zwykle takie jest już domyślne przypisanie).
5.4 Jak powiedzieć emacsowi co robić gdy otrzyma Delete lubwsteczną spację
Wsadź do swojego pliku .emacs linie jak niżej:
(global-set-key "\?" 'delete-backward-char)
(global-set-key "\C-h" 'help-command)
Oczywiście możesz w ten sam sposób przypisać inne polecenia innym
klawiszom. Zauważ że niektóre tryby główne i poboczne redefiniują
przypisania klawiszy. Na przykład w trybie szukania przyrostowego
[incremental mode] można znaleźć kod:
(define-key map "\177" 'isearch-delete-char)
(define-key map "\C-h" 'isearch-mode-help)
Oznacza to że używanie dwóch powyższych komend globalnych może nie
być dobrym pomysłem. Za dużo jest miejsc z wbudowanym założeniem ^H =
pomoc i Del = delete. Nie oznacza to że musisz ustawić klawisze tak
żeby Backspace dawało Del. Ale jeśli tak nie jest, najłatwiej jest
zmienić ich układ na najniższym możliwym poziomie emacsa.
5.5 Jak nakazać emacsowi zamienienie Delete i Backspace
Wsadź do swojego pliku .emacs linie jak niżej:
(setq keyboard-translate-table (make-string 128 0))
(let ((i 0))
(while (< i 128)
(aset keyboard-translate-table i i)
(setq i (1+ i))))
(aset keyboard-translate-table ?\b ?\^?)
(aset keyboard-translate-table ?\^? ?\b)
Ostatnie wersje emacsa mają funkcję keyboard-translate, więc
można uprościć powyższe do
(keyboard-translate ?\C-h ?\C-?)
(keyboard-translate ?\C-? ?\C-h)
Zauważ że pod X emacs może rozróżniać Ctrl-h i klawisz
Backspace (niezależnie od tego jakie kody oba wypisują na konsoli),
a domyślnie emacs będzie widział klawisz wstecznej spacji jako DEL
(wykonujący polecenia kasowania, przypisane temu znakowi, a nie
polecenia pomocy, przypisane do ^H). Można rożróżniać Backspace i Delete,
np. poprzez
(global-unset-key [backspace] )
(global-set-key [backspace] 'delete-backward-char)
(global-unset-key [delete] )
(global-set-key [delete] 'delete-char)
5.6 Jak nakazać kermitowi zamienienie Delete i Backspace
Wsadź do swojego pliku .kermrc linie jak niżej:
set key \127 \8
set key \8 \127
5.7 Jak poinformować xterm o twoich ulubionych trybach tty
Xterm dziedziczy zwykle tryby tty po programie który go wywołał.
W xdm, domyślne klawisze kasowania i usuwania to # i @, jak
w starej dobrej wersji 6 Unixa.
Jeśli nie podoba ci się to, możesz wsadzić coś podobnego do
XTerm*ttymodes: erase ^? kill ^U intr ^C quit ^\ eof ^D susp ^Z start ^Q stop ^S eol ^@
do /usr/lib/X11/app-defaults/XTerm albo do
$HOME/.Xresources, zakładając że masz linię
xrdb $HOME/.Xresources
w swoim $HOME/.xinitrc.
5.8 Jak poinformować xmosaic że klawisz Backspace wypisuje Del
Wsadzenie
*XmText.translations: #override\n\
<Key>osfDelete: delete-previous-character()
*XmTextField.translations: #override\n\
<Key>osfDelete: delete-previous-character()
do twojego $HOME/.Xresources pomoże.
W Netscape FAQ można jednak przeczytać:
Dlaczego mój klawisz Backspace nie działa w polach tekstowych?
Domyślnie, Linux i XFree86 dostarczane są ze źle skonfigurowanymi
klawiszami Backspace i Delete. Wszystkie programy oparte na Motif
(w tym oczywiście Netscape Navigator) będą w ten sam sposób źle
działać.
Specyfikacja Motif mówi że Backspace ma kasować poprzedni znak a
Delete ma kasować znak następny. Linux i XFree86 są dostarczane
z takim ustawieniem że oba klawisze - Backspace i Delete - wypisują
Delete.
Możesz to naprawić używając któregoś z programów xmodmap, xkeycaps
bądź loadkeys i sprawić że odpowiedni klawisz wypisuje klawsym
wsteczna spacja, a nie Delete.
Możesz to również naprawić używając pliku .motifbind; patrz
strona man VirtualBindings(3).
Uwaga: nie używaj zasobów *XmText.translations lub *XmTextField.
translations próbując naprawić ten problem. Jeśli tak zrobisz,
rozwalisz pozostałe przypisania klawiszy w polach tekstowych NN.
5.9 Lepsze rozwiązanie dla programów używających Motifa, jak netscape
Ted Kandell (ted@tcg.net) sugeruje co następuje:
Dodaj poniższe gdzieś w swoim .profile:
stty erase ^H
Jeśli używasz basha, dodaj poniższe linie do swojego .inputrc:
"\C-?": delete-char
"\C-h": backward-delete-char
Dodaj następujące linie do swojego pliku .xinitrc:
xmodmap <<-EOF
keycode 22 = BackSpace osfBackSpace
keycode 107 = Delete
EOF
# wystartuj tu swojego managera okien, np.
#(fvwm) 2>&1 | tee /dev/tty /dev/console
stty sane
stty erase ^H
loadmap <<-EOF
keycode 14 = BackSpace
keycode 111 = Delete
EOF
Będzie to definitywnie działać dla klawiatury PC 101 lub 102-klawiszowej,
z każdym rozkładem Linuxa/XFree86.
Ważną częścią uczenia aplikacji motifowych takich jak Netscape poprawnej
pracy jest dodanie osfBackSpace do keycode 22, oprócz BackSpace.
Zauważ nie po obu stronach znaku = nie mogą się znajdować spacje.
5.10 Co z termcap i terminfo?
Gdy ktoś ma problemy z wsteczną spacją, ma on tendencję do patrzenia w swój
kawałek termcap (lub terminfo) opisujący terminal; i rzeczywiście, istnieje
tam zdolność kb (lub kbs) opisująca kod wypisywany przez klawisz Backspace.
Niemniej niewiele programów jej używa, więc - chyba że masz problemy
z jednym konkretnym programem - prawdopodobnie błąd leży gdzie indziej.
Oczywiście poprawienie swojego kawałka termcap (terminfo) nie jest złym
pomysłem tak czy owak. Patrz niżej pod "Zmienna TERM".
6. Zestawy znaków konsoli
Jądro próbuje wywnioskować najpierw jaki symbol rozumieć przez każdy
podany przez użytkownika bajt, a następnie gdzie ten symbol jest
umieszczony w bieżącej czcionce.
Jądro wie o pięciu tłumaczeniach bajtów na symbole konsoli-ekranu.
W trybie Unicode (UTF-8) kod UTF-8 jest przekształacany bezpośrednio
na Unicode. Założeniem jest że prawie wszystkie potrzebne symbole
w Unicode się znajdują, a w przypadkach gdzie nie jest to prawdą
zarezerwowane są kody 0x00ff* dla bezpośredniego dostępu do czcionki.
Poza trybem Unicode, używa się jednej z tabeli tłumaczeń.
Te cztery tabele to: a) Latin1 -> Unicode, b) grafika vt100 ->
Unicode, c) PC -> Unicode, d) zdefiniowane przez użytkownika.
Istnieją dwa zestawy znaków, zwane G0 i G1, i jeden z nich jest
zestawem bieżącym (początkowo G0).
Wypisanie ^N spowoduje że bieżącym zestawem będzie G1, ^O że G0.
Zmienne G0 i G1 wskazują na tablice tłumaczeń, i mogą być zmienione
przez użytkownika. Początkowo wskazują na tablice a) i b), odpowiednio.
Sekwencje Esc(B, Esc(0, Esc(U, Esc(K powodują że G0 wskazuje na
tablice tłumaczeń a), b), c), d), odpowiednio.
Sekwencje Esc)B, Esc)0, Esc)U, Esc)K powodują że G1 wskazuje na
tablice tłumaczeń a), b), c), d), odpowiednio.
Sekwencja Esc-c powoduje skasowanie terminala, czyli to czego chcesz
jeżeli ekran jest cały zaśmiecony. Często doradzane echo ^V^O
spowoduje tylko że zestawem bieżącym będzie G0, ale nie ma gwarancji że
G0 pokazuje na tablicę a).
W niektórych dystrybucjach istnieje program reset(1), który wypisuje
po prostu echo ^[c. Jeśli twój kawałek termcap dla konsoli jest
poprawny (i ma :rs=\Ec:), wtedy zadziała także
setterm -reset.
Zdefiniowaną przez użytkownika tablicę odwzorowań ustawić można
używając mapscrn(8). Rezultatem odwzorowania jest to że jeżeli
wypisywany jest symbol c, to wysyłany do pamięci ekranu jest
symbol s = map[c]. Obraz bitowy który odpowiada s
znajduje się w ROMie znakowym, i może zostać zmieniony przy
pomocy setfont(8).
7. Przełączanie konsoli
Domyślnie przełączania konsoli dokonuje Alt-Fn lub Ctrl-Alt-Fn. Pod
X (lub nowszymi wersjami dosemu) działa tylko Ctrl-Alt-Fn.
Wiele układów klawiatur pozwala na cykliczne przemieszczanie się
między konsolami przy użyciu Alt-strzałka_w_prawo i Alt-strzałka_w_lewo.
XFree86 1.3 nie wie że przyciśnięty jest Alt gdy przełączasz się do
okienka X. Tak więc nie możesz przełączyć się natychmiast na jakąś
innej WK, ale musisz najpierw zwolnić Alt.
W drugą stronę powinno to działać; jądro zawsze zanotowywuje stan
góra/dół wszystkich klawiszy. (na tyle na ile można; na niektórych
klawiaturach część klawiszy nie wysyła kodu skanowego po naciśnięciu,
np. klawisze PFn na FOCUS 9000) lub zwolnieniu (np. klawisz Pause
na wielu klawiaturach).
XFree86 1.3 zapisuje czcionki załadowane do ROMu znakowego przy starcie
i przywraca je przy przełączaniu konsoli. Tak więc efekt setfont
na WK zostaje wymazany gdy przełączasz się między X i zewnętrzem.
Używanie setfont pod X może doprowadzić do dziwnych rezultatów.
Pod kontrolą programową WK można zmieniać używając komendy chvt.
7.1 Zmiana numeru Wirtualnych Konsoli
To pytanie ciągle pojawia się od czasu do czasu, ale odpowiedź brzmi:
już masz ich dosyć. Od wersji 1.54 jądra istnieje od 1 do 63 wirtualnych
konsol. Nowa konsola tworzona jest natychmiast po otwarciu. Usuwa się
ją narzędziem disalloc (ale można ją usunąć tylko gdy nie ma z nią
skojarzonych procesów).
Dla starszych jąder, zmień linię
#define NR_CONSOLES 8
w include/linux/tty.h (nie zwiększaj tej liczby powyżej 63),
i zrekompiluj jądro.
Jeśli jeszcze nie istnieją, stwórz urządzenia tty używając MAKEDEV lub
mknod ttyN c 4, gdzie N oznacza numer tty. Na przykład:
for i in 9 10 11 12; do mknod /dev/tty$i c 4 $i; done
albo, lepiej, (ponieważ zatroszczy się to również o właściciela i prawa
dostępu)
for i in 9 10 11 12; do /dev/MAKEDEV tty$i; done
Jeśli chcesz żeby nowe WK uruchamiały getty, dodaj linie w
/etc/inittab (ale jest znacznie lepiej mieć uruchomione tylko dwie
getty, i tworzyć więcej konsol dynamicznie w razie potrzeby. W ten
sposób będziesz miał więcej pamięci gdy nie używasz wszystkich konsol, a
także więcej konsol, w razie gdybyś naprawdę ich potrzebował. Wyedytuj
/etc/inittab i wykomentuj wszystkie getty prócz dwóch
pierwszych).
Gdy konsole są przydzielane dynamicznie, zazwyczaj najłatwiej jest
mieć tylko jedną czy dwie z uruchomionym getty. Więcej
otwiera się za pomocą open -l -s bash. Nieużywane konsole
(bez skojarzonych procesów) usuwa się za pomocą disalloc.
Ale, rzec możesz, zajęty jestem czynnościami w których nagle potrzebuję
więcej konsol, a nie mam znaku zachęty bash aby wydać polecenie open.
Na szczęście możliwe jest stworzenie nowej konsoli po naciśnięciu jednego
klawisza, bez względu na to co dzieje się na konsoli bieżącej.
Jeśli masz spawn_login z kbd-0.90.tar.gz i wstawisz
loadkeys << EOF
alt keycode 103 = Spawn_Console
EOF
spawn_login &
do etc/rc.local, naciśnięcie Alt-strzałka_w_górę utworzy
nową WK z uruchomionym login (i przełączy się na nią). Używając
spawn_console & zamiast spawn_login & uzyskasz
tam uruchomiony bash. Patrz też open-1.4.tgz oraz
dynamic-vc-1.1.tar.gz.
To jaka czynność winna być podejmowana po naciśnięciu tego klawisza
Spawn_Console można również ustawić w /etc/inittab pod
kbrequest, jeśli masz świeży plik inicjalizacyjny. Patrz inittab(5)
(czynność ta może być czymś zupełnie innym - nazwałem ten klawisz
Spawn_Console po prostu dlatego że do tego go wykorzystywałem).
Na terminalach wyliczonych w /etc/securetty/ możesz zalogować się
tylko jako root. Istnieją programy które czytają ustawienia terminala
z plików /etc/ttys/ i /etc/ttytype. Jeśli masz takie
pliki, i stworzysz dodatkowe konsole, dobrym pomysłem mogłoby być
również dodanie dla nich linii w tych plikach.
8. Ctrl-Alt-Del i inne specjalne kombinacje klawiszy
8.1 Ctrl-Alt-Del (przeładowanie)
Jeśli naciśniesz Ctrl-Alt-Del (albo każdy inny klawisz z przypisanym
przed loadkeys klawsymem Boot) komputer albo przeładuje się natychmiast
(bez sync), albo do init wysyła się SIGINT. To pierwsze zachowanie
jest domyślne. Może je zmienić root używając systemowego wywołania reboot(),
patrz ctrlaltdel(8). Niektóre pliki init zmieniają wartość domyślną.
To co nastąpi gdy init otrzyma SIGINT zależy od użytej wersji tegoż -
często określa to pole pf w /etc/inittab (co oznacza że
możesz w tym przypadku uruchomić dowolny program).
W obecnym jądrze Ctrl-AltGr-Del nie jest już domyślnie przypisane do
Boot.
8.2 Inne kombinacje
Name Default binding
-------------------------------
Show_Memory Shift-Scrollock [pokazuje info o pamięci]
Show_Registers AltGr-ScrollLock [pokazuje zawartość rejestrów]
Show_State Ctrl-ScrollLock [pokazuje status]
Console_n Alt-Fn and Ctrl-Alt-Fn (1 <= n <= 12) [konsola nr n]
Console_{n+12} AltGr-Fn (1 <= n <= 12) [konsola nr n+12]
Incr_Console Alt-RightArrow [o konsolę w górę]
Decr_Console Alt-LeftArrow [o konsolę w dół]
Last_Console Alt[Gr]-PrintScreen [ostatnia konsola]
Scroll_Backward Shift-PageUp [przewija ekran w górę]
Scroll_Forward Shift-PageDown [przewija ekran w dół]
Caps_On [włącza duże litery. CapsLock działa
jako przełącznik]
Compose Ctrl-. [tryb składania, np. '+e daje é]
8.3 Kombinacje w X
Ctrl-Alt-Fn Przełącza na WK nr n
Ctrl-Alt-KP+ Następny tryb
Ctrl-Alt-KP- Ostatni tryb
Ctrl-Alt-BS "zabija" X
[KP+ i KP- to szary plus i minus z klawiatury numerycznej - przyp. tłum.]
Na niektórych płytach głównych Ctrl-Alt-KP- i Ctrl-Alt-KP+ są równoważne
naciśnięciu przycisku Turbo. To jest, oba dadzą w wyniku kody skanowe
1d 38 4a ca b8 9d i 1d 38 4e ce b8 9d, i oba przełączać będą między
trybem turbo (>= 25 Mhz) i nie-turbo (8/12 Mhz). (te kombinacje klawiszy
często działają tylko po ustawieniu zworkami na płycie głównej).
Perry F. Nguyen (pfnguyen@netcom22.netcom.com) pisze:
AMI BIOS ma właściwość która blokuje klawiaturę i miga diodami
jeżeli naciśnięto kombinację Ctrl-Alt-Backspace w czasie pytania o
hasło BIOS, aż to hasło nie zostanie wpisane.
8.4 Kombinacje Dosemu
Ctrl-Alt-Fn Przełącz na WK nr n (od wersji 0.50, wcześniej Alt-Fn)
Ctrl-Alt-PgDn "zabij" dosemu (w trybie SUROWYM klawiatury)
(i wiele innych kombinacji - patrz dokumentacja dosemu)
8.5 Składanie symboli
Jeden symbol może być złożony przy użyciu kilku klawiszy.
lewyAlt-naciśnięcie, plus numer dziesiętny wpisany na klawiaturze
numerycznej, plus lewyAlt-zwolnienie daje symbol o kodzie o tym
numerze (w trybie Unicode ten sam mechanizm, ale wtedy z czterema
cyframi szesnastkowymi, można wykorzystać do zdefiniowania symbolu
Unicode).
Klawisz diakrytyki plus symbol daje ten symbol z nałożoną diakrytyką.
Jeśli kombinacja nie jest zdefiniowana, oba klawisze brane są oddzielnie.
To które klawiszę są diakrytykami jest ustawialne przez użytkownika;
domyślnie żaden. Można zdefiniować pięć (sześć od 2.0.5) klawiszy diakrytyki
(za pomocą loadkeys(1)); dead_grave, dead_acute, dead_circumflex, dead_tilde,
dead_diaeresis (też dead_cedilla). Co dokładnie oznacza owo nałożenie również
jest ustawialne przez użytkownika; np. klawisz diakrytyki + symbol jest
równoważne Compose + diakrytyka + symbol.
Compose plus dwa symbole daje symbol-złożenie. Ten kombinacje są
ustawialne przez użytkownika. Dzisiaj istnieje 68 kombinacji zdefiniowanych
domyślnie; możesz je zobaczyć pisząc "dumpkeys | grep compose"
Dalej idą owe klawisze modyfikujące zwane "Sticky" (od 1.3.33). Na
przykład można napisać ^C jako SControl, C i Ctrl-Alt-Backspace jako
SControl, SAlt, BackSpace
Zauważ że istnieją przynajmniej trzy takie mechanizmy złożeń:
Mechanizm sterownika klawiatury Linuxa, używany w połączeniu z
loadkeys.
Mechanizm X - patrz X386keybd(1), później XFree86kbd(1).
Pod X11R6: zmodyfikuj /usr/X11R6/lib/X11/locale/iso8859-1/Compose.
Mechanizm emacsowy uzyskiwany po załadowaniu "iso-insert.el" lub
wywołaniu iso-accents-mode.
W X porządek obu symboli jest dowolny; i Compose-,-c i Compose-c-, dadzą
dla Linuxa i emacsa domyślnie działa tylko ta pierwsza sekwencja.
Dla X lista kombinacji złożeń jest ustalona. Linux i emacs są elastyczne.
Te trzy domyślne listy są nieco podobne, ale różnią się szczegółami.
9. Różne właściwości konsoli
10. Jak wyjść z trybu surowego
Jeśli jakiś program używający trybu klawiatury K_RAW zakończy działanie
bez przywrócenia trybu klawiatury do K_XLATE, trudno jest coś zrobić -
nie działa nawet Ctrl-Alt-Del. Niemniej można czasami uniknąć naciskania
przycisku Reset (co jest też pożądane; twoi użytkownicy mogą się
zdenerwować jeśli przerwiesz im sesję Hacka przeładowaniem; możesz też
uszkodzić swój system plików).
Proste rozwiązania opierają się na zalogowaniu się z innego terminalu
lub innego komputera i wykonania kbd_mode -a.
Procedura poniżej zakłada że nie jest uruchomiony X, i że ekran znajduje
się w trybie tekstowym, że znajdujesz się w znaku zachęty bash, że
używasz amerykańskiego układu klawiatury i że znakiem który przerywa
działanie komendy jest u ciebie Ctrl-C.
Krok 1. Uruchom X.
Jak poniżej: naciśnij 2 (nie zwalniaj), naciśnij F12 (nie zwalniaj)
i natychmiast potem naciśnij =. Uruchomi to X.
(Wyjaśnienie: jeśli naciśnięcie klawisza wysyła kod klawisza K, to
zwolnienie klawisza wysyła kod K+128. Być może twoja powłoka nie
lubi tych znaków powyżej 128, więc unikamy wysłania ich nie zwalniając
żadnego z klawiszy. Musimy jednak być szybcy, w przeciwnym razie
nastąpi powtarzanie klawiszy. Cyfra 2 daje Ctrl-C, które usuwa poprzednie
śmieci, F12 daje X, a = Return).
Twój ekran może być teraz szary, ponieważ nie wskazano .xinitrc.
Ctrl-Alt-Fn jednak działa, możesz więc przejść do innej WK (Ctrl-Alt-BS
także działa, ale zwraca cię do poprzedniego stanu, a tego nie chcesz).
Step 2. Ustaw zmianę trybu klawiatury.
(Na przykład poprzez sleep 5; kbd_mode -a).
Step 3. Opuść X.
Alt-Fx (często Alt-F7) przywraca X, a wtedy Ctrl-Alt-Backspace powoduje
wyjście z niego. W ciągu pięciu sekund twoja klawiatura znów będzie
nadawała się do użytku.
Jeśli chcesz przygotować się na tą okoliczność, uczyń
\215A\301 (3 symbols) aliasem na kbd_mode -a.
Teraz naciśnięcie tylko = F7 = (trzy symbole) przywróci cię do normalności.
11. Diody na klawiaturze
1. Są to znaczniki klawiatury zależne od tty; każda WK ma swój
NumLock, CapsLock i ScrollLock. Domyślnie te znaczniki pokazywane są
przez diody. Zwykłym sposobem ich zmiany jest naciśnięcie odpowiedniego
klawisza (uwaga uboczna: naciśnięcie klawisza NumLock w trybie klawiszy
aplikacji nie zmieni stanu NumLock, ale wypisze Esc-sekwencję. Jeśli
chcesz żeby klawisz NumLock zawsze zmieniał stan NumLock, przypisz go
do Bare_Num_Lock).
2. Następnie, na każde tty istnieją domyślne znaczniki klawiatury,
aby zinicjalizować je gdy nastąpi przekasowanie. Tak więc jeśli chcesz
żeby NumLock był cały czas włączony, jest to możliwe. Zwykle zmienić
to można przez setleds -D.
3. Istnieje możliwość że diody nie oddają stanu znaczników klawiatury,
ale coś innego.
3A. To coś innego może być jakimiś trzema bitami gdzieś w jądrze -
co można wykorzystać jeżeli chcesz pilnować bitów stanu jakiegoś
sprzętu czy programu. Jeśli chcesz tego, zmodyfikuj źródło jądra
aby wywoływało gdzieś register_leds()/
3B. To coś innego może być też czymkolwiek co jakiś program chce
pokazać za pomocą diod. Tak więc osoby które lubią takie rzeczy mogą
ułożyć ze światełek ładne wzorki. Jeśli chcesz tego, użyj ioctl KBSETLED.
To drugi sposób nie jest "na tty", ale wybór pomiędzy pierwszym a drugim
sposobem jest.
Podsumowując: każde tty ma znacznik kbd -> ledmode. Jeśli ma
on wartość LED_SHOW_FLAGS, wtdy pokazane są znaczniki klawiatury (NumLock
itd.) konkretnego tty. Jeśli ma on wartość LED_SHOW_IOCTL, wtedy
diody pokazują każdą wartość którą ostatnio im przypisano za pomocą
ioctl KBSETLED.
Dodać można że X używa ioctl-ów aby ustawić diody, ale nie
kasuje swojej WK przy wyjściu, tak więc po używaniu X istnieć
może jedna WK która nie jest w domyślnym stanie LED_SHOW_FLAGS. Można
to naprawić wykonując setleds -L na tej WK. Patrz setleds(1).
12. Zmienna TERM
Wiele programów używa zmiennej TERM i bazy danych /etc/termcap
lub /usr/lib/terminfo/* żeby zadecydować które ciągi znaków
wysłać by wyczyścić ekran, przesunąć kursor itd., i często także by
zdecydować który ciąg znaków wysyłany jest przez klawisz wstecznej
spacji [użytkownika], klawisze funkcyjne itp.
Tą wartość ustawia zrazu jądro (dla konsoli).
Zwykle wartość tą ponownie ustawia getty, używając /etc/ttytype
lub argumentu podanego w /etc/inittab.
Czasami jest ona również ustawiana w /etc/profile.
Starsze systemy używają TERM=console lub TERM=co80x25. Nowsze
systemy (z ncurses 1.8.6) używają bardziej dookreślonego TERM=linux
lub TERM=linux-80x25. Niemniej starsze wersje setterm sprawdzają
obecność TERM równej con* i dlatego odmawiają pracy z TERM=linux.
Od wersji jądra 1.3.2, domyślną wartością jądra dla konsoli jest
TERM=linux.
Jeśli masz plik termcap bez kawałka opisującego linux, dodaj słowo
linux do kawałka dla konsoli:
console|con80x25|linux:\
i ustaw /usr/lib/terminfo/l/linux jako kopię lub odnośnik
symboliczny do /usr/lib/terminfo/c/console.
12.1 Terminfo
W kawałku terminfo dla konsoli linuxowej od ncurses 1.8.6 brakuje
kich1=\E[2~, czego potrzebują niektóre programy.
Wyedytuj plik i skompiluj go tic.
13. Jak zmusić inne programy do działania ze znakami spoza ASCII
W dawnych złych czasach było to wcale nużące. Każdy program z osobna
musiał być indywidualnie przekonywany do zostawienia twoich bitów
w spokoju. Nie żeby dzisiaj wszystko było łatwe, ale ostatnio wiele
narzędzi GNU nauczyło się reagować na LC_CTYPE=iso_8859_1 lub
LC_CTYPE=iso-8859-1. Spróbuj najpierw tego; jeśli nie pomoże,
spójrz na podpowiedzi poniżej. Zauważ że w nowszych wersjach libc
procedura setlocale() działa tylko jeżeli zainstalowałeś pliki
locale (tj. w /usr/lib/locale).
Przede wszystkim ósmy bit powinien przetrwać przetwarzanie danych
wejściowych w jądrze, więc upewnij się że ustawiłeś stty cs8
-istrip -parenb
A. Dla emacsa szczegóły w dużym stopniu zależą od wersji. Informacja
poniżej dotyczy wersji 19.34. Wstaw linie:
(set-input-mode nil nil 1)
(standard-display-european t)
(require 'iso-syntax)
do swojego $HOME/.emacs. Pierwsza linia (mówiąc ściślej -
końcowe 1) mówi emacsowi żeby nie obcinał ósmego bitu ze wprowadzanych
znaków. Druga linia mówi emacsowi żeby nie wyświetlał znaków spoza
ASCII jako wartości ósemkowych. Trzecia linia wyszczególnia właściwości
składni i tablicę konwersji małych/dużych liter dla zestawu znaków Latin-1.
Dwie ostatnie linie są zbędne jeżeli masz coś podobnego do
LC_TYPE=ISO-8859-1 w swoim środowisku (zmienna ta może też nazywać się
LC_ALL albo po prostu LANG. Jej wartość może być czymkolwiek co zawiera
ciąg znaków 88591, 8859-1 lub 8859_1).
To już dobry początek. Na terminalach które nie potrafią wyświetlać
symboli ISO-8859-1 spoza ASCII, komenda
(load-library "iso-ascii")
spowoduje że znaki akcentowane wyświetlane będą jako {,c}a. Jeśli twoja
klawiatura nie daje łatwego sposobu wprowadzania znaków spoza ASCII, to
(load-library "iso-transl")
uczyni dwuznakową sekwencję ^X8 znakiem składania [Compose], tak że
czteroznakowa sekwencja ^X8,c daje c-cedilla. Bardzo niewygodne.
Komenda
(iso-accents-mode)
włączy lub wyłączy tryb akcentów ISO-8859-1, w którym sześc klawiszy:
`, ', ", ^, , / są klawiszami diakrytyk które modyfikują następujący
po nich symbol. Kombinacje specjalne: c daje c z cedillą, d daje
islandzkie eth, t daje islandzkie thorn, "s daje niemieckie scharfes-s,
/a daje a z kółeczkiem, /e daje ligaturę ae, < i > dają guillemoty,
! daje odwrócony wykrzyknik, ? odwrócony pytajnik. '' daje akcent acute.
Jest to układ domyślny. Zmienna iso-languages jest listą par (nazwa języka,
układ akcentów), a układ niedomyślny wybrać można poprzez
(iso-accents-customize LANGUAGE)
Tutaj LANGUAGE może być jednym z "portuguese", "irish", "french",
"latin-2", "latin-1".
Ponieważ domyślnym klawiszem Compose w Linuxie jest Ctrl-., może
być wygodniej używać tego wszędzie. Spróbuj
(load-library "iso-insert.el")
(define-key global-map [?\C-.] 8859-1-map)
(Ta ostatnia linia nie będzie działać pod xterm, jeśli używasz
emacs -nw, ale w tym wypadku możesz wstawić)
XTerm*VT100.Translations: #override\n\
Ctrl <KeyPress> . : string("\0308")
do swojego .Xresources.)
B. Dla less, ustaw zmienną środowiskową LESSCHARSET=latin1
Zrób to również jeśli widzisz <255> lub <AD> w tym co
wypisuje man; niektóre wersje less będą oddawać "miękki"
myślnik (ósemkowo 0255, szesnastkowo 0xAD) w ten sposób, jeśli
nie pozwoli im się wypisywać Latin-1.
[jeśli to nie pomoże, wywołuj less z opcją -r, bądź ustaw alias.
Jeśli nawet to nie pomoże, albo masz powłokę która nie obsługuje
aliasów, ustaw zmienną LESSCHARDEF na wartość 32.224c - przyp. tłum.]
C. Dla ls, podaj opcję -N (być może zechcesz ustawić alias)
D. Dla bash (wersja 1.13.*), wstaw
set meta-flag on
set convert-meta off
i, według Danish HOWTO,
set output-meta on
do swojego $HOME/.inputrc.
E. dla tcsh, użyj
setenv LANG US_en
setenv LC_CTYPE iso_8859_1
Jeśli masz w swoim systemie nls, używane są odpowiednie algorytmy.
W przeciwnym razie tcsh założy iso_8859_1, niezależnie od wartości
podanych w zmiennych LANG i LC_TYPE. Patrz sekcja NATIVE LANGUAGE SYSTEM
w tcsh(1). Danish HOWTO twierdzi: setenv LC_CTYPE ISO-8859-1;
stty pass8)
F. Dla flex, podaj opcję -8, jeśli program przetwarzający
który ono tworzy ma operować na ośmiobitowych danych wejściowych
(oczywiście że ma).
G. Dla elm, ustaw displaycharset na ISO-8859-1.
(Danish HOWTO: LANG=C i LC_CTYPE=ISO-8859-1)
H. Dla programów używających curses (takich jak lynx David
Sibley donosi: "Zwykły pakiet curses używa ósmego bitu dla odwrócenia
kolorów tła i ekranu (patrz flaga _STANDOUT zdefiniowana w
/usr/include/curses.h). Niemniej ncurses zdaje się być
czyste ośmiobitowo i wyświetla iso-latin-8859-1 poprawnie.
I. Dla programów używających groff (takich jak man), upewnij
się że używasz -Tlatin zamiast -Tascii. Stare wersje programu
man używają również col, więc następny punkt stosuje się
odpowiednio.
J. Dla col, upewnij się że 1) ustawiony jest tak żeby wykonywać
setlocale(LC_CTYPE,""); i 2) ustawiłeś zmienną środowiskową
LC_CTYPE=ISO-8859-1.
K. Dla rlogin, użyj opcji -8.
L. Dla joe,
sunsite.unc.edu:/pub/Linux/apps/editors/joe-1.0.8-linux.tar.gz
działa podobno po wyedytowaniu pliku konfiguracyjnego. Ktoś inny powiedział:
"joe: wstaw opcję -asis do /isr/lib/joerc, w pierwszej
kolumnie.
M. Dla LaTeX: \documentstyle[isolatin]{article}.
Dla LaTeX2e: \documentclass{article}\usepackage{isolatin}
gdzie isolatin.sty jest dostępny z
ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit.
Ładna dyskusja na temat ISO-8859-1 i tego jak zarządzać ośmiobitowymi
znakami zawarta jest w pliku grasp.insa-lyon.fr:/pub/faq/fr/accents
(po francusku). Inną ładną dyskusję (po angielsku) można znależć w
rtfm.mit.edu:pub/usenet-by-group/comp.answers/character-sets/iso-8859-1-faq.
A jeszcze jedną (?), w ftp.vlsivie.tuwien.ac.at:/pub/8bit/FAQ-ISO-8859-1.
Jeśli chcesz poprawić program który żle zachowuje się ze znakami
ośmiobitowymi, musisz pamiętać o tym że jeśli używasz w nim typu
"signed char", znaki mogą mieć wartości ujemne, a używanie ich jako
indeksu tablicy nie uda się. Niektóre programy można poprawić dodając
rozsądnie rzutowania na typ unsigned char.
14. Co dokładnie robi XFree86-2.1 podczas inicjalizacji układu klawiatury?
Od wersji 2.1 XFree86 zainicjuje swój układ klawiatury z układu linuxowego,
na tyle na ile można. Linux jednak miał 16 pozycji na klawisz (jedna na
każdą kombinację modyfikatorów Shift, AltGr, Ctrl, Alt) a obecnie 256
pozycji na klawisz, podczas gdy X ma cztery pozycje na klawisz (jedna
na każdą kombinację Shift i Mod), tak więc część informacji musi się
zgubić.
X najpierw czyta plik Xconfig, gdzie można znależć definicje
klawiszy LeftAlt, RightAlt, RightCtl, ScrollLock keys takie jak Meta,
ModeShift, Compose, ModeLock czy ScrollLock - patrz X386keybd(1),
później XFree86kbd(1).
Za Mod przyjmuje się lewy Alt, chyba że prawy Ctrl zdefiniowano jako
ModeShift lub ModeLock, w którym to przypadku przyjmuje się prawy Ctrl,
lub chyba że tak zdefiniowano prawy Alt, w którym to przypadku przyjmuje
się prawy Alt.
Ustala to w jaki sposób cztery znaczenia klawisza pod XFree86 są
wybierane z szesnastu znaczeń linuxowych.
Zauważ że dzisiaj Linux domyślnie nie rozróżnia pomiędzy dwoma klawiszami
Ctrl i Shift. X jednak rozróżnia.
Następnie czytany jest układ klawiatury z jądra i poczynione zostają
oczywiste odpowiednie przypisania pod X. Przypisania "klawiszy
czynnościowych" - Show_Memory, Show_State, Show_Registers, Last_Console,
Console_n, Scroll_Backward, Scroll_Forward, Caps_On and Boot są
ignorowane, tak samo jak klawisze diakrytyk i klawisze blokujące
klawiaturę w określonym trybie [locks] (z wyjątkiem ShiftLock), oraz
klawisze "ASCII-x"
Później używane są definicje z pliku Xconfig. Tak więc definicja
klawisza Compose z Xconfig weźmie górę nad wartością znajdującą
się w układzie klawiatury Linuxa.
Co dzieje się z ciągami znaków skojarzonymi z klawiszami funkcyjnymi?
Nic. X nie posiada takiej koncepcji (ale możliwe jest zdefiniowanie
łańcuchów znaków dla klawiszy funkcyjnych w xterm - zauważ jednak
że najpierw otrzymuje te klawisze program zarządzający oknami).
Nie wiem jak przekonać xterm że powinien używać układu klawiatury
X w czasie naciskania Alt; wydaje się że po prostu patrzy na swój zasób
eightBitInput, i zależnie od tego jaką ma wartość logiczną albo
ustawia ósmy bit znaku, albo wypisuje dodatkowy znak Escape (tak jak
setmetamode(1) robi na konsoli).
15. Niecodzienne klawisze i klawiatury
Dwa klawisze: PrintScrn/SysRq i Pause/Break są szczególne w tym że
mają one dwa kody klawiszy: pierwszy ma kody 84 z naciśniętym równocześnie
Alt, i kod 99 w przeciwnym razie; drugi ma kod klawisza 101 z naciśniętym
równocześnie Ctrl i kod 119 w przeciwnym razie. Tak więc nie ma sensu
przypisywać funkcji Alt-kod 99 lub Ctrl-kod 119.
Jeśli masz dziwne klawisze które nie wypisują pod Linuxem żadnego kodu
lub wysyłają komunikaty takie jak "unrecognized scancode"), a twoje
jądro to 1.1.63 lub późniejsze, możesz użyć setkeycodes(1) by powiedzieć
o nich [kodach] jądru. Nie będą one jednak działać pod X.
Gdy przypisano im kod klawisza za pomocą setkeycodes, można im
przypisać funkcję za pomocą loadkeys.
16. Przykłady użycia loadkeys i xmodmap
Zamiana Caps Lock i Control na klawiaturze (zakładając że używasz
układów klawiatur 0-15; sprawdź przez dumpkeys | head -1)
% loadkeys
keymaps 0-15
keycode 58 = Control
keycode 29 = Caps_Lock
%
Powyższa zamiana tylko pod X:
% xmodmap .xmodmaprc
gdzie .xmodmaprc zawiera linie
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
O co chodzi z tymi numerami klawiszy? Backspace ma 14 pod Linuxem,
a 22 pod X? No cóż, numery najlepiej uważać za przydzielone dowolnie;
linuxowy numer klawisza znaleźć można używając showkey(1), a numer
Xowy przez xev(1). Często numer Xowy będzie o 8 większy niż
linuxowy.
Coś co ludzie chcą zmieniać to przypisania klawiszy funkcyjnych.
Załóżmy że chcesz aby F12 wypisywał ciąg znaków "emacs". Wtedy
% loadkeys
keycode 88 = F12
string F12 = "emacs "
%
zrobi to. Ściślej, procedura wygląda mniej więcej tak: (i) znajdź
kody klawiszy które mają mieć zmienione przypisania, za pomocą showkey(1),
(ii) zachowaj bieżący układ klawiatury, zrób kopię i ją edytuj.
% dumpkeys > my_keymap
% cp my_keymap trial_keymap
% emacs trial_keymap
% loadkeys trial_keymap
%
Format tablicy zgadnąć można patrząc na wynik dumpkeys, a opisuje
go keytables(5). Gdy nowy układ klawiatury działa tak jak tego chcemy,
możesz wstawić wywołanie
loadkeys my_new_keymap
do /etc/rc.local czy coś takiego, żeby wykonywać je automatycznie
w czasie ładowania. Zauważ że zmiana klawiszy modyfikujących jest
zawiła, a nowicjusz może łatwo wplątać się w sytuację z której
wydostać się może tylko ekspert.
Domyślnym katalogiem układów klawiatur jest /usr/lib/kbd/keytables.
Domyślnym rozszerzeniem plików układów jest .map. Tak więc loadkeys uk
załaduje prawdopodobnie /usr/lib/kbd/keytables/uk.map.
(Na moim komputerze) /dev/console jest odnośnikiem symbolicznym
do /dev/tty0, a jądro uważa /dev/tty0 za synonim
bieżącej WK. XFree86 zmienia właściciela /dev/tty0, ale nie
przywraca stanu poprzedniego po zakończeniu. Tak więc polecenie dumpkeys
może się nie powieść, ponieważ ktoś inny jest właścicielem
/dev/tty0; w takim przypadku możesz wpierw uruchomić X.
16.1 "Mogę używać tylko jednego palca do pisania"
Czy klawisze Shift, Ctrl i Alt mogą się zachowywać jak przełączniki?
Tak, po napisaniu:
% loadkeys
keycode 29 = Control_Lock
keycode 42 = Shift_Lock
keycode 56 = Alt_Lock
%
klawisze lewy Control, Shift i Alt będą działać jako przełączniki.
Odpowiednie numery podaje showkey (zwykle są to 29, 97, 42, 54, 56, 100
dla lewego i prawego Control, Shift i Alt odpowiednio), a funkcje to
Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.
Co z klawiszami "sticky" [zachowywanymi w buforze do naciśnięcia
następnego klawisza(y) - przyp. tłum.] ?
Od wersji 1.3.33, jądro wie o modyfikatorach "sticky". Działają one
na następny naciśnięty klawisz. Tak więc, tam gdzie wcześniej trzeba
było trzysymbolowej sekwencji Shift_Lock-a-Shift_Lock można teraz używać
dwusymbolowej sekwencji SShift_Lock-a.
Bieżąca wersja pakietu kbd nie zawiera jeszcze kodu dla "stickies",
tak więc trzeba je wywoływać używając ich kodów szesnastkowych. Na
przykład:
% loadkeys
keymaps 0-15
keycode 54 = 0x0c00
keycode 97 = 0x0c02
keycode 100 = 0x0c03
%
uczyni prawe Shift, Ctrl i Alt wersjami "sticky" klawiszy lewych.
Od wersji 0.93 można napisać
% loadkeys
keymaps 0-15
keycode 54 = SShift
keycode 97 = SCtrl
keycode 100 = SAlt
%
by otrzymać ten sam rezultat. Pozwoli to napisać ci Ctrl-Alt-Del
trzema naciśnięciami klawiszy, używając jednej ręki
to obtain the same result.
17. Zmiana trybu ekranowego
Jak dotąd wiem o sześciu sposobach zmiany rozdzielczości:
1. W czasie kompilacji zmień linię
SVGA_MODE= -DSVGA_MODE=NORMAL_VGA
w /usr/src/linux/Makefile.
1A. Po kompilacji użyj rdev -v - okropna łata, ale istnieje.
2. W czasie ładowania systemu: wstaw vga=ask do pliku
konfiguracyjnego lilo [zwykle /etc/lilo.conf - przyp. tłum.], a lilo
spyta się jakiego trybu ekranowego użyć. Kiedy już wiesz, wstaw tam
vga=mypreference.
3.W czasie uruchamiania:
A. Użyj komendy resizecons (jest to bardzo prymitywne opakowanie
ioctl VT_RESIZE).
B. Użyj komendy SVGATextMode (jest to mniej prymitywne opakowanie
ioctl VT_RESIZE).
4. Nie "na konsoli":
Pod dosemu, bądź używając svgalib itd. możesz zmienić sprzętowy
tryb ekranowy bez powiadamiania o tym konsoli. Czasami jest to użyteczne
w ustawianiu resizecons lub SVGATextMode set up: użyj dosemu
i jakiegoś programu DOSowego by przełączyć się na pożądany tryb ekranowy,
zrzuć (powiedzmy z innej WK) zawartość wszystkich rejestrów sprzętowych
karty graficznej, i użyj ich w inicjalizacji której wymagają resizecons
i SVGATextMode.
W niektórych przypadkach gdy tryb ekranowy przełączył się na jakiś
stan nie do użytku, odpalenie dosemu, poleganie na BIOSie co do
ustawienia trybu ekranowego i "zabicie" dosemu używając kill -9
jest najprostszą metodą przywrócenia porządku.
17.1 Instrukcje co do używania resizecons
Zdobądź svgalib i skompiluj program restoretextmode. Wystartuj
komputer we wszystkich możliwych trybach ekranowych (używając vga=ask)
w pliku konfiguracyjnym lilo i zapisz zawartość rejestrów sprzętowych
karty graficznej do plików KxW (K=kolumny, W=wiersze), np. 80x25, 132x44
itd. Wstaw te pliki do /usr/lib/kbd/videomodes. Teraz
resizecons 132x44 zmieni tryb ekranowy za ciebie (i wyśle
SIGWINCH do wszystkich procesów które o tym wiedzą, oraz załaduje
inną czcionkę jeśli to konieczne).
Obecnie wykonanie resizecons kończy się sukcesem wtedy tylko gdy
jest dość pamięci na starą i nową konsolę równocześnie.
18. Zmiana częstości powtarzania klawiszy
Przy starcie jądro Linuxa ustawia częstość powtarzania na wartość
maksymalną. Dla większości klawiatur jest to rozsądne, ale dla niektórych
oznacza że nie możesz dotknąć klawisza żeby nie otrzymać trzech kopii
odpowiadającego mu symbolu. Użyj programu kbdrate(8) by zmienić
częstość powtarzania lub, jeśli to nie pomoże, zmodyfikuj lub usuń
sekcję
! ustaw częstość powtarzania klawiatury na maximum
mov ax,#0x0305
xor bx,bx ! clear bx
int 0x16
w /usr/src/linux/[arch/i386/]boot/setup.S.
19. Przewijanie
Istnieją dwa sposoby zmuszenia ekranu do przewinięcia się. Pierwsza,
zwana "twardym przewijaniem" to pozostawienie tekstu w pamięci ekranu
w bieżącej postaci, ale zmienienie punktu oglądania. Jest to bardzo
szybkie. Druga, zwana "miękkim przewijaniem" polega na przesuwaniu
całego ekranu tekstowego w górę lub dół. Jest to o wiele wolniejsze.
Sterownik konsoli jądra wypisze tekst zaczynający się u górnej granicy
pamięci ekranu, kontynuując aż do dołu, potem znów skopiuje część
dolną na górną, i tak dalej, cały czas używając twardego przewijania
by pokazać właściwą część ekranu. Możesz przewijać w tył aż do górnej
granicy pamięci ekranu używając Shift-PageUp (szary PageUp) i z powrotem
w dół używając Shift-PageDown (szary PageDown), zakładając domyślny układ
klawiatury. Ile można przewinąć w tył wyznacza więc ilość pamięci ekranu
którą masz, i nie możesz jej zwiększyć. Jeśli potrzebujesz przewinąć
więcej, użyj jakiegoś programu który buforuje tekst, jak less czy
screen - używając bufora na dysku możesz wrócić do tego co robiłeś
tydzień temu. (dla xterm można ustawić możliwe przewijanie w tył
dodając linię w rodzaju XTerm*saveLines: 2500 do .Xresources.)
Przy zmianie wirtualnych konsol zawartość ekranu starej WK jest kopiowana
do pamięci jądra, a zawartość ekranu nowej WK jest kopiowana z pamięci
jądra do pamięci ekranu. Tylko ekran widzialny jest kopiowany, nie
całość pamięci ekranu, tak więc zmiana konsoli powoduje utratę
całej informacji o przewijaniu.
Czasami twarde przewijanie nie jest pożądane, na przykład gdy sprzęt
nie posiada możliwości zmiany punktu oglądania ekranu. Pierwszym
przykładem byłą maszyna braillowska, która oddaje zawartość górnej
części pamięci ekranu w braille'u. Istnieje opcja używana w czasie
ładowania jądra (no-scroll, która mówi sterownikowi konsoli by nie
używał twardego przewijania. Patrz bootparam(7)).
20. Wygaszanie ekranu
setterm -blank nn nakaże sterownikowi konsoli wygasić
ekran po nn minutach bezczynności. Używając nn równego 0,
wygaszanie można wyłączyć. W niektórych starszych jądrach nabierało
to efektu dopiero po pierwszym przerwaniu klawiatury.
Opcja s xset(1) ustawi parametry wygaszacza pod X.
Sprzętowe tryby ekranowe oszczędzające energię można włączyć/wyłączyć
używając programu setvesablank podanego w komentarzu na początku
/usr/src/linux/drivers/char/vesa_blank.c.
21. Zrzuty ekranu
setterm -dump N zrzuci zawartość eranu /dev/ttyN do pliku
screen.dump w bieżącym katalogu. Patrz setterm(1).
Prawidłową zawartość ekranu /dev/ttyN odczytać można używając
urządzenia /dev/vcsN (gdzie "vcs" oznacza "virtual console
screen"). Na przykład, mógłbyś uruchomiony zegar który wyświetla
bieżący czas w górnym prawym rogu konsoli (patrz program vcstime
w kbd-0.92.tar.gz). Samo zrzucenie zawartości następuje po
cat /dev/vcsN. Owe urządzenia /dev/vcsN nie zawierają znaków
LF (nowej linii), ani atrybutów (jak kolory). We wnętrzu programu lepiej
jest zapewne zamiast tego użyć /dev/vcsaN ("virtual console screen w/
attributes") - zaczyna się ono nagłówkiem podającym liczbę wierszy i
kolumn oraz położenie kursora. Patrz vcs(4).
22. Niektóre właściwości vt100 - tryb klawiszy aplikacji
: Czasami moje klawisze kursora dają dziwne kody.
Gdy terminal znajduje się w trybie klawiszy aplikacji klawisze
kursora wypisują Esc O x, a w przeciwnym razie Esc [ x, gdzie x =
A, B, C, D. Niektóre programy ustawiają terminal w tryb klawiszy aplikacji;
jeśli przerwiesz je przez kill -9, albo jeśli padną, tryb nie
zostanie przestawiony.
% echo -e '\033c'
Kasuje wszystkie właściwości bieżącej WK do domyślnych. Zmiany tylko
trybu klawiszy aplikacji dokonuje się przez:
% echo -e '\033[?1h'
(ustawia) i
% echo -e '\033[?1l'
(kasuje).
23. Niekompatybilość sprzętowa
Niektóre osoby zauważyły że tracą wpisywane znaki gdy aktywny jest
napęd stacji dysków. Wygląda na to że może to być problem z płytami
głównymi Uni-486WB.
(proszę napisać do mnie żeby potwierdzić: "tak, mam ten sam problem";
zaprzeczyć "nie, wszystko w porządku z moim Uni-486WB; zmienić: "mój
komputer Xyz ma ten sam problem").
Tjalling Tjalkens (tjalling@ei.ele.tue.nl) donosi o bardzo podobnych
problemach z "niemarkową płytą główną GMB-486 UNP VESA z procesorem
AMD 486DX2-66" - w czasie pracy stacji dyskietek niektóre naciśnięcia
klawiszy gubią się, w czasie pracy streamera (Conner C 250 MQ) traci
się wiele naciśnięć.
Niektóre osoby doświadcząją sporadycznych zawieszeń - czasami związanych
z pracą twardego dysku lub innego urządzenia I/O.
ulf@rio70.bln.sni.de (Ulf Tietz) pisze:
"Miałem te same problemy gdy dostroiłem swoją płytę główną na zbyt
dużą szybkość. Ustawiłem więc wszystkie czasy oczekiwania (CLK, wait
statements) na bardziej konwencjonalne wartości, i problemy zniknęły".
bhogan@crl.com (Bill Hogan) pisze:
"Jeśli masz AMI BIOS, możesz spróbować ustawić emulację Gate A20 na
"chipset" (jeśli masz taką opcję). Za każdym razem gdy miałem
ten parametr ustawiony na jakąś inną opcję ("fast", "both", "disabled"),
miałem częste zawieszenia się klawiatury".
--------------------------------------------------------------------
Uprasza się o dodatki i poprawki
Andries Brouwer - aeb@cwi.nl
Wyszukiwarka
Podobne podstrony:
Keyboard HOWTO pl 23 (2)Keyboard HOWTO pl 7 (2)Keyboard HOWTO pl 21 (2)Keyboard HOWTO pl 14 (2)Keyboard HOWTO pl 15 (2)Keyboard HOWTO pl (3)Keyboard HOWTO pl 13 (2)Keyboard HOWTO pl 5 (2)Keyboard HOWTO pl 19 (2)Keyboard HOWTO pl 6 (2)Keyboard HOWTO pl 16 (2)Keyboard HOWTO pl 17 (2)Keyboard HOWTO pl 8 (2)Keyboard HOWTO pl 22 (2)Keyboard HOWTO pl 10 (2)Keyboard HOWTO pl 11 (2)Keyboard HOWTO pl 1 (2)Keyboard HOWTO pl 18 (2)Keyboard HOWTO pl 18 (2)więcej podobnych podstron