Keď je slovensk� font na konzole rozbehan� a naše n�rodn� znaky sa zobrazuj� spr�vne, m�me
so slovenčinou probl�m č�slo dva - ako tam tie znaky dostať? Keby ste si chceli tento s�bor
len preč�tať bez potreby n�slednej navštevy psychiatra, stačilo by zaviesť nejak� font so
slovenskou podporou. Ale keďže ste uvedomel� linux�k�/�uvedomel� linux�čka, hneď
chcete do Slovak-HOWTO prispieť a pomocou kl�vesnice p�sať slovensk�
text. Na to potrebujete s tou kl�vesnicou niečo urobiť.
Adres�re /usr/lib/kbd/keymaps/i386/qwertz/ a
qwerty/ obsahuj�
po nainštalovan� bal�ka
kbd/console-tools aj popisy
slovensk�ho rozloženia kl�ves. Pre n�s s� zauj�mav� s�bory
sk-prog-qwerty.map.gz |
sk-qwerty.map.gz |
sk-prog-qwertz.map.gz |
sk-qwertz.map.gz |
Tieto s�bory obsahuj� defin�cie rozloženia kl�ves pre slovensk� jazyk, pričom rozdiely
medzi nimi s� v umiestnen� kl�ves Y a Z a počte
slovensk�ch znakov, ktor� pomocou nich možno nap�sať priamo (bez mŕtvych kl�ves). Najviac sa
na slovensk� p�sac� stroj podob� sk-qwertz, najmenšie zmeny
oproti americkej kl�vesnici s� zase v sk-prog-qwerty.
S�bory v adres�ri /usr/lib/kbd/keymaps/i386/include/
obsahuj� popis z�kladn�ch rozložen� kl�ves (azerty
, qwerty, qwertz
), pr�davn�ch kl�ves (keypad,
windowkeys), pr�padne probl�mov�ch kl�ves ( delete, backspace, ctrl
). S�bory linux-*.inc.gz s� špecifick� pre linux
(teda nie pre jazyk). S� to napr. kľ�če (F1-F12,
kombinovan�m s Ctrl a Shift až po F48),
Shift-PgUp a Shift
-PgDown, atď.
Keymapy *.inc.gz nepopisuj� kompletn� rozloženie kl�vesnice, ale
len niektor�ch jej čast�. Využ�vaj� sa pri prip�jan�
(include) zo s�borov *.map.gz, čo je
v�hodn� z d�vodu jednoduchšej konfigur�cie kl�vesnice. Napr�klad zmenou jedn�ho riadku v
s�bore s rozložen�m sk-qwerty m�žme dostať rozloženie
qwertz, pr�padne (to asi využijete) jednoducho odstaviť znaky euro a
cent, ktor� (zatiaľ?) nepotrebujeme a zbytočne n�m zaberaj� znaky
E a C.
Na zavedenie s�boru s popisom rozloženia kl�ves sl�ži nasledovn� pr�kaz:
loadkeys nazov
kde nazov m�že byť absol�tna alebo relat�vna cesta ku
keymap s�boru, alebo meno s�boru, pokiaľ sa nach�dza v adres�ri /usr/lib/kbd/keymaps/, či už s pr�ponou, alebo bez.Štandardn� slovensk� popisy rozloženia kl�ves n�jdeme vo vyššie spom�nan�ch
*.map.gz s�boroch. Ak sa chcete vr�tiť k štandardn�mu rozloženiu,
pr�kaz
zavedie p�vodn�, ktor� je uložen� v s�bore
defkeymap.map.gz niekde
medzi ostatn�mi keymap s�bormi. Predt�m ale nikdy nezabudnite zmeniť režim slovenskej
kl�vesnice na
US znaky, tzn.
1 d�va
1 a nie
+ atď. Ak by ste
predsa zabudli, je možn�, že kl�vesy, kde sa nach�dzali slovensk� znaky, nebud� fungovať
spr�vne (v skutočnosti bud� fungovať spr�vne, ale v�m sa to nebude p�čiť). Vtedy znovu
zaveďte predchadz�j�cu keymapu (na nefunkčn� kl�vesy použite
AltGr - prav�
Alt) a kl�vesou
Pause/Break všetko naprav�te. Potom m�žete
znova zaviesť defkeymap.
Pokiaľ sa v�m nep�či ani jeden zo štandardn�ch keymap s�borov pre slovenčinu, čo je
pravdepodobn� vďaka riadku
v include s�boroch
qwerty-layout.inc.gz aj
qwertz-layout.inc.gz, m�žete kľudne pozmeniť existuj�ci s�bor s popisom
rozloženia kl�ves, pr�padne vytvoriť nov�. Nebojte sa, je to zložit�! Nebudem to tu
rozpisovať všetko, prezrite si zop�r kmap s�borov, preč�tajte manu�lov� str�nku keymaps(5) a
mali by ste to ľahko pochopiť.
My si povieme len o z�kladn�ch veciach, ktor� n�m pom�žu pozmeniť existuj�ce kmap s�bory
s popismi slovensk�ch kl�vesn�c, aby ste si poradili s (mne zn�mymi) komplik�ciami, alebo
upravili rozloženie kl�ves podľa svojho gusta.
Probl�m s E a C je sp�soben� zaveden�m jednotnej meny
v eur�pskej �nii. Na vine nie je ani tak EU, ale niekto, kto symboly pre
euro a cent umiestnil na AltGr-E a AltGr-C, čo s� naše obyčajn� E a C. Totiž, n�rodn�
kl�vesnice s� v�čšinou riešen� tak, že po zaveden� s�boru naďalej funguje americk�
rozloženie a na prep�nanie do n�rodn�ho režimu sa použ�va kl�vesa Pause,
alebo m�žme zad�vať n�rodn� kl�vesy pri s�časnom držan� kl�vesy AltGr
(prav� Alt). S�bor euro.inc, ktor� definuje tieto dva
probl�mov� symboly, je pripojen� zo s�boru qwerty-layout.inc, ktor�
zase prip�jaj� samotn� slovensk� keymapy (sk-qwerty,
sk-prog-qwertz, …).
Riešenie je veľmi jednoduch� - zeditujete qwerty-layout.inc (alebo
qwertz-layout.inc) a odkomentujete znakom
# riadok
Predch�dzaj�ci probl�m s eurom možno vyriešiť aj definovan�m znakov E a
C v samotnom s�bore sk-qwerty.kmap.gz (alebo inom,
ktor� použ�vate) pomocou slova keycode:
keycode 18 = e
keycode 46 = c
|
V keymap s�boroch je pre každ� kl�vesu (alebo aspoň pre každ�, ktor� chceme
predefinovať) jeden riadok približne tohto razenia:
keycode 3 = two at lcaron two nul nul nul nul Meta_two Meta_two...
|
Č�slo za keycode označuje určit� kl�vesu a reťazce za
= hovoria o tom, ak� znak m� ovl�dač kl�vesnice generovať
pri stlačen� tejto kl�vesy, a to buď samotnej, alebo v kombin�cii so špeci�lnymi kl�vesmi
Shift, AltGr, Control,
Alt, ShiftL, ShiftR,
Ctrl a CtrlR. To n�m d�va 256 možn�ch znakov na každ�
kl�vesu.
V�čšinou sa pozmeňuje len prv�ch 16 kombin�ci� modifik�torov. To je v�znam riadku
na začiatku kmap s�borov.
V nasleduj�com zozname je t�chto 16 kombin�ci� (po riadkoch):
žiadny | Shift | AltGr | Shift-AltGr |
Control | Shift-Control | AltGr-Control | Shift-AltGr-Control |
Alt | Shift-Alt | AltGr-Alt | Shift-AltGr-Alt |
Control-Alt | Shift-Control-Alt | AltGr-Control-Alt | Shift-AltGr-Control-Alt |
Z hľadiska slovenskej kl�vesnice s� d�ležit� len prv� štyri - prv� dva s� zvyčajne
nezmenen� americk� znaky, napr. two at, čo je
2 @, a druh� dva s� znaky slovenskej abecedy, ktor� bude
ovl�dač kl�vesnice posielať aplik�ci�m ak pri stlačen� tejto kl�vesy budeme s�časne držať
kl�vesu AltGr (prav� Alt), napr. lcaron
two, čo je naše ľ 2.
Aby ste mohli vkladať slovensk� znaky, nemus�te cel� čas pridržiavať
AltGr nosom, ale m�žete použiť Pause/Break, ktor� v
kontexte s n�rodn�mi kl�vesnicami funguje ako AltGr Lock. Ch�pte to tak, že
keď sa prepnete do slovensk�ho režimu stlačen�m Pause/Break, prv� a druh�
dva reťazce v každom riadku keycode sa vymenia, napr.
two at lcaron two -> lcaron two two at
|
Vtedy m�žete použiť AltGr na zad�vanie znakov americkej kl�vesnice,
alebo sa op�tovn�m stlačen�m Pause/Break prepn�ť sp�t do
US režimu.
Riadok pre kl�vesu s k�dom 41 (znaky ` a ~), m� v
s�bore sk-qwerty.map.gz nasledovn� tvar:
keycode 41 = grave asciitilde dead_diaeresis dead_circumflex ...
|
Mne osobne sa nep�či, že s� tu umiestnen� mŕtve kl�vesy dead_diaeresis
(dve bodky nad znakom) a dead_circumflex (m�kčeň), pretože ich nepotrebujem
--- � aj � na slovenskej kl�vesnici predsa je. A keby aj
nebolo, na ich p�sanie m�žem kľudne použiť mŕtvy kl�ves m�kčeň. O tom si bližšie povieme v
časti o compose sekvenci�ch. Teraz chcem mať na tomto mieste znaky ;
(semicolon) a � (degree) tak, ako je to na popiske mojej kl�vesnice. Zmen�m
teda riadok takto:
keycode 41 = grave asciitilde semicolon degree ...
|
In�č, ten stupeň asi nie je stupeň, ale mŕtvy znak kr�žku nad p�smenom, napr. v češtine
nad u, ale tak� kl�ves je n�m fakt nanič. Radšej budeme p�sať stupne.
N�zvy znakov, ktor� sa použ�vaj� pri definovan� jednotliv�ch kl�ves si m�žete pre znaky
ASCII zistiť v s�bore us.map.gz. Č�seln� k�dy
všetk�ch kl�ves v�m vypľuje program
showkey
Pravidl� pre n�zvy znakov špecifick�ch pre slovenčinu v kmap s�boroch:
Prv� p�smeno v n�zve určuje ASCII znak, pre ktor� chceme použiť
diakritiku.
K nemu prid�me identifik�tor diakritick�ho znamienka:
caron --- m�kčeň |
acute --- dĺžeň |
diaeresis --- dve bodky nad |
circumflex --- vok�ň |
Napr�klad:
scaron = š |
uacute = � |
Ocircumflex = � |
N�zvy ďalš�ch znakov špecifick�ch pre slovenčinu:
0xa7 --- � (paragraf) |
degree --- � stupeň |
Pre spr�vnu interpret�ciu identifik�torov znakov s diakritikou je nutn� na začiatku kmap
s�boru určiť k�dov� str�nku, pre ktor� bude určen� tento popis rozloženia kl�ves. Ide o to,
že ten ist� znak m�že mať v r�znych k�dov�ch str�nkach in� ASCII k�d.
Implicitn� hodnota je iso-8859-1, teda pre slovensk� keymapy je nutn�
vložiť riadok:
Ešte jeden pr�klad: ak chcete použ�vať slovensk� rozloženie
qwertz a americk� rozloženie
qwerty, potrebujete vymeniť znaky Y a
Z:
keycode 21 = y Y z Z
keycode 44 = z Z y Y
|
Na prv� pohľad to m�že fungovať dobre, ale probl�m sa prejav� pri zapnutom Caps
Lock - znaky Y a Z sa st�le p�šu mal�mi
p�smenami. Pri p�san� popisov rozložen� znakov možno tak�to probl�m ošetriť pridan�m p�smena
+ pred každ� p�smeno v keycode riadku danej kl�vesy.
P�smeno + určuje nasledovn�mu p�smenu atrib�t
letter, teda sa bude pri stlačenom Caps Lock
p�sať veľk� p�smeno. Všetky p�smen� a-z,
A-Z maj� tento atrib�t priraden� automaticky, ale to len v
pr�pade, že maj� keycode riadok tvaru:
V našom pr�pade teda mus�me priradiť tento atrib�t všetk�m znakom explicitne. Takže,
konečn� �prava keymapy bude:
keycode 21 = +y +Y +z +Z
keycode 44 = +z +Z +y +Y
|
Pre v�menu p�smen toto riešenie funguje spoľahlivo, bohužiaľ, ešte st�le neexistuje
sp�sob, ktor�m by sa dalo dosiahnuť napr�klad p�sanie veľk�ch p�smen s diakritikou pri
zapnutom Caps Lock jednoduch�m stl�čan�m ich kl�ves, ako je to v slovenskom
popise rozloženia kl�ves pre X Window System.
S mŕtvymi kl�vesami s�visia v kmap s�boroch riadky tvaru
compose 'c1' 'c2' to 'c3'
|
Predstavme si mŕtve znaky ako �plne obyčajn� znaky s t�m rozdielom, že ovl�dač
kl�vesnice ich neposiela aplik�ci�m, ale zostan� niekde „visieť“, k�m z
kl�vesnice nepr�de ďalš� znak. Ovl�dač kl�vesnice nepošle ani tento, ale pok�si sa spojiť ho
s predch�dzaj�cim mŕtvym znakom a až v�sledok spojenia pust� ďalej. No, a ako m� to spojenie
uskutočniť, to mu presne hovoria riadky compose v keymap
s�boroch.
V nasleduj�cej tabuľke je zoznam mŕtvych znakov použ�van�ch v slovenčine, spolu s
v�znamom a znakom, ktor�m sa označuj� v compose sekvenci�ch.
Je praktick� mať pri vytv�ran� compose sekvenci� zaveden� slovensk� font, aby ste
v�sledok mohli hneď kontrolovať. Veľkou pomocou je tiež možnosť pr�kazu
loadkeys č�tať zo štandardn�ho vstupu. Napr�klad:
sh$ loadkeys
include "/usr/lib/kbd/keymaps/i386/include/windowkeys.map.gz"
keycode 41 = grave asciitilde semicolon dead_diaeresis
compose '"' 'a' to '�'
# ukončenie zad�vania: EOF - Ctrl-D
sh$
|
Popis aktu�lneho rozloženia kl�ves m�žete uložiť do s�boru pr�kazom
Ak nem�te zaveden� slovensk� popis rozloženia kl�ves, mus�te zad�vať tieto znaky ako
Alt sekvencie, popr�pade vkladať ich hex k�dy v tvare
0xed pre �. V�pis znakov aktu�lneho fontu spolu s ich
hex k�dmi v�m urob� program
- kbd:
showfont
- console-tools:
showcfont
Ešte raz naša compose sekvencia a nejak� navyše:
compose '\'' 'A' to '�' # dlh� A cez dĺžeň
compose '^' 'O' to '�' # O s vok�ňom cez m�kčeň
compose '^' 'a' to '�' # širok� a cez m�kčeň,
compose '^' 'A' to 0x84 # ...preto nepotrebujeme dead_diaeresis
|
Mimochodom, v s�bore /usr/lib/kbd/keymaps/compose/compose.latin2
m�te zoznam compose sekvenci� pre normu ISO-8859-2.
Na nastavenie rozloženia kl�vesnice, ktor� chceme zaviesť pri štarte syst�mu, n�m sl�ži
s�bor /etc/sysconfig/keyboard. Pre Slov�ka ako repa by mal vyzerať
minim�lne takto:
KEYTABLE=sk-qwerty # zavedie rozloženie kl�ves sk-qwerty
KBCHARSET=iso-8859-2 # ...a spom�nan� s�bor compose.latin2
|
Nastavenie kl�vesnice pri štarte m� na starosti skript keytable,
ktor� je volan� priamo z rc.sysinit, takže netreba vytv�rať linky v
adres�roch pre runlevel 3/multiuser, pr�padne 5/X.
V dokument�cii k initscripts sa p�še: „Ak ulož�te popis
rozloženia kl�ves (použit�m dumpkeys) do s�boru
/etc/sysconfig/console/default.kmap, zavedie sa pri štarte syst�mu ešte
pred prip�jan�m/kontrolou s�borov�ch syst�mov. To m�že byť užitočn�, ak potrebujete zadať
heslo roota v pr�pade probl�mov. Mus� to byť ‚dumpnut�‘ popis rozloženia kl�ves
a nie skop�rovan� s�bor z /usr/lib/kbd/keytables/,
pretože tie často ešte vkladaj� (include) in� popisy z tejto adres�rovej
štrukt�ry.“
Po pripojen� s�borov�ch syst�mov, v pr�pade, že existuje spustiteľn� s�bor
/etc/rc.d/init.d/keytable a adres�r
/usr/lib/kbd/keymaps/, vykon� sa pr�kaz
sh# /etc/rc.d/init.d/keytable start
|
Tento už zavedie popis rozloženia kl�ves tak, ako to m�te určen� premenn�mi v s�bore
/etc/sysconfig/keyboard, preto nemus�te vytv�rať odkazy v jednotliv�ch
rc[1-5].d/ adres�roch.
To, čo sme si hovorili o zmene fontu pri prihl�sen� nejak�ho už�vateľa na virtu�lnej
konzole, sa d� aplikovať aj na rozloženie kl�ves. �plne najjednoduchšie riešenie (ktor� sa
pri prvom odhl�sen� pošle do kr�kov) je asi tak�to:
- ~/.bash_profile:
if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && ! [ -f ~/.keymap ]; then
dumpkeys > ~/.keymap
loadkeys gr.map
fi
|
- ~/.bash_logout:
if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && [ -f ~/.keymap ]; then
loadkeys ~/.keymap
rm -f ~/.keymap
fi
|