LDP/LDP/howto/docbook/Slovak-HOWTO/console.sgml

916 lines
38 KiB
Plaintext

<!--DOCTYPE section PUBLIC "-//OASIS//DTD DocBook V4.1//EN"-->
<!-- $Id$ -->
<section id="console">
<title>Nastavenia konzoly</title>
<para>Táto kapitola by mala èítavou, pouènou a zároveò zábavnou formou pojednáva» o veciach medzi
prstom a okom. Základnou otázkou nech nám je <quote>Zmysel ¾ivota, vesmíru a vôbec.</quote>
</para>
<section id="console-fonts">
<title>Slovenèina na výstupe textovej konzoly</title>
<section id="console-fonts-fonts">
<title>Fonty</title>
<para>Keï zobudíte o polnoci hocikoho, kto vo svojom ¾ivote videl poèítaè a opýtate sa ho, ako
rozbeha» slovenské znaky, urèite spomenie nieèo ako fonty. Na zobrazovanie znakov na
obrazovku -- èi u¾ v textovom alebo grafickom re¾ime -- slú¾ia skutoène fonty. Fonty pre
konzolu a programy urèené na manipuláciu s nimi sa nachádzajú v balíku
<application>kbd</application>. Po jeho nain¹talovaní sú súbory s fontami umiestnené v
adresári <filename class="directory">/usr/lib/kbd/consolefonts/</filename>.</para>
<para>Pre nás sú dôle¾ité najmä súbory, ktoré majú v mene <filename>iso02</filename>,
<filename>lat2</filename>, <filename>latin2</filename> alebo èíslo <filename>852</filename>.
To naznaèuje, ¾e ide o fonty s podporou <emphasis>ISO-8859-2</emphasis>
(<emphasis>latin2</emphasis>), prípadne <emphasis>DOS codepage 852</emphasis>, èo sú
¹tandardy aj pre slovenskú diakritiku.</para>
<para>Pozor, pôvodný balík sa volá <application>kbd</application>, ale existuje jeho roz¹írená
verzia, ktorá sa objavuje v distribúciách -- <application>console-tools</application>.
Rozdiely medzi nimi sú minimálne, pre <application>kbd</application> budeme pou¾íva» príkaz
<command>setfont</command>, pre <application>console-tools</application> zase
<command>consolechars</command>. Taktie¾, názvy dodávaných fontov sa trochu odli¹ujú, tak¾e
budem uvádza» ekvivalenty pre oba balíky.</para>
</section> <!-- console-fonts-fonts -->
<section id="console-fonts-theory">
<title>Ako fonty fungujú</title>
<para>Existuje niekoµko súborových formátov na ukladanie fontov, princíp je v¹ak rovnaký --
súbor obsahuje 256 obrázkov (<foreignphrase>glyphs</foreignphrase>), z ktorých v¹etky majú
rovnaký rozmer (napr. 8x16 bodov -- veµkos» fontu) a ka¾dý zobrazuje jeden znak.</para>
<para>Aby nám tých 256 obrázkov bolo na nieèo dobrých, je treba font zo súboru zavies» do
znakového generátora videokarty. Na to slú¾i jeden z príkazov
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>
<cmdsynopsis>
<command>setfont</command>
<arg choice="plain"><replaceable>meno-fontu</replaceable></arg>
</cmdsynopsis></para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>
<cmdsynopsis>
<command>consolechars</command>
<arg choice="plain">-f <replaceable>meno-fontu</replaceable></arg>
</cmdsynopsis></para>
</listitem>
</varlistentry>
</variablelist></para>
<para><computeroutput>meno-fontu</computeroutput> mô¾e by» absolútna alebo relatívna cesta k
súboru s fontom, alebo meno súboru, pokiaµ sa nachádza v adresári <filename
class="directory">/usr/lib/kbd/consolefonts/</filename>, èi u¾ s príponou, alebo
bez.</para>
<para>Pre µah¹ie pochopenie tých obrázkov, skúste nahradi»
<computeroutput>meno-fontu</computeroutput> re»azcom <computeroutput>t850</computeroutput> a
sledujte výsledok na v¹etkých virtuálnych konzolách.</para>
<para>Naspä» k ¹tandardnému fontu sa v¾dy dostanete jedným z príkazov
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>
<screen>
sh$ setfont
</screen></para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>
<screen>
sh$ consolechars -d
</screen></para>
</listitem>
</varlistentry>
</variablelist></para>
<para>Èo sa presne deje? Program <command>setfont</command>/<command>consolechars</command>
zavedie v¹etkých 256 obrázkov do znakového generátora
<acronym>EGA</acronym>/<acronym>VGA</acronym> karty. Od tohto momentu sa na v¹etkých
konzolách bude znak s <acronym>ASCII</acronym> kódom napr. 65 vykreslova» ako ¹esdesiaty
piaty obrázok z na¹eho súboru s fontom. E¹te raz pripomínam a dvakrát podèiarkujem, ¾e font
je v¾dy rovnaký pre v¹etky virtuálne konzoly, na ktorých zobrazuje znaky ten istý znakový
generátor <acronym>EGA</acronym>/<acronym>VGA</acronym> karty.</para>
<para>Dôle¾ité je uvedomi» si, ¾e interne ide naozaj len o obrázky a tvar niektorého znaku vo
fonte nemá niè spoloèného s jeho ASCII kódom. Ak by ste si sami vytvorili nejaký font (v
dokumentácii ku <application>kbd</application>/<application>console-tools</application> máte
informácie o v¹etkých formátoch), v ktorom by mal ten ¹esdesiaty piaty obrázok tvar písmena
<computeroutput>z</computeroutput>, po jeho natiahnutí sa vám bude pri zadaní
<keycombo><keycap>Alt</keycap><keycap>6</keycap><keycap>5</keycap></keycombo>, èo je
<acronym>ASCII</acronym> kód písmena <computeroutput>A</computeroutput>, zobrazova» znak
<computeroutput>z</computeroutput>. Ale ak tento znak ulo¾íte do súboru, v tomto sa bude
nachádza» bajt s hodnotou 65, teda písmeno <computeroutput>A</computeroutput>.</para>
</section> <!-- console-fonts-theory -->
<section id="console-fonts-latin2">
<title>Fonty ISO-8859-2</title>
<para>Toto vyu¾íva ¹tandard <emphasis>ISO-8859-2</emphasis> (a iné) - spoloèné znaky s
<acronym>ASCII</acronym> vykreslí rovnako a znaky ¹pecifické pre tú ktorú abecedu
<quote>namapuje</quote> na menej pou¾ívané znaky <acronym>ASCII</acronym> tabuµky. Kam
presne ktorá norma umiestòuje znaky s diakritikou, nás zaujíma» nemusí (pokiaµ nevytvárame
vlastné fonty), hlavné je, ¾e napr. anglický text je nezmenený (angliètina má v¹etky znaky
spoloèné so slovenèinou) a slovenský text u¾ viac neobsahuje hlúpe znaky, ktoré so
slovenèinou nemajú niè spoloèné.</para>
<para>Slovenské (ISO-8859-2) fonty, ktoré sú súèas»ou balíkov <application>kbd</application>
a <application>console-tools</application>:
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>lat2-{08,10,12,14,16}, lat2a-16, iso02.{08,14,16}</para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>lat2-{08,10,12,14,16}, lat2u-16, iso02.f{08,14,16}</para>
</listitem>
</varlistentry>
</variablelist></para>
<para>Na zavedenie fontu pou¾ite príkaz
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>
<screen>
sh$ setfont meno-zo-zoznamu
</screen></para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>
<screen>
sh$ consolechars -f meno-zo-zoznamu
</screen></para>
</listitem>
</varlistentry>
</variablelist></para>
<para>Odporúèam pou¾íva» <computeroutput>lat2a-16</computeroutput>, resp.
<computeroutput>lat2u-16</computeroutput>. Ostatné fonty majú bezchybné zobrazovanie
slovenských znakov, problém v¹ak nastáva pri aplikáciách, ktoré vyu¾ívajú znaky na kreslenie
rámèekov (napr. <command>mc</command>).</para>
<para>Èo sa týka fontov <computeroutput>iso02.*</computeroutput> z balíka
<application>kbd</application>, treba pri nich pou¾i» argument príkazu
<command>setfont</command> <computeroutput>-m latin2u.trans</computeroutput>. Tak¾e celý
príkaz na zavedenie niektorého z týchto fontov je:
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>
<screen>
sh$ setfont iso02.16 -m latin2u.trans
</screen></para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>
<screen>
sh$ consoletrans -f lat2u-16 -m iso02
</screen></para>
</listitem>
</varlistentry>
</variablelist></para>
<para>V súbore <filename>latin2u.trans</filename> (<filename>iso02.acm</filename>) sa nachádza
tzv. <foreignphrase>Aplication-Charset Map</foreignphrase> (<acronym>ACM</acronym>), akási
prevodná tabuµka, ktorá obsahuje riadok pre ka¾dý znak fontu a jeho podobu v kódovaní
<acronym>UTF-8</acronym>.</para>
</section> <!-- console-fonts-latin2 -->
<section id="console-fonts-autoload">
<title>Automatické zavádzanie fontov</title>
<para> Ak ste si na¹li svoj font, ktorý chcete pou¾íva» a ma» ho automaticky zavedený v¾dy pri
¹tarte, nie je niè µah¹ie. Inicializaèný skript <filename>rc.sysinit</filename> robí asi
toto: skontroluje, èi existuje súbor <filename>/etc/sysconfig/i18n</filename> a program
(skript) <filename>/sbin/setsysfont</filename>. Ak áno, spustí
<command>setsysfont</command>. Ten naèíta <filename>/etc/sysinfo/i18n</filename> a podµa
premenných definovaných v tomto súbore príkazom <command>consolechars</command> alebo
<command>setfont</command> zavedie font.</para>
<para>Tak¾e staèí nastavi» správne premenné v súbore <filename>/etc/sysconfig/i18n</filename>
a skript <filename>/sbin/setsysfont</filename> urobí v¹etko za nás. Tento skript mo¾no
spusti» kedykoµvek chcete zavies» font nastavený ako ¹tandardný pre systém.</para>
<para>Premenné v súbore <filename>/etc/sysinit/i18n</filename> sú (pou¾ívajte len mená súborov
bez cesty a bez prípony!):
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>
<programlisting>
SYSFONT=lat2a-16
</programlisting></para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>
<programlisting>
SYSFONT=lat2u-16
SYSFONTACM=iso02
</programlisting></para>
</listitem>
</varlistentry>
</variablelist></para>
<para>Skriptík <command>setsysfont</command> obsahujú oba balíky a kedykoµvek mô¾ete zavies»
font nastavený ako systémový v súbore <filename>/etc/sysinit/i18n</filename> jednoduchým
zadaním
<screen>
sh$ /sbin/setsysfont
</screen></para>
<para>Podµa toho, èo sme si hovorili o tom, ¾e pre v¹etky virtuálne konzoly mô¾e by» nastavený
len jeden spoloèný font, nemá veµký zmysel zavádza» nastavovanie fontu zvlá¹» pre ka¾dého
u¾ívateµa. S tým súvisí aj fakt, ¾e nastavenie fontu sa vz»ahuje k danému poèítaèu, pri
ktorom práve sedíte a nie k tomu, ku ktorému ste pripojení napr. cez
<application>ssh</application>.</para>
<para>Predsa len si viem predstavi» prípad, keï niektorý z viacerých pou¾ívateµov jedného
poèítaèa potrebuje odli¹ný font. V tom prípade mô¾e vlo¾i» príkaz na zavádzanie fontov do
svojich skriptov, ktoré vykonáva shell pri prihlásení a odhlásení. Pre bash by to mohlo
vyzera» takto:
<variablelist>
<varlistentry>
<term><filename>~/.bash_profile</filename>:</term>
<listitem>
<para>
<programlisting>
if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && ! [ -f ~/.font ]; then
setfont -o ~/.font gr928a-8x16
fi
</programlisting></para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>~/.bash_logout</filename>:</term>
<listitem>
<para>
<programlisting>
if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && [ -f ~/.font ]; then
setfont ~/.font
rm -f ~/.font
fi
</programlisting></para>
</listitem>
</varlistentry>
</variablelist></para>
<para>Vonkoncom to nie je ideálne rie¹enie, ale svoj úèel splní (minimálne po moment prvého
odhlásenia). Trochu sa s tým pozabávajte, aby sa font (a rozlo¾enie kláves) menilo len pri
prvom prihlásení a poslednom odhlásení, tie¾ setfont pod iXami nemá veµmi zmysel a tak... V
Tips-HOWTO je uvedený spôsob, ako zisti», na koµkých virtuálnych konzolách je e¹te u¾ívateµ
prihlásený.</para>
<para>Ináè, aby bolo jasné, toto vám bude fungova» len na lokálnom stroji - zamyslite sa,
preèo asi <command>setfont</command> (aj <command>loadkeys</command>) nefunguje cez
vzdialený terminál a èi by ste z toho nieèo mali, keby to tak nebolo.</para>
<para>Ak to s takýmto rie¹ením myslíte vá¾ne, tak skôr uva¾ujte nad modifikáciou skriptu
<filename>/etc/profile.d/lang.sh</filename>, kde by sa kontroloval aj obsah u¾ívateµského
súboru <filename>~/.i18n</filename> a podµa toho by sa zaviedol skript, popis rozlo¾enia
kláves, prípadne nejaké premenné...</para>
</section> <!-- console-fonts-autoload -->
</section> <!-- console-fonts -->
<section id="console-kbd">
<title>Slovenská klávesnica na textovej konzole</title>
<para>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&nbsp;/&nbsp;uvedomelá linuxáèka, hneï
chcete do <citetitle>Slovak-HOWTO</citetitle> prispie» a pomocou klávesnice písa» slovenský
text. Na to potrebujete s tou klávesnicou nieèo urobi».</para>
<section id="console-kbd-kmap">
<title>Popis rozlo¾enia kláves (keymap)</title>
<para>Adresáre <filename class="directory">/usr/lib/kbd/keymaps/i386/qwertz/</filename> a
<filename class="directory">qwerty/</filename> obsahujú
po nain¹talovaní balíka
<application>kbd</application>/<application>console-tools</application> aj popisy
slovenského rozlo¾enia kláves. Pre nás sú zaujímavé súbory
<simplelist>
<member><filename>sk-prog-qwerty.map.gz</filename></member>
<member><filename>sk-qwerty.map.gz</filename></member>
<member><filename>sk-prog-qwertz.map.gz</filename></member>
<member><filename>sk-qwertz.map.gz</filename></member>
</simplelist></para>
<para>Tieto súbory obsahujú definície rozlo¾enia kláves pre slovenský jazyk, prièom rozdiely
medzi nimi sú v umiestnení kláves <keycap>Y</keycap> a <keycap>Z</keycap> 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á <computeroutput>sk-qwertz</computeroutput>, najmen¹ie zmeny
oproti americkej klávesnici sú zase v <computeroutput>sk-prog-qwerty</computeroutput>.
</para>
<para>Súbory v adresári <filename class="directory">/usr/lib/kbd/keymaps/i386/include/
</filename> obsahujú popis základných rozlo¾ení kláves (<computeroutput>azerty
</computeroutput>, <computeroutput>qwerty</computeroutput>, <computeroutput>qwertz
</computeroutput>), prídavných kláves (<computeroutput>keypad</computeroutput>,
<computeroutput>windowkeys</computeroutput>), prípadne problémových kláves (<computeroutput>
delete</computeroutput>, <computeroutput>backspace</computeroutput>, <computeroutput>ctrl
</computeroutput>). Súbory <filename>linux-*.inc.gz</filename> sú ¹pecifické pre linux
(teda nie pre jazyk). Sú to napr. kµúèe (<keycap>F1</keycap>-<keycap>F12</keycap>,
kombinovaním s <keycap>Ctrl</keycap> a <keycap>Shift</keycap> a¾ po <keycap>F48</keycap>),
<keycombo><keycap>Shift</keycap> <keycap>PgUp</keycap></keycombo> a <keycombo><keycap>Shift
</keycap> <keycap>PgDown</keycap></keycombo>, atï.</para>
<para>Keymapy <filename>*.inc.gz</filename> nepopisujú kompletné rozlo¾enie klávesnice, ale
len niektorých jej èastí. Vyu¾ívajú sa pri pripájaní
(<foreignphrase>include</foreignphrase>) zo súborov <filename>*.map.gz</filename>, è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 <computeroutput>sk-qwerty</computeroutput> mô¾me dosta» rozlo¾enie
qwertz, prípadne (to asi vyu¾ijete) jednoducho odstavi» znaky <keycap>euro</keycap> a
<keycap>cent</keycap>, ktoré (zatiaµ?) nepotrebujeme a zbytoène nám zaberajú znaky
<keycap>E</keycap> a <keycap>C</keycap>.</para>
<para>Na zavedenie súboru s popisom rozlo¾enia kláves slú¾i nasledovný príkaz:
<cmdsynopsis>
<command>loadkeys</command>
<arg choice="plain"><replaceable>nazov</replaceable></arg>
</cmdsynopsis>
kde <computeroutput>nazov</computeroutput> mô¾e by» absolútna alebo relatívna cesta ku
keymap súboru, alebo meno súboru, pokiaµ sa nachádza v adresári <filename class="directory">
/usr/lib/kbd/keymaps/</filename>, èi u¾ s príponou, alebo bez.</para>
<para>©tandardné slovenské popisy rozlo¾enia kláves nájdeme vo vy¹¹ie spomínaných
<filename>*.map.gz</filename> súboroch. Ak sa chcete vráti» k ¹tandardnému rozlo¾eniu,
príkaz
<screen>
sh$ loadkeys -d
</screen>
zavedie pôvodné, ktoré je ulo¾ené v súbore <filename>defkeymap.map.gz</filename> niekde
medzi ostatnými keymap súbormi. Predtým ale nikdy nezabudnite zmeni» re¾im slovenskej
klávesnice na <acronym>US</acronym> znaky, tzn. <keycap>1</keycap> dáva
<computeroutput>1</computeroutput> a nie <computeroutput>+</computeroutput> 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 <keycap>AltGr</keycap> - pravý
<keycap>Alt</keycap>) a klávesou <keycap>Pause/Break</keycap> v¹etko napravíte. Potom mô¾ete
znova zavies» defkeymap.</para>
<para>Pokiaµ sa vám nepáèi ani jeden zo ¹tandardných keymap súborov pre slovenèinu, èo je
pravdepodobné vïaka riadku
<programlisting>
include "euro"
</programlisting>
v include súboroch <filename>qwerty-layout.inc.gz</filename> aj
<filename>qwertz-layout.inc.gz</filename>, 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».</para>
<para>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.</para>
</section> <!-- console-kbd-kmap -->
<section id="console-kbd-include">
<title>Include a nesprávna funkcia kláves <keycap>E</keycap> a <keycap>C</keycap></title>
<para>Problém s <keycap>E</keycap> a <keycap>C</keycap> je spôsobený zavedením jednotnej meny
v európskej únii. Na vine nie je ani tak <acronym>EU</acronym>, ale niekto, kto symboly pre
<keycap>euro</keycap> a <keycap>cent</keycap> umiestnil na <keycombo><keycap>AltGr</keycap>
<keycap>E</keycap></keycombo> a <keycombo><keycap>AltGr</keycap><keycap>C</keycap>
</keycombo>, èo sú na¹e obyèajné <keycap>E</keycap> a <keycap>C</keycap>. 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 <keycap>Pause</keycap>,
alebo mô¾me zadáva» národné klávesy pri súèasnom dr¾aní klávesy <keycap>AltGr</keycap>
(pravý <keycap>Alt</keycap>). Súbor <filename>euro.inc</filename>, ktorý definuje tieto dva
problémové symboly, je pripojený zo súboru <filename>qwerty-layout.inc</filename>, ktorý
zase pripájajú samotné slovenské keymapy (<filename>sk-qwerty</filename>,
<filename>sk-prog-qwertz</filename>, &hellip;).</para>
<para>Rie¹enie je veµmi jednoduché - zeditujete <filename>qwerty-layout.inc</filename> (alebo
<filename>qwertz-layout.inc</filename>) a odkomentujete znakom
<computeroutput>&num;</computeroutput> riadok
<programlisting>
include "euro"
</programlisting></para>
</section> <!-- console-kbd-include -->
<section id="console-kbd-keycode">
<title>Keycode a definovanie kláves</title>
<para>Predchádzajúci problém s eurom mo¾no vyrie¹i» aj definovaním znakov <keycap>E</keycap> a
<keycap>C</keycap> v samotnom súbore <filename>sk-qwerty.kmap.gz</filename> (alebo inom,
ktorý pou¾ívate) pomocou slova <computeroutput>keycode</computeroutput>:
<programlisting>
keycode 18 = e
keycode 46 = c
</programlisting></para>
<para>V keymap súboroch je pre ka¾dú klávesu (alebo aspoò pre ka¾dú, ktorú chceme
predefinova») jeden riadok pribli¾ne tohto razenia:
<programlisting>
keycode 3 = two at lcaron two nul nul nul nul Meta_two Meta_two...
</programlisting></para>
<para>Èíslo za <computeroutput>keycode</computeroutput> oznaèuje urèitú klávesu a re»azce za
<computeroutput>=</computeroutput> 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
<keycap>Shift</keycap>, <keycap>AltGr</keycap>, <keycap>Control</keycap>,
<keycap>Alt</keycap>, <keycap>ShiftL</keycap>, <keycap>ShiftR</keycap>,
<keycap>Ctrl</keycap> a <keycap>CtrlR</keycap>. To nám dáva 256 mo¾ných znakov na ka¾dú
klávesu.</para>
<para>Väè¹inou sa pozmeòuje len prvých 16 kombinácií modifikátorov. To je význam riadku
<programlisting>
keymaps 0-15
</programlisting>
na zaèiatku kmap súborov.</para>
<para>V nasledujúcom zozname je týchto 16 kombinácií (po riadkoch):
<simplelist columns="4" type="horiz">
<member>¾iadny</member>
<member><keycap>Shift</keycap></member>
<member><keycap>AltGr</keycap></member>
<member><keycombo><keycap>Shift</keycap><keycap>AltGr</keycap></keycombo></member>
<member><keycap>Control</keycap></member>
<member><keycombo><keycap>Shift</keycap><keycap>Control</keycap></keycombo></member>
<member><keycombo><keycap>AltGr</keycap><keycap>Control</keycap></keycombo></member>
<member><keycombo><keycap>Shift</keycap><keycap>AltGr</keycap><keycap>Control</keycap>
</keycombo></member>
<member><keycap>Alt</keycap></member>
<member><keycombo><keycap>Shift</keycap><keycap>Alt</keycap></keycombo></member>
<member><keycombo><keycap>AltGr</keycap><keycap>Alt</keycap></keycombo></member>
<member><keycombo><keycap>Shift</keycap><keycap>AltGr</keycap><keycap>Alt</keycap>
</keycombo></member>
<member><keycombo><keycap>Control</keycap><keycap>Alt</keycap></keycombo></member>
<member><keycombo><keycap>Shift</keycap><keycap>Control</keycap><keycap>Alt</keycap>
</keycombo></member>
<member><keycombo><keycap>AltGr</keycap><keycap>Control</keycap><keycap>Alt</keycap>
</keycombo></member>
<member><keycombo><keycap>Shift</keycap><keycap>AltGr</keycap><keycap>Control</keycap>
<keycap>Alt</keycap></keycombo></member>
</simplelist></para>
<para>Z hµadiska slovenskej klávesnice sú dôle¾ité len prvé ¹tyri - prvé dva sú zvyèajne
nezmenené americké znaky, napr. <computeroutput>two at</computeroutput>, èo je
<keycap>2</keycap> <keycap>@</keycap>, 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 <keycap>AltGr</keycap> (pravý <keycap>Alt</keycap>), napr. <computeroutput>lcaron
two</computeroutput>, èo je na¹e <keycap>µ</keycap> <keycap>2</keycap>.</para>
<para>Aby ste mohli vklada» slovenské znaky, nemusíte celý èas pridr¾iava»
<keycap>AltGr</keycap> nosom, ale mô¾ete pou¾i» <keycap>Pause/Break</keycap>, ktorý v
kontexte s národnými klávesnicami funguje ako <keycap>AltGr Lock</keycap>. Chápte to tak, ¾e
keï sa prepnete do slovenského re¾imu stlaèením <keycap>Pause/Break</keycap>, prvé a druhé
dva re»azce v ka¾dom riadku keycode sa vymenia, napr.
<programlisting>
two at lcaron two -> lcaron two two at
</programlisting></para>
<para>Vtedy mô¾ete pou¾i» <keycap>AltGr</keycap> na zadávanie znakov americkej klávesnice,
alebo sa opätovným stlaèením <keycap>Pause/Break</keycap> prepnú» spät do
<acronym>US</acronym> re¾imu.</para>
<para>Riadok pre klávesu s kódom 41 (znaky <keycap>`</keycap> a <keycap>~</keycap>), má v
súbore <filename>sk-qwerty.map.gz</filename> nasledovný tvar:
<programlisting>
keycode 41 = grave asciitilde dead_diaeresis dead_circumflex ...
</programlisting></para>
<para>Mne osobne sa nepáèi, ¾e sú tu umiestnené màtve klávesy <keycap>dead_diaeresis</keycap>
(dve bodky nad znakom) a <keycap>dead_circumflex</keycap> (mäkèeò), preto¾e ich nepotrebujem
--- <keycap>ä</keycap> aj <keycap>ô</keycap> 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 <keycap>;</keycap>
(semicolon) a <keycap>°</keycap> (degree) tak, ako je to na popiske mojej klávesnice. Zmením
teda riadok takto:
<programlisting>
keycode 41 = grave asciitilde semicolon degree ...
</programlisting></para>
<para>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.</para>
<para>Názvy znakov, ktoré sa pou¾ívajú pri definovaní jednotlivých kláves si mô¾ete pre znaky
<acronym>ASCII</acronym> zisti» v súbore <filename>us.map.gz</filename>. Èíselné kódy
v¹etkých kláves vám vypµuje program
<cmdsynopsis>
<command>showkey</command>
</cmdsynopsis></para>
<para>Pravidlá pre názvy znakov ¹pecifických pre slovenèinu v kmap súboroch:
<orderedlist>
<listitem>
<para>Prvé písmeno v názve urèuje <acronym>ASCII</acronym> znak, pre ktorý chceme pou¾i»
diakritiku.</para>
</listitem>
<listitem>
<para>K nemu pridáme identifikátor diakritického znamienka:
<simplelist>
<member>caron --- mäkèeò</member>
<member>acute --- då¾eò</member>
<member>diaeresis --- dve bodky nad</member>
<member>circumflex --- vokáò</member>
</simplelist></para>
<para>Napríklad:
<simplelist>
<member>scaron = <keycap>¹</keycap></member>
<member>uacute = <keycap>ú</keycap></member>
<member>Ocircumflex = <keycap>Ô</keycap></member>
</simplelist></para>
</listitem>
</orderedlist></para>
<para>Názvy ïal¹ích znakov ¹pecifických pre slovenèinu:
<simplelist>
<member>0xa7 --- <keycap>§</keycap> (paragraf)</member>
<member>degree --- <keycap>°</keycap> stupeò</member>
</simplelist></para>
<para>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ý <acronym>ASCII</acronym> kód.
Implicitná hodnota je <constant>iso-8859-1</constant>, teda pre slovenské keymapy je nutné
vlo¾i» riadok:
<programlisting>
charset "iso-8859-2"
</programlisting></para>
<para>E¹te jeden príklad: ak chcete pou¾íva» slovenské rozlo¾enie
<computeroutput>qwertz</computeroutput> a americké rozlo¾enie
<computeroutput>qwerty</computeroutput>, potrebujete vymeni» znaky <keycap>Y</keycap> a
<keycap>Z</keycap>:
<programlisting>
keycode 21 = y Y z Z
keycode 44 = z Z y Y
</programlisting></para>
<para>Na prvý pohµad to mô¾e fungova» dobre, ale problém sa prejaví pri zapnutom <keycap>Caps
Lock</keycap> - znaky <keycap>Y</keycap> a <keycap>Z</keycap> 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
<computeroutput>+</computeroutput> pred ka¾dé písmeno v keycode riadku danej klávesy.
Písmeno <computeroutput>+</computeroutput> urèuje nasledovnému písmenu atribút
<foreignphrase>letter</foreignphrase>, teda sa bude pri stlaèenom <keycap>Caps Lock</keycap>
písa» veµké písmeno. V¹etky písmená <keycap>a</keycap>-<keycap>z</keycap>,
<keycap>A</keycap>-<keycap>Z</keycap> majú tento atribút priradený automaticky, ale to len v
prípade, ¾e majú keycode riadok tvaru:
<programlisting>
keycode 21 = y
</programlisting></para>
<para>V na¹om prípade teda musíme priradi» tento atribút v¹etkým znakom explicitne. Tak¾e,
koneèná úprava keymapy bude:
<programlisting>
keycode 21 = +y +Y +z +Z
keycode 44 = +z +Z +y +Y
</programlisting></para>
<para>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 <keycap>Caps Lock</keycap> jednoduchým stláèaním ich kláves, ako je to v slovenskom
popise rozlo¾enia kláves pre <application>X Window System</application>.</para>
</section> <!-- console-kbd-keycode -->
<section id="console-kbd-dead">
<title>Màtve klávesy a sekvencie compose</title>
<para>S màtvymi klávesami súvisia v kmap súboroch riadky tvaru
<programlisting>
compose 'c1' 'c2' to 'c3'
</programlisting></para>
<para>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 <quote>visie»</quote>, 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 <computeroutput>compose</computeroutput> v keymap
súboroch.</para>
<para>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.
<table id="console-kbd-dead.tables.dead">
<title id="console-kbd-dead.tables.dead.title">Màtve klávesy</title>
<tgroup cols="3">
<thead>
<row>
<entry>Názov</entry>
<entry>Význam</entry>
<entry>Compose</entry>
</row>
</thead>
<tbody>
<row>
<entry>dead_acute</entry>
<entry>då¾eò</entry>
<entry>\'</entry>
</row>
<row>
<entry>dead_circumflex</entry>
<entry>mäkèeò</entry>
<entry>^</entry>
</row>
<row>
<entry>dead_diaeresis</entry>
<entry>dve bodky nad</entry>
<entry>"</entry>
</row>
</tbody>
</tgroup>
</table></para>
<procedure>
<title>Postup pri písani compose sekvencií</title>
<step>
<para>Ka¾dá compose sekvencia sa zaèína kµúèovým slovom
<computeroutput>compose</computeroutput>.</para>
</step>
<step>
<para>Nasleduje compose znak màtvej klávesy (podµa tabuµky <xref
linkend="console-kbd-dead.tables.dead" endterm="console-kbd-dead.tables.dead.title">),
napríklad <computeroutput>\'</computeroutput>.
</para>
<para>Druhý je znak, s ktorým chceme màtvu klávesu kombinova», napríklad
<computeroutput>A</computeroutput>.</para>
<para>Za kµúèovým slovom <computeroutput>to</computeroutput> nasleduje výsledok spojenia
màtvej klávesy a znaku bez diakritiky, teda <computeroutput>Á</computeroutput>.</para>
</step>
</procedure>
<para>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
<command>loadkeys</command> èíta» zo ¹tandardného vstupu. Napríklad:
<screen>
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$
</screen></para>
<para>Popis aktuálneho rozlo¾enia kláves mô¾ete ulo¾i» do súboru príkazom
<screen>
sh$ dumpkeys > subor
</screen></para>
<para>Ak nemáte zavedený slovenský popis rozlo¾enia kláves, musíte zadáva» tieto znaky ako
<keycap>Alt</keycap> sekvencie, poprípade vklada» ich hex kódy v tvare
<keycode>0xed</keycode> pre <keycap>í</keycap>. Výpis znakov aktuálneho fontu spolu s ich
hex kódmi vám urobí program
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>
<cmdsynopsis>
<command>showfont</command>
</cmdsynopsis></para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>
<cmdsynopsis>
<command>showcfont</command>
</cmdsynopsis></para>
</listitem>
</varlistentry>
</variablelist></para>
<para>E¹te raz na¹a compose sekvencia a nejaké navy¹e:
<programlisting>
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
</programlisting></para>
<para>Mimochodom, v súbore <filename>/usr/lib/kbd/keymaps/compose/compose.latin2</filename>
máte zoznam compose sekvencií pre normu <acronym>ISO-8859-2</acronym>.</para>
</section> <!-- console-kbd-dead -->
<section id="console-kbd-autoload">
<title>Automatické zavádzanie keymap súboru</title>
<para>Na nastavenie rozlo¾enia klávesnice, ktoré chceme zavies» pri ¹tarte systému, nám slú¾i
súbor <filename>/etc/sysconfig/keyboard</filename>. Pre Slováka ako repa by mal vyzera»
minimálne takto:
<programlisting>
KEYTABLE=sk-qwerty # zavedie rozlo¾enie kláves sk-qwerty
KBCHARSET=iso-8859-2 # ...a spomínaný súbor compose.latin2
</programlisting></para>
<para>Nastavenie klávesnice pri ¹tarte má na starosti skript <command>keytable</command>,
ktorý je volaný priamo z <filename>rc.sysinit</filename>, tak¾e netreba vytvára» linky v
adresároch pre runlevel <constant>3/multiuser</constant>, prípadne <constant>5/X</constant>.
</para>
<para>V dokumentácii k <application>initscripts</application> sa pí¹e: <quote>Ak ulo¾íte popis
rozlo¾enia kláves (pou¾itím <command>dumpkeys</command>) do súboru
<filename>/etc/sysconfig/console/default.kmap</filename>, 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» <quote>dumpnutý</quote> popis rozlo¾enia kláves
a nie skopírovaný súbor z <filename class="directory">/usr/lib/kbd/keytables/</filename>,
preto¾e tie èasto e¹te vkladajú (include) iné popisy z tejto adresárovej
¹truktúry.</quote></para>
<para>Po pripojení súborových systémov, v prípade, ¾e existuje spustiteµný súbor
<filename>/etc/rc.d/init.d/keytable</filename> a adresár
<filename class="directory">/usr/lib/kbd/keymaps/</filename>, vykoná sa príkaz
<screen>
sh# /etc/rc.d/init.d/keytable start
</screen></para>
<para>Tento u¾ zavedie popis rozlo¾enia kláves tak, ako to máte urèené premennými v súbore
<filename>/etc/sysconfig/keyboard</filename>, preto nemusíte vytvára» odkazy v jednotlivých
<filename class="directory">rc[1-5].d/</filename> adresároch.</para>
<para>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:
<variablelist>
<varlistentry>
<term><filename>~/.bash_profile</filename>:</term>
<listitem>
<para>
<programlisting>
if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && ! [ -f ~/.keymap ]; then
dumpkeys > ~/.keymap
loadkeys gr.map
fi
</programlisting></para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>~/.bash_logout</filename>:</term>
<listitem>
<para>
<programlisting>
if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && [ -f ~/.keymap ]; then
loadkeys ~/.keymap
rm -f ~/.keymap
fi
</programlisting></para>
</listitem>
</varlistentry>
</variablelist></para>
</section> <!-- console-kbd-autoload -->
</section> <!-- console-kbd -->
<section id="console-summary">
<title>Zhrnutie nastavení konzoly</title>
<para>Pokiaµ som sa niekde nesekol, tak minimálne v distribúciách
<systemitem class="osname">RedHat</systemitem> a
<systemitem class="osname">Mandrake</systemitem> by po týchto zmenách mala do pohody za¹lapa»
slovenská podpora (fonty + klávesnica).
<variablelist>
<varlistentry>
<term><filename>/etc/sysconfig/i18n</filename>:</term>
<listitem>
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>
<programlisting>
SYSFONT=lat2a-16
</programlisting></para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>
<programlisting>
SYSFONT=lat2u-16
SYSFONTACM=iso02
</programlisting></para>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>/etc/sysconfig/keyboard</filename>:</term>
<listitem>
<para>
<programlisting>
KEYTABLE=sk-qwertz
KBCHARSET=iso-8859-2
</programlisting></para>
</listitem>
</varlistentry>
</variablelist></para>
<para>Tie¾, ak zadávate rootovské heslo s pou¾itím iného rozlo¾enia kláves ako je ¹tandardné
(<computeroutput>us</computeroutput>), vlo¾te si jeho popis do súboru
<filename>/etc/sysconfig/console/default.kmap</filename>. Pozor, nesmiete len tak skopírova»
súbor, alebo vytvori» link! Ak chcete pou¾i» napríklad rozlo¾enie
<computeroutput>sk-qwertz</computeroutput>, urobte to takto:
<screen>
sh$ loadkeys sk-qwertz
sh# dumpkeys >/etc/sysconfig/console/default.kmap
</screen></para>
<para>Ak chcete nastavi» slovenský font a klávesnicu len jednorazovo, tieto príkazy by to mali
dokáza»:
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>
<screen>
sh$ setfont lat2a-16
sh$ loadkeys sk-qwertz
</screen></para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>
<screen>
sh$ consolechars -f lat2u-16 -m iso02
sh$ loadkeys sk-qwertz
</screen></para>
</listitem>
</varlistentry>
</variablelist></para>
<para>...a naspä» na ¹tandardné nastavenia:
<variablelist>
<varlistentry>
<term><application>kbd</application>:</term>
<listitem>
<para>
<screen>
sh$ setfont
sh$ loadkeys -d
</screen></para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>console-tools</application>:</term>
<listitem>
<para>
<screen>
sh$ consolechars -d
sh$ loadkeys -d
</screen></para>
</listitem>
</varlistentry>
</variablelist></para>
</section> <!-- console-summary -->
</section> <!-- console -->