|
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).
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 .
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.
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.
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".
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.
% 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
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.
Przy pierwszej próbie, komunikujesz się z getty
. Przy drugiej
próbie, komunikujesz się z login
, innym programem.
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.
(i) Ponieważ vt100 miał klawisz Delete nad klawiszem Enter.
(ii) Bo Linus tak postanowił.
% 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).
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
.
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)
Wsadź do swojego pliku .kermrc
linie jak niżej:
set key \127 \8
set key \8 \127
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
.
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.
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.
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".
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).
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
.
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ą
etc/rc.local, naciśnięcie Alt-strzałka_w_górę utworzy
nową WK z uruchomionym 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
do
loadkeys << EOF
alt keycode 103 = Spawn_Console
EOF
spawn_login &
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
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 W obecnym jądrze Ctrl-AltGr-Del nie jest już domyślnie przypisane do
Boot.
[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.
(i wiele innych kombinacji - patrz dokumentacja dosemu)
Jeden symbol może być złożony przy użyciu kilku klawiszy.
Zauważ że istnieją przynajmniej trzy takie mechanizmy złożeń:
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.
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 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 Step 2. Ustaw zmianę trybu klawiatury.
(Na przykład poprzez 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ń
1. Są to znaczniki klawiatury zależne od 2. Następnie, na każde 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ś 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 Dodać można że
Wiele programów używa zmiennej Starsze systemy używają Od wersji jądra 1.3.2, domyślną wartością jądra dla konsoli jest
Jeśli masz plik termcap bez kawałka opisującego linux, dodaj słowo
linux do kawałka dla konsoli:
i ustaw
W kawałku terminfo dla konsoli linuxowej od ncurses 1.8.6 brakuje
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 Przede wszystkim ósmy bit powinien przetrwać przetwarzanie danych
wejściowych w jądrze, więc upewnij się że ustawiłeś A. Dla
do swojego To już dobry początek. Na terminalach które nie potrafią wyświetlać
symboli ISO-8859-1 spoza ASCII, komenda
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
uczyni dwuznakową sekwencję ^X8 znakiem składania [Compose], tak że
czteroznakowa sekwencja ^X8,c daje c-cedilla. Bardzo niewygodne.
Komenda
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
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
(Ta ostatnia linia nie będzie działać pod
do swojego B. Dla [jeśli to nie pomoże, wywołuj C. Dla D. Dla
i, według Danish HOWTO,
do swojego E. dla
Jeśli masz w swoim systemie F. Dla G. Dla H. Dla programów używających curses (takich jak I. Dla programów używających J. Dla K. Dla L. Dla M. Dla LaTeX: Ładna dyskusja na temat ISO-8859-1 i tego jak zarządzać ośmiobitowymi
znakami zawarta jest w pliku 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.
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ć.
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 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 Nie wiem jak przekonać
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ą
Zamiana Caps Lock i Control na klawiaturze (zakładając że używasz
układów klawiatur 0-15; sprawdź przez
Powyższa zamiana tylko pod X:
gdzie
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
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.
Format tablicy zgadnąć można patrząc na wynik
do Domyślnym katalogiem układów klawiatur jest (Na moim komputerze)
Czy klawisze Shift, Ctrl i Alt mogą się zachowywać jak przełączniki?
Tak, po napisaniu:
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
uczyni prawe Shift, Ctrl i Alt wersjami "sticky" klawiszy lewych.
Od wersji 0.93 można napisać
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.
Jak dotąd wiem o sześciu sposobach zmiany rozdzielczości:
1. W czasie kompilacji zmień linię
w 1A. Po kompilacji użyj 2. W czasie ładowania systemu: wstaw 3.W czasie uruchamiania:
A. Użyj komendy 4. Nie "na konsoli":
Pod
Zdobądź svgalib i skompiluj program Obecnie wykonanie
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ę
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 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)).
Opcja Sprzętowe tryby ekranowe oszczędzające energię można włączyć/wyłączyć
używając programu
Prawidłową zawartość ekranu
: 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
Kasuje wszystkie właściwości bieżącej WK do domyślnych. Zmiany tylko
trybu klawiszy aplikacji dokonuje się przez:
(ustawia) i
(kasuje).
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
/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)
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).
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
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)
8.5 Składanie symboli
/usr/X11R6/lib/X11/locale/iso8859-1/Compose
.9. Różne właściwości konsoli
10. Jak wyjść z trybu surowego
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.
.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).
sleep 5; kbd_mode -a
).
\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
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).
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
.
register_leds()
/
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.
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
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
.
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
.
TERM=linux
.
console|con80x25|linux:\
/usr/lib/terminfo/l/linux
jako kopię lub odnośnik
symboliczny do /usr/lib/terminfo/c/console
.
12.1 Terminfo
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
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
).
stty cs8
-istrip -parenb
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)
$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).
(load-library "iso-ascii")
(load-library "iso-transl")
(iso-accents-mode)
(iso-accents-customize LANGUAGE)
(load-library "iso-insert.el")
(define-key global-map [?\C-.] 8859-1-map)
xterm
, jeśli używasz
emacs -nw
, ale w tym wypadku możesz wstawić)
XTerm*VT100.Translations: #override\n\
Ctrl <KeyPress> . : string("\0308")
.Xresources
.)
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.
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.]
ls
, podaj opcję -N
(być może zechcesz ustawić alias)
bash
(wersja 1.13.*), wstaw
set meta-flag on
set convert-meta off
set output-meta on
$HOME/.inputrc
.
tcsh
, użyj
setenv LANG US_en
setenv LC_CTYPE iso_8859_1
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
)
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).
elm
, ustaw displaycharset
na ISO-8859-1
.
(Danish HOWTO: LANG=C
i LC_CTYPE=ISO-8859-1
)
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.
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.
col
, upewnij się że 1) ustawiony jest tak żeby wykonywać
setlocale(LC_CTYPE,"");
i 2) ustawiłeś zmienną środowiskową
LC_CTYPE=ISO-8859-1
.
rlogin
, użyj opcji -8
.
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.
\documentstyle[isolatin]{article}
.
Dla LaTeX2e: \documentclass{article}\usepackage{isolatin}
gdzie isolatin.sty
jest dostępny z
ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit
.
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
.
14. Co dokładnie robi XFree86-2.1 podczas inicjalizacji układu klawiatury?
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).
Xconfig
. Tak więc definicja
klawisza Compose z Xconfig
weźmie górę nad wartością znajdującą
się w układzie klawiatury Linuxa.
xterm
- zauważ jednak
że najpierw otrzymuje te klawisze program zarządzający oknami).
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
setkeycodes
, można im
przypisać funkcję za pomocą loadkeys
.
16. Przykłady użycia loadkeys i xmodmap
dumpkeys | head -1
)
% loadkeys
keymaps 0-15
keycode 58 = Control
keycode 29 = Caps_Lock
%
% xmodmap .xmodmaprc
.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
% loadkeys
keycode 88 = F12
string F12 = "emacs "
%
% dumpkeys > my_keymap
% cp my_keymap trial_keymap
% emacs trial_keymap
% loadkeys trial_keymap
%
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
/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.
/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
.
/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"
% loadkeys
keycode 29 = Control_Lock
keycode 42 = Shift_Lock
keycode 56 = Alt_Lock
%
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
%
% loadkeys
keymaps 0-15
keycode 54 = SShift
keycode 97 = SCtrl
keycode 100 = SAlt
%
17. Zmiana trybu ekranowego
SVGA_MODE= -DSVGA_MODE=NORMAL_VGA
/usr/src/linux/Makefile
.
rdev -v
- okropna łata, ale istnieje.
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
.
resizecons
(jest to bardzo prymitywne opakowanie
ioctl VT_RESIZE).
B. Użyj komendy SVGATextMode
(jest to mniej prymitywne opakowanie
ioctl VT_RESIZE).
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
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).
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
! 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
xterm
można ustawić możliwe przewijanie w tył
dodając linię w rodzaju XTerm*saveLines: 2500 do .Xresources.)
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.
s
xset(1) ustawi parametry wygaszacza pod X.
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).
/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
kill -9
, albo jeśli padną, tryb nie
zostanie przestawiony.
% echo -e '\033c'
% echo -e '\033[?1h'
% echo -e '\033[?1l'
23. Niekompatybilość sprzętowa
Hosting by: Hurra Communications Sp. z o.o.
Generated: 2007-01-26 18:02:23