<!--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 -->

