Slovak-HOWTO

verzia 4 (Blanka)

16. február 2002


Obsah
1. Úvodné informácie
1.1. Licencia
1.2. Aktuálna verzia a prispievanie
1.3. Osoby a obsadenie
2. Miestne nastavenia
2.1. Princípy miestnych nastavení
2.2. Miestne nastavenia pre Slovensko
2.3. Príklady miestnych nastavení
3. Nastavenia konzoly
3.1. Slovenčina na výstupe textovej konzoly
3.2. Slovenská klávesnica na textovej konzole
3.3. Zhrnutie nastavení konzoly
4. Nastavenia X Window Systemu
4.1. Slovenské fonty v X Window Systeme
4.2. Slovenská klávesnica v X Window Systeme
4.3. Slovenská myš v X Window Systeme
4.4. Príklady
5. Slovenčina a linuxový kernel
5.1. Kompilácia kernelu so slovenskou klávesnicou
5.2. Diakritika v názvoch súborov na FAT partíciách
6. Poslovenčovanie konkrétnych aplikácií
6.1. Bash
6.2. Joe
6.3. Lynx
6.4. Mandrake 8
6.5. Midnight Commander
6.6. Mutt
6.7. Readline
6.8. RPM4
6.9. Rxvt
6.10. Samba
7. Fintičky so slovenčinou
7.1. Zadávanie slovenských znakov vo Vim
7.2. Odstránenie alebo nahradenie diakritiky v textových súboroch

1. Úvodné informácie


1.2. Aktuálna verzia a prispievanie

Ak nájdete v tomto súbore niečo, čo je nezlúčiteľné s vašim linuxovým presvedčením, napíšte najskôr do diskusie linux, potom sk-i18n, dajte príspevok na www.linux.sk a poohovárajte ma na #sklug. V prípade, že vás to neprejde, skontrolujte, či máte aktuálnu verziu a, samozrejme, až nakoniec, dajte mi vedieť. Adresy sú:

Na túto adresu sa tiež obracajte, ak máte niečo, čo by nemalo chýbať v Slovak-HOWTO.

Nadácia Pomôž a skonaj prispela na dopísanie časti o klávesnici v iXoch sama sebe čiastkou 500 000,- Sk, v televízii Pomôž a skonaj i v rovnomennom časopise boli zverejnené inzeráty, politická strana PAS nekompromisne trvá na kompromise a všetci pijú minerálku Pomôž a skonaj. Tigre, nosorožce a lúčne koníky boli pokrstené, a predsa sa s kapitolou o klávesnici v iXoch nič nedeje. Mimochodom, sme najčítanejšie Slovak-HOWTO na svete!

Pri prispievaní sa skúste riadiť nasledovnými pravidlami:

  • Pre tých, ktorí majú vážny záujem podieľať sa na písaní Slovak-HOWTO, je možný CVS prístup priamo k zdrojovým kódom dokumentu na serveri cvs.linuxdoc.org v adresári /cvsroot/LDP/howto/docbook/Slovak-HOWTO/. Bližšie informácie o získaní CVS konta a webovskom rozhraní k CVS serveru nájdete v LDP Autor Guide.

  • Opravy robte vždy vo formáte SGML (DTD DocBook, verzia 4.0), ktorý je primárnym formátom pri tvorbe tohto dokumentu. Je tiež možné posielať čistý text. Príspevky píšte, pokiaľ možno, s diakritikou v norme ISO-8859-2.

  • Ak je to niečo väčšie, dajte mi najskôr vedieť, čo chystáte, pretože je možné, že už na tom niekto maká a teda buď na to zabudnete, alebo to skúsite dorobiť s danou osobou. (Vzhľadom na to, že zatiaľ sa do tohto dokumentu dostalo asi 20 riadkov cudzieho textu, zdá sa mi predchádzajúca veta maximálne smiešna. Ha-ha, zasmial som sa...)

  • Vaše meno a adresa budú automaticky zverejnené spolu s vašim príspevkom. Ak si to neželáte, musíte o to výslovne požiadať. Takisto, autor príspevku už jeho zaslaním implicitne súhlasí s aplikáciou licencie tohto dokumentu na časť, ktorej je autorom.

  • V Czech-HOWTO sa hovorí: „Když už někdo podobný dokument čte, dělá to z nutnosti a ne pro své pobavení.“ Musíme však zobrať do úvahy, že v Čechách je vyššia životná úroveň a oni až toľko srandy nepotrebujú...


2. Miestne nastavenia

2.1. Princípy miestnych nastavení

Podpora miestnych nastavení je dnes mimoriadne dôležitým faktorom, ktorý charakterizuje jednotlivé operačné systémy. Časy, keď boli ľudia štastní, že to niečo píše, sú nenávratne preč a používatelia vyžadujú podporu svojich miestnych nastavení. V GNU systémoch je táto podpora implementovaná priamo do štandardnej knižnice jazyka C -- GNU libc. Táto podpora je navrhnutá tak, aby zohľadňovala všetky požiadavky kladené na nastavenia pre akúkoľvek krajinu a akýkoľvek jazyk.


2.1.2. Kategórie a ich funkcie

Táto časť popisuje jednotlivé premenné, ktoré ovplyvňujú miestne nastavenia a ktorými sa riadia aj funkcie knižnice GNU libc.

Nastavenie premennej prostredia sa robí pomocou príkazu shellu
bash$ export LC_PREMENNA=sk

tcsh$ setenv LC_PREMENNA sk
	

LC_PREMENNA je jedna z nasledujúcich:

S prekladom hlásení programov, hlavne s umiestnením súborov s preloženými reťazcami, súvisí premenná NLSPATH. Mala by obsahovať dvojbodkami oddelený zoznam adresárov, v ktorých sa budú hľadať .mo súbory pre miestne nastavenia dané premennou LC_MESSAGES. Premennú NLSPATH je však potrebné nastavovať len vo výnimočných prípadoch, pretože aplikácie hľadajú preklady svojich hlásení v štandardných adresároch pre tieto súbory.

Okrem týchto premenných bolo implementovaných niekoľko ďalších, ktoré zatiaľ nie sú zdokumentované (The GNU C Library Reference Manual). Ich význam je zrejmý z názvu, takže uvediem aj svoju dedukciu.

  • LC_PAPER --- Formát papiera. V našich zemepisných šírkach sa napríklad používa formát A4, v Amerike je to Letter, atď. Pozor, táto premenná neobsahuje priamo názov formátu, ale (tak, ako všetky LC_ premenné), skratku miestneho nastavenia, teda u nás to bude sk. Ak by sme chceli používať formát Letter, museli by sme túto premennú nastaviť na kód miestneho nastavenia niektorej z krajín, ktorá používa takýto formát, napríklad us. V tomto prípade je nutné nainštalovať balík s miestnymi nastaveniami pre túto krajinu (locales-us).

  • LC_NAME --- Formát mena a priezviska. U nás má každý dve mená, píšu sa v poradí meno, priezvisko. V Rusku majú zase tri mená v poradí meno, otcovo-meno, priezvisko. V Maďarsku majú dve mená tak ako u nás, ale píšu sa v opačnom poradí. O tom je táto premenná. Asi...

  • LC_ADDRESS --- Spôsob zápisu adresy. Poradie ulice a popisného čísla domu, ZIP kód, PSČ apod.

  • LC_TELEPHONE --- Formát telefónnych a faxových čísel. Určuje zoskupovanie číslic, ich oddelovanie, počet čísel predvoľby, ...

  • LC_MEASUREMENT --- Miery. Jednotky hmotnosti, objemu, teploty a dĺžky, používané v tej ktorej krajine. Program napísaný v USA bude pravdepodobne počítať s galónmi vody, ale ak je správne napísaný, s premennou LC_MEASUREMENT nastavenou na „sk“ bude zobrazovať litre v správnom pomere. To isté platí napríklad pre prevod teploty vo Fahrenheitovej stupnici na stupne Celsia.

  • LC_IDENTIFICATION --- Az apád, tak toto neviem. Rodné číslo? Číslo sociálneho poistenia? Číslo topánok?


2.1.3. Ďalšie premenné


2.1.5. Kódy miestnych nastavení

Premenné, ktoré ovplyvňujú miestne nastavenia, sa napĺňajú kódmi miestnych nastavení. Kódy miestnych nastavení sú reťazce, ktorých formát sa riadi niekoľkými pravidlami. Všeobecný tvar je:
jazyk[_územie[.kódovanie]][@modifikátor]
	

jazyk je napr. sk pre slovenčinu, cs pre češtinu, hu pre maďarčinu, územie je SK pre Slovensko, CZ pre Českú republiku, HU pre Maďarsko, kódovanie je ISO-8859-2 pre všetky stredoeurópske jazyky (je možne použiť niekoľko formátov na zadanie kódovania) a modifikátor služi na povolenie alebo zakázanie niektorých funkcií. Tie sú dané v definíciach miestnych nastavení. Napríklad, pre Veľkú Britániu je modifikátorom reťazec euro a pri jeho použití sa ako peňažná mena bude používať euro namiesto libry. To znamená, že sa musí použiť kódovanie iso-8859-15, ktoré definuje znaky euro a cent.

Príklady kódov miestnych nastavení (každý z týchto reťazcov je možné priradiť premenným miestnych nastavení, ale najčastejšie sa používajú len dvojpísmenkové skratky v poslednom stĺpci):

Nemali by sme zabudnúť na dve štandardné locales, ktoré sa použijú, ak nie sú systémové premenné nastavené a programy ich používajú do doby, kým sa inicializuje lokalizácia. Tvrdím, že sa použijú obe, pretože momentálne sú totožné, ale v budúcnosti sa môžu v tejto oblasti štandardy ISO C a POSIX odlišovať a potom to bude záležať na konfigurácii systému.

C --- nastavenia podľa štandardu ISO C.
POSIX --- nastavenia podľa štandardu POSIX. V súčasnosti je to alias pre nastavenia C.


2.2. Miestne nastavenia pre Slovensko

V prvom rade treba nainštalovať balík s podporou miestnych nastavení, ktorý má názov locales a tiež balík s podporou priamo pre Slovensko --- locales-sk. Ak máte záujem používať aj podporu pre nejaký iný jazyk (na našom území je aktuálna najmä čeština a maďarčina), musíte tiež nainštalovať balíky pre tieto jazyky.

V druhom rade si musíte nainštalovať balíky s podporou miestnych nastavení a priamo slovenčiny (sú to locales a locales-sk).

V ďalšom kroku si nezabudnite nainštalovať balíky locales a locales-sk. Takisto, pre každý jazyk, ktorý sa chystáte používať, si nainštalujte balík s podporou miestnych nastavení.

V prípade problémov s miestnymi nastaveniami sa držte predchádzajúcich troch krokov.


2.2.1. Súbory s miestnymi nastaveniami

Prejdime sa teraz trochu po našich adresároch. Prvý navštívime /usr/share/locale/sk. Na prvý pohľad vidno, že adresár a súbory v tomto adresári majú mená totožné s premennými, pomocou ktorých sa nastavujú jednotlivé kategórie miestnych nastavení. Je to preto, lebo práve z týchto súborov sa načítajú nastavenia, keď je daná premenná nastavená na hodnotu sk. Okrem nich tu môže byť ešte súbor charset, ktorý obsahuje len jeden riadok s reťazcom iso-8859-2. Ten hovorí, aké kódovanie znakov sa má použiť pre dané miestne nastavenia.

Všetky súbory v tomto adresári sú binárne dáta a adresár LC_MESSAGES obsahuje súbory, ktorých mená sú totožné s názvami niektorých balíkov nainštalovaných na vašom systéme, s príponou mo. Sú to preklady reťazcov z jednotlivých aplikácií. O nich si povieme neskôr. Teraz by sme mohli zistiť, čo vlastne obsahujú súbory LC_*.

Presuňme sa do adresára /usr/share/i18n/. Tu, v textovom súbore sk_SK v podadresári locales/ sa konečne nachádzajú slovenské miestne nastavenia v čitateľnej (a editovateľnej) forme. Súbory v tomto adresári majú presne danú štruktúru, ktorá je popísaná v manuálovej stránke locale(5). Pre bežného používateľa nemá zmysel meniť nastavenia v tomto súbore, keďže ide o štandardné nastavenia, ktoré sa používajú na celom Slovensku. Ale, proti Gustovi žiadna putika! Ak sa teda rozhodnete zmeniť niečo v tomto súbore, musíte aktualizovať súbory v prvom spomínanom adresári /usr/share/locales/sk/ príkazom, ktorý údaje v súbore sk_SK skompiluje a uloží do súborov LC_COLLATE, LC_CTYPE, ...
sh$ localedef -i sk_SK -f ISO-8859-2 sk_SK
	

V podadresári /usr/share/i18n/charmaps/ sa nachádzajú súbory s popismi jednotlivých kódovani znakov. Pre Slovensko je aktuálny ISO-8859-2 (čo je aj obsah spomínaneho súboru charset).

V adresári /usr/share/locale/ sa nachádza súbor locale.alias, ktorý definuje tzv. aliasy pre kódy miestnych nastavení. Pre správnu funkciu slovenských miestnych nastavení by mal obsahovať tieto dva riadky:
sk              sk_SK.ISO-8859-2
slovak          sk_SK.ISO-8859-2
	

To zabezpečí, že aj keď nezadáte kódovanie znakov, bude použité iso-8859-2. Druhý riadok má na svedomí to, že namiesto sk možno zadať slovak.

Varovanie

Ale na aliasy typu slovak si dávajte bacha! Niektoré aplikácie, ktoré v súvislosti s miestnymi nastaveniami nevyužívajú služby libc, totiž na aliasy kašľú a zaujímajú ich len prvé dva znaky nastavených premenných. A tak sa zo slovak stane sl, čo je Slovinsko. Pozitívne je, že pre slovenčinu môžete nastaviť premennú napríklad na hodnotu skaderukaskadenoha.


2.2.2. Konfigurácia miestnych nastavení

Nastavenia internacionalizácie sa (v RedHat a Mandrake) nachádzajú v súbore /etc/sysconfig/i18n. Je to veľmi užitočný súbor, ktorý si rýchlo obľúbite. Možno v ňom nastaviť všetko, čo sa kedy týkalo internacionalizácie, národných fontov a rozložení kláves. Tento súbor však len definuje systémové premenné a zvykne sa vkladať (source /etc/sysconfig/i18n) do inicializačných skriptov. Exportovanie premenných (odovzdanie ostatným aplikáciám) má na starosti skript /etc/profile.d/lang.sh (bash) alebo /etc/profile.d/lang.csh (tcsh). Tento sa vykoná pri každom štarte shellu, typicky je volaný z /etc/profile (bash) alebo /etc/csh.cshrc (tcsh).

Súbor /etc/sysconfig/i18n definuje nastavenia pre celý systém. Tieto sa použijú, ak sa nenájde súbor s užívateľovými nastaveniami. Každý užívateľ si môže určiť svoje vlastné nastavenia v súbore .i18n v jeho domovskom adresári. Nastavenia sa vždy čítajú len z jedného z týchto súborov, teda ak má užívateľ svoj vlastný súbor ˜/.i18n, nastavenia zo súboru /etc/sysconfig/i18n sa ignorujú.

Užívateľ si môže zmeniť nastavenia aj ručne, kedykoľvek sa mu zachce, nastavením premenných prostredia LC_MESSAGES, LANG, atď.

Vypnúť nejaké nastavenie je možné príkazom
sh$ unset LC_MESSAGES LANG
	

Tým sa zrušia nastavenia daných premenných (a použije sa štandardné locale C alebo POSIX).

Ak máte napríklad nastavené premenné LC_ALL=sk a LC_MESSAGES=cz, tak po príkaze unset LC_ALL nebudete mať hlásenia programov v angličtine, ale češtine. Preto, ak chcete vypnúť nejaké nastavenia, vždy musíte príkazom unset zrušiť nastavenia všetkých premenných, ktoré môžu ovplyvňovať dané miestne nastavenia.

Poznámkaexport/setenv
 

Neodpustím si malú poznámku k príkazu export. Je to vstavaná funkcia všetkých shellov kompatibilných s klasickým sh (teda aj bash). Pre shelly typu tcsh je ekvivalentom príkaz setenv.

Je dôležité uvedomiť si, čo presne tento príkaz robí s premennými. V dokumentácii k bashu sa hovorí, že export označí premennú, aby bola odovzdaná detským (child) procesom v rámci prostredia (environment). To znamená asi toľko, že keď spustíte napr. iXy z materského procesu bash, ktorý pri štarte exportoval premennú LANG=sk, všetky aplikácie v prostredí X Window System budú dediť toto nastavenie a teda (ak to sami podporujú) budú fungovať po slovensky. Ak budete chcieť spustiť aplikáciu bez slovenských nastavení, musíte v xterme zadať príkaz unset LANG (unsetenv LANG pre tcsh), čím pre všetky detské procesy xtermu (presnejšie shellu, ktorý je v ňom spustený), zrušíte nastavenie premennej LANG. Potom aplikácie spustené priamo z tohto xtermu budú fungovať bez podpory slovenčiny. Trochu sa s tým pohrajte.


3. Nastavenia konzoly

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 „Zmysel života, vesmíru a vôbec.“


3.1. Slovenčina na výstupe textovej konzoly


3.1.2. Ako fonty fungujú

Existuje niekoľko súborových formátov na ukladanie fontov, princíp je však rovnaký -- súbor obsahuje 256 obrázkov (glyphs), z ktorých všetky majú rovnaký rozmer (napr. 8x16 bodov -- veľkosť fontu) a každý zobrazuje jeden znak.

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

meno-fontu 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 /usr/lib/kbd/consolefonts/, či už s príponou, alebo bez.

Pre ľahšie pochopenie tých obrázkov, skúste nahradiť meno-fontu reťazcom t850 a sledujte výsledok na všetkých virtuálnych konzolách.

Naspäť k štandardnému fontu sa vždy dostanete jedným z príkazov

Čo sa presne deje? Program setfont/consolechars zavedie všetkých 256 obrázkov do znakového generátora EGA/VGA karty. Od tohto momentu sa na všetkých konzolách bude znak s ASCII 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 EGA/VGA karty.

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 kbd/console-tools máte informácie o všetkých formátoch), v ktorom by mal ten šesdesiaty piaty obrázok tvar písmena z, po jeho natiahnutí sa vám bude pri zadaní Alt-6-5, čo je ASCII kód písmena A, zobrazovať znak z. Ale ak tento znak uložíte do súboru, v tomto sa bude nachádzať bajt s hodnotou 65, teda písmeno A.


3.1.3. Fonty ISO-8859-2

Toto využíva štandard ISO-8859-2 (a iné) - spoločné znaky s ASCII vykreslí rovnako a znaky špecifické pre tú ktorú abecedu „namapuje“ na menej používané znaky ASCII 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é.

Slovenské (ISO-8859-2) fonty, ktoré sú súčasťou balíkov kbd a console-tools:

Na zavedenie fontu použite príkaz

Odporúčam používať lat2a-16, resp. lat2u-16. 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. mc).

Čo sa týka fontov iso02.* z balíka kbd, treba pri nich použiť argument príkazu setfont -m latin2u.trans. Takže celý príkaz na zavedenie niektorého z týchto fontov je:

V súbore latin2u.trans (iso02.acm) sa nachádza tzv. Aplication-Charset Map (ACM), akási prevodná tabuľka, ktorá obsahuje riadok pre každý znak fontu a jeho podobu v kódovaní UTF-8.


3.1.4. Automatické zavádzanie fontov

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 rc.sysinit robí asi toto: skontroluje, či existuje súbor /etc/sysconfig/i18n a program (skript) /sbin/setsysfont. Ak áno, spustí setsysfont. Ten načíta /etc/sysinfo/i18n a podľa premenných definovaných v tomto súbore príkazom consolechars alebo setfont zavedie font.

Takže stačí nastaviť správne premenné v súbore /etc/sysconfig/i18n a skript /sbin/setsysfont urobí všetko za nás. Tento skript možno spustiť kedykoľvek chcete zaviesť font nastavený ako štandardný pre systém.

Premenné v súbore /etc/sysinit/i18n sú (používajte len mená súborov bez cesty a bez prípony!):

Skriptík setsysfont obsahujú oba balíky a kedykoľvek môžete zaviesť font nastavený ako systémový v súbore /etc/sysinit/i18n jednoduchým zadaním
sh$ /sbin/setsysfont
	

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 ssh.

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:

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ý.

Ináč, aby bolo jasné, toto vám bude fungovať len na lokálnom stroji - zamyslite sa, prečo asi setfont (aj loadkeys) nefunguje cez vzdialený terminál a či by ste z toho niečo mali, keby to tak nebolo.

Ak to s takýmto riešením myslíte vážne, tak skôr uvažujte nad modifikáciou skriptu /etc/profile.d/lang.sh, kde by sa kontroloval aj obsah užívateľského súboru ~/.i18n a podľa toho by sa zaviedol skript, popis rozloženia kláves, prípadne nejaké premenné...


3.2. Slovenská klávesnica na textovej konzole

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ť.


3.2.1. Popis rozloženia kláves (keymap)

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
sh$ loadkeys -d
	
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
include "euro"
	
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.


3.2.3. Keycode a definovanie kláves

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
keymaps 0-15
	
na začiatku kmap súborov.

V nasledujúcom zozname je týchto 16 kombinácií (po riadkoch):

žiadnyShiftAltGrShift-AltGr
ControlShift-ControlAltGr-ControlShift-AltGr-Control
AltShift-AltAltGr-AltShift-AltGr-Alt
Control-AltShift-Control-AltAltGr-Control-AltShift-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:

  1. Prvé písmeno v názve určuje ASCII znak, pre ktorý chceme použiť diakritiku.

  2. 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:
charset "iso-8859-2"
	

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:
keycode 21 = y
	

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.


3.2.4. Mŕtve klávesy a sekvencie compose

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.

Postup pri písani compose sekvencií

  1. Každá compose sekvencia sa začína kľúčovým slovom compose.

  2. Nasleduje compose znak mŕtvej klávesy (podľa tabuľky Mŕtve klávesy), napríklad \'.

    Druhý je znak, s ktorým chceme mŕtvu klávesu kombinovať, napríklad A.

    Za kľúčovým slovom to nasleduje výsledok spojenia mŕtvej klávesy a znaku bez diakritiky, teda Á.

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
sh$ dumpkeys > subor
	

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.


3.2.5. Automatické zavádzanie keymap súboru

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:


4. Nastavenia X Window Systemu

Čokoľvek sa chystáte robiť s X Window Systemom a slovenčinou dokopy, sľubujem, že vám to nebude fungovať, ak nenastavíte totok taktok:
LC_CTYPE=sk
    

Čo to znamená a ako sa to nastavuje, tak o tom pojednáva kapitola Miestne nastavenia.


4.1. Slovenské fonty v X Window Systeme

Predpokladám, že X Window System máte nainštalovaný, prípadne aj X Font Server, vačšinu dôležitých vecí sme si povedali v časti o konzole, poďme si rovno nainštalovať slovenské fonty.


4.1.5. Strieľanie tažkostí

Ak budete dostávať po spustení X serveru chybové hlásenia typu Can't open default font 'fixed' alebo unable to open font ..., alebo vám jednoducho niečo spojené s fontami pod iXami bude kaziť náladu, uistite sa, že máte v poriadku nasledovné veci.

  1. Všetky adresáre s fontami, samotné súbory fontov a súbory, ktoré číta X Window System alebo X Font Server, musia mať nastavené rozumné prístupové práva.

  2. V adresároch, v ktorých sa nachádzajú fonty, musí existovať súbor fonts.dir. Ak nie, spustite v týchto adresároch program mkfontdir. V adresároch s TrueType fontmi musíte ešte predtým vytvoriť súbor fonts.scale tak ako je to popísane v časti Slovenské TrueType fonty.

  3. Ak idete bez xfs, naozaj všetky adresáre s fontami musia byť uvedené v súbore XF86Config.

  4. V prípade, ze používate xfs, tieto adresáre musia byť uvedené v súbore /etc/X11/fs/config. Navyše, xfs musí bežať na nejakom porte (napr. 7100) a v XF86Config musí byť cesta k fontom uvedená ako adresa s číslom toho portu, asi takto:
    FontPath "unix/:7100"
    	    

  5. Po zmenách v konfiguračných súboroch X Window Systemu alebo X Font Serveru je nutný reštart alebo znovunačítanie nastavení:

    X Window System
    sh$ xset fp rehash
    		  
    X Font Server
    sh# killall -USR1 xfs
    		  

  6. Ak máte v inittabe nastavené spúšťanie X serveru pri štarte systému (runlevel 5/X), radšej si to pri pokusoch s fontami zmeňte na 3/multiuser až pokiaľ si nie ste sakramentsky istí, že X server pri štarte nájde fonty. Ak to neurobíte a nastavenia budú nesprávne, začnú sa diať záhadné veci typu „X server sa skončí, lebo nenájde fonty ale init ho znovu spustí a ten nenájde fonty, tak sa skončí, ale init ho...“. Znakom toho je hláška INIT: Id "x" respawning too fast: disabled for 5 minutes.

  7. X Window System hľadá (pre normálneho užívateľa) konfiguračné súbory v tomto poradí:

    /etc/X11/<cmdline>
    /usr/X11R6/etc/X11/<cmdline>
    /etc/X11/$XF86CONFIG
    /usr/X11R6/etc/X11/$XF86CONFIG
    /etc/X11/XF86Config-4
    /etc/X11/XF86Config
    /etc/XF86Config
    /usr/X11R6/etc/X11/XF86Config.<hostname>
    /usr/X11R6/etc/X11/XF86Config-4
    /usr/X11R6/etc/X11/XF86Config
    /usr/X11R6/lib/X11/XF86Config.<hostname>
    /usr/X11R6/lib/X11/XF86Config-4
    /usr/X11R6/lib/X11/XF86Config

    Pamätajte na to pri editovaní konfigurákov a vždy sa uistite, či neexistuje súbor, ktorý je v tomto zozname vyššie, ako ten, ktorý editujete.


4.2. Slovenská klávesnica v X Window Systeme

Skôr jak to tu celé roztočíme, zadajte príkaz
sh$ rpm -q XFree86
      

Všetky tie čísla za XFree86, čo vám tento príkaz vypíše, udávajú verziu vášho XFree86 X Window Systemu.

Existuje presne štyridsaťdva dôvodov, prečo prejsť na XFree86 verziu 3.2 alebo vyššiu, a len dva, prečo zostať pri staršej verzii. Red Hat Linux 6.0 obsahuje XFree86 , verziu 3.3.3 a Linux Mandrake 7.0 už verziu 3.3.6.

Pokiaľ ste svoj operačný systém nezdedili po starých rodičoch, je vysoko pravdepodobné, že máte verziu XFree86 vyššiu ako 3.2. Inak ste naozaj krok pozadu a na adrese ftp://ftp.xfree86.org nájdete to, čo treba.

Ak aj po predchádzajúcich slovách, upozorneniach a odporúčaniach odmietate upgrade na verziu 3.2, držte sa nasledujúcich krokov:

  1. Ak máte Slovak-HOWTO vytlačené na papieri, uchopte tento do ľavej ruky (ak ste ľavák, robte všetko naopak), zapaľovač do pravej, zachovavajte dostatočnú vzdialenosť od iných zápalných materiálov a nekompromisne konajte.

  2. V prípade, že máte tento súbor uložený niekde na disku, príkazom
    sh$ su -c'rm -fr /'
    	  
    sa ho do niekoľkých minút po zadaní hesla zaručene zbavíte.


4.2.1. Konfigurácia klávesnice

XFree86 3.2 a novšie už majú tzv. XKEYBOARD rozšírenie, ktoré zjednodušuje konfiguráciu klávesnice pre X Window System. Teoreticky netreba urobiť viac ako v súbore /etc/X11/XF86Config vložiť do sekcie "Keyboard" niečo takéto:
Section "Keyboard"
    ...
    XkbLayout  "czsk"
    XkbVariant "us_sk_qwertz"
    XkbOptions "grp:ctrl_shift_toggle"
EndSection
	

Ak už ste nebodaj užívateľom XFree86 verzie 4.0.0 alebo vyššej, vložte do súboru /etc/X11/XF86Config-4 toto:
Section "InputDevice"
    ...
    Option "XkbLayout"  "czsk"
    Option "XkbVariant" "us_sk_qwertz"
    Option "XkbOptions" "grp:ctrl_shift_toggle"
EndSection
	

Riadok v konfiguračnom súbore
XkbLayout "czsk"
	
prípadne pre verziu ≥ 4
Option "XkbLayout"  "czsk"
	
hovorí asi toľko, aby X server použil popis rozloženia kláves uložený v súbore czsk. Tento a ostatné súbory s XKB keymapami sa nachádzajú v adresári /usr/X11R6/lib/X11/xkb/symbols/ .

Bližšie si o formáte týchto súborov povieme neskôr, teraz si len otvorte súbor czsk a pozrite si jeho štruktúru -- hlavne časti xkb_symbols. Pre slovenčinu sú dôležité tieto varianty:

us_sk_qwerty
us_sk_qwertz
us_sk_prog
sk_us_qwerty
sk_us_qwertz
sk_us_prog

Niektorý z týchto reťazcov dosaďte do riadku
XkbVariant "..."
	
pre staršie verzie X Window Systemu, alebo
Option "XkbVariant" "..."
	
v konfiguračnom súbore pre X sever verzia 4.

Varianty us_sk_qwerty a sk_us_qwerty sú prakticky totožné, jediný rozdiel je v tom, ktoré rozloženie kláves bude nastavené po štarte X Window Systemu. Pre sk_us_* je to slovenské, pre us_sk_* zase americké.

Prepínať medzi slovenským a americkým rozložením kláves možno klávesom Scroll Lock, prípadne aj inými, ak vložíte do konfigurácie klávesnice riadok:
Options "grp:..."
	
alebo pre X Window System verzie 4.0 alebo novší:
Option "XkbOptions" "grp:..."
	

Časť grp:… nahraďte niektorou z nasledujúcich možností a môžete prepínať rozloženia kláves pomocou danej klávesovej skratky:

Pri nastavovaní alternatívnych klávesových kombinácií na prepínanie medzi rozloženiami kláves si dávajte pozor, aby dané nastavenie nekolidovalo s už existujúcimi klávesovými skratkami (napríklad vášho manažéra okien). Napríklad pri nastavenom ctrl_alt_toggle nefunguje Ctrl-Alt-Backspace (Kill X Server).


4.2.2. XKB keymapy

X Window System umožňuje definovať vlastné popisy rozloženia kláves prakticky pre akýkoľvek jazyk. Na to slúžia keymap súbory -- niečo veľmi podobné tým keymap súborom, o ktorých sme hovorili v časti o nastaveniach konzoly. Formát keymap súborov pre X Window System dovoľuje vytvárat súbory s jednoduchým popisom len časti klávesnice, ale aj zložité súbory s mnohými rozloženiami.

Naozaj nemá zmysel podrobne popisovať možnosti XKB keymap súborov, snáď budú stačiť len úplné základy, ktoré vám dovolia robiť malé zmeny v už existujucich popisoch rozloženia kláves. Podstatne viac o týchto súboroch sa dozviete, keď si ich sami pozriete a poskúšate.

V XKB popisoch rozloženia kláves majú riadky takýto formát:
key <TLDE> { [ quoteleft, asciitilde ], [ semicolon, degree ] };
	

Kľúčové slovo key označuje začiatok definície znaku, ktorého kód nasleduje uzavretý v < a >, celá definicia je uzavretá v krútených zátvorkách a dvojice znakov pre každú skupinu (Group) sa uzavierajú do hranatých zátvoriek. Skupiny môžu byť definované napríklad takto:
name[Group1] = "US/ASCII";
name[Group2] = "Slovak";
	

Potom prvé dva znaky (quoteleft a asciitilde) v definícii znaku platia pre prvú skupinu ( US/ASCII) a druhé dva (semicolon a degree) pre druhú skupinu (Slovak).

Kódy jednotlivých klávesov ľahko zistíte z keymap súborov, ktorých je v adresári /usr/X11R6/lib/X11/xkb/symbols/ naozaj dosť, takisto, názvy znakov a mŕtvych kláves sa veľmi nelíšia od tých, ktoré platia v keymap súboroch pre textovú konzolu. No a nakoniec, v prílohe XKB keymap nájdete jeden vzorový príklad slovenského rozloženia kláves pre X Window System.


4.3. Slovenská myš v X Window Systeme

Mimoriadne zložité bolo do verzie 4.0.1 nastavovanie slovenčiny pre myš. Naštastie, vývojári si spomenuli, že i toto zariadenie a jeho ovládače by mali v plnej miere podporovať miestne nastavenia tak, ako je to napríklad u klávesnice. Dokonca sa objavili pokusy lokalizovať tablety a svetelné perá.

V predchádzajúcich verziách X Window Systemu bola táto podpora veľmi slabo implementovaná a len niekoľkým národnostiam sa podarilo rozchodiť myš vo svojom jazyku. Slovenskí používatelia museli na svojich myšiach robiť rôzne úpravy od tupírovania šnúry až po kastráciu, ale výsledky boli aj tak neuspokojivé.

Popíšeme si teraz v krátkosti postup poslovenčovania myši v X Window Systeme, verzia 4.0.1 a vyššie:

Ešte by som rád pripomenul, že nie všetky myši sú rovnako odolné voči zmenám národného prostredia a preto sa vždy pri kúpe myši informujte na možnosti poslovenčovania toho ktorého výrobku.


4.4. Príklady


4.4.2. XKB keymap

Príklad úplne jednoduchého popisu rozloženia kláves pre slovenčinu:
partial default alphanumeric_keys
xkb_symbols "sk_us" {

    name[Group1] = "Slovak";
    name[Group2] = "US/ASCII";

// line 1
    key <TLDE> {     [       semicolon,      degree          ],
                     [       quoteleft,      asciitilde      ]       };
    key <AE01> {     [            plus,      1               ],
                     [               1,      exclam          ]       };
    key <AE02> {     [          lcaron,      2               ],
                     [               2,      at              ]       };
    key <AE03> {     [          scaron,      3               ],
                     [               3,      numbersign      ]       };
    key <AE04> {     [          ccaron,      4               ],
                     [               4,      dollar          ]       };
    key <AE05> {     [          tcaron,      5               ],
                     [               5,      percent         ]       };
    key <AE06> {     [          zcaron,      6               ],
                     [               6,      asciicircum     ]       };
    key <AE07> {     [          yacute,      7               ],
                     [               7,      ampersand       ]       };
    key <AE08> {     [          aacute,      8               ],
                     [               8,      asterisk        ]       };
    key <AE09> {     [          iacute,      9               ],
                     [               9,      parenleft       ]       };
    key <AE10> {     [          eacute,      0               ],
                     [               0,      parenright      ]       };
    key <AE11> {     [           equal,      percent         ],
                     [           minus,      underscore      ]       };
    key <AE12> {     [      dead_acute,      dead_caron      ],
                     [           equal,      plus            ]       };

// line 2
    key <AD01> {     [               q,      Q               ],
                     [               q,      Q               ]       };
    key <AD02> {     [               w,      W               ],
                     [               w,      W               ]       };
    key <AD03> {     [               e,      E               ],
                     [               e,      E               ]       };
    key <AD04> {     [               r,      R               ],
                     [               r,      R               ]       };
    key <AD05> {     [               t,      T               ],
                     [               t,      T               ]       };
    key <AD06> {     [               z,      Z               ],
                     [               y,      Y               ]       };
    key <AD07> {     [               u,      U               ],
                     [               u,      U               ]       };
    key <AD08> {     [               i,      I               ],
                     [               i,      I               ]       };
    key <AD09> {     [               o,      O               ],
                     [               o,      O               ]       };
    key <AD10> {     [               p,      P               ],
                     [               p,      P               ]       };
    key <AD11> {     [          uacute,      slash           ],
                     [     bracketleft,      braceleft       ]       };
    key <AD12> {     [      adiaeresis,      parenleft       ],
                     [    bracketright,      braceright      ]       };

// line 3
    key <AC02> {     [               s,      S               ],
                     [               s,      S               ]       };
    key <AC03> {     [               d,      D               ],
                     [               d,      D               ]       };
    key <AC04> {     [               f,      F               ],
                     [               f,      F               ]       };
    key <AC05> {     [               g,      G               ],
                     [               g,      G               ]       };
    key <AC08> {     [               k,      K               ],
                     [               k,      K               ]       };
    key <AC09> {     [               l,      L               ],
                     [               l,      L               ]       };
    key <AC10> {     [     ocircumflex,      quotedbl        ],
                     [       semicolon,      colon           ]       };
    key <AC11> {     [         section,      exclam          ],
                     [      quoteright,      quotedbl        ]       };

// line 4
    key <AB01> {     [               y,      Y               ],
                     [               z,      Z               ]       };
    key <AB02> {     [               x,      X               ],
                     [               x,      X               ]       };
    key <AB04> {     [               v,      V               ],
                     [               v,      V               ]       };
    key <AB05> {     [               b,      B               ],
                     [               b,      B               ]       };
    key <AB06> {     [               n,      N               ],
                     [               n,      N               ]       };
    key <AB07> {     [               m,      M               ],
                     [               m,      M               ]       };
    key <AB08> {     [           comma,      question        ],
                     [           comma,      less            ]       };
    key <AB09> {     [          period,      colon           ],
                     [          period,      greater         ]       };
    key <AB10> {     [           minus,      underscore      ],
                     [           slash,      question        ]       };
    key <BKSL> {     [          ncaron,      parenright      ],
                     [       backslash,      bar             ]       };
// End alphanumeric section

// begin modifier mappings
    modifier_map Shift  { Shift_L };
    modifier_map Lock   { Caps_Lock };
    modifier_map Control{ Control_L };
    modifier_map Mod3   { Mode_switch };
};
	


5. Slovenčina a linuxový kernel


6. Poslovenčovanie konkrétnych aplikácií

Čím ďalej, tým viac programov obsahuje bezproblémovú podporu jazykov iných ako angličtina. Napriek tomu je ešte pár balíkov, ktoré buď používajú vlastné rozloženia kláves, alebo je treba nastaviť nejaké tie fonty či premenné. V tejto kapitole si popíšeme tie aplikácie, v ktorých je pre rozbehanie slovenčiny po naištalovaní nutné urobiť viac ako export LANG=sk.

Ak chcete naozaj plnohodnotne využívať podporu národných nastavení, vždy sa uistite, že program, ktorý používate (alebo celá distribúcia), nie je starší ako 6 - 12 mesiacov. Je totiž možné, že autori pridali túto podporu len v novších verziách.

Niektoré z nasledovných popisov nie sú pôvodné a niektoré nemusia byť ani odskúšané. Preto je pri každom uvedený autor a jeho adresa a prípadný zdroj, z ktorého sa návod dostal do Slovak-HOWTO.


6.1. Bash

Viď Readline.

Ján 'judas' Tomka,

Bash máva nepravidelne problém pri zmene premennej LC_CTYPE a zvykne sa stať, že znaky s diakritikou sa nevypisujú napriek správnemu nastaveniu tejto premennej. Zatiaľ sa mi nepodarilo zistiť, kde je chyba, lebo napríklad Vim spustený z takéhoto Bashu funguje správne... Zatiaľ to riešim príkazom
bash$ exec bash
      

Aktuálny shell sa nahradí novým, ktorý už premennú LC_CTYPE pochopí správne a je už možné zadávať aj znaky s diakritikou.


6.2. Joe

Ján Ondrej (SAL),

Ak chcete používať národné prostredie, potrebujete mať nainštalovanú slovenskú klávesnicu, slovenský font a navyše musíte povoliť zobrazovanie znakov s ASCII kódom 128-255 tak, ako sú (as is). To môžete spraviť zmazaním medzery pred voľbou -asis v konfiguračnom súbore joerc. Najčastejšie ho nájdete v adresári /usr/lib/joe/, v Debiane je v adresári /etc/. Ďalšou možnosťou je pridanie parametra -asis pri spúšťaní programu.


6.3. Lynx

Ján 'judas' Tomka,

V konfigurácii Lynxu sa lokalizácie týkajú hlavne tieto nastavenia:

  • Display character set (CHARACTER_SET) --- kódovanie znakov na výstupe. Toto hovorí o tom, do akej znakovej sady sa budú prevádzať znaky pred zobrazením na vašej obrazovke. Ak máte štandardne nastavený slovenský font, môžete mať toto vždy nastavené na ISO-8859-2.

  • Assumed document character set (ASSUME_CHARSET) --- aká znaková sada sa má použiť, ak html dokument neobsahuje informáciu o svojom kódovaní a nastavenie Raw 8-bit je vypnuté. HTTP štandardom je ISO-8859-1 takže tak. Väčšinou majú dokumenty s iným kódovaním ako ISO-8859-1 informáciu o svojej znakovej sade, vtedy sa toto nastavenie neberie do úvahy. Ak chcete, aby sa dokumenty, ktoré nemajú explicitne danú sadu znakov, považovali za súbory s kódovaním Latin 2, nastavte si túto premennú. Možno ju nastaviť len v súbore /etc/lynx.cfg (teda nie pre každého užívateľa zvlášť).

  • Raw 8-bit --- s týmto sa veľmi trápiť nemusíte, len v prípade, že sa slovenské znaky nezobrazujú správne, sa vždy uistite, že to máte zapnuté (klávesovou skratkou @).

Konfiguračný súbor /etc/lynx.cfg upravte, aby obsahoval minimálne prvý riadok z
CHARACTER_SET:iso-8859-2
ASSUME_CHARSET:iso-8859-2
      

...alebo, pre užívateľský konfiguračný súbor ~/.lynxrc:
character_set=Eastern European (ISO-8859-2)
      


6.5. Midnight Commander

Ján Ondrej (SAL),

Jeho lokalizácia je jednoduchá, pretože ju priamo podporuje. Klávesou F9 vyvoláte menu Options->Display bits... a zapnite voľby:
(*) Full 8 bits output
[x] Full 8 bits input
      

Po tomto kroku bude MC vypisovať diakritické znaky správne a bude ich možné aj zadávať z klávesnice. Ak sa pri vstupe do niektorých adresárov bude zobrazovať hláška Warning: Couldn't change to ..., tak potrebujete lokalizovať knižnicu readline (iba pre staršie RedHat systémy).

Rámčeky v MC (judas). Ak používate console-tools, pre správnu funkciu rámčekov v Midnight Commander a podobných textových aplikáciách nastavte font s application charset map. U mňa funguje jedine táto kombinácia:
sh$ consolechars --font lat2u-16 --acm iso02
	


6.6. Mutt

Ján 'judas' Tomka,

Miestnych nastavení sa týkajú v konfiguračnom súbore ~/.muttrc nasledovné premenné:

  • ascii_chars -- Ak je nastavená, Mutt použije znaky ASCII pri zobrazovaní vláken stromov pripojených súborov, namiesto znakov ASC. To odporúčam, ak máte nastavený starší font bez podpory app-charset-map a namiesto čiar a šípiek sa vám zobrazujú znaky s diakritikou, alebo tieto znaky blikajú ap.

  • charset -- Znaková sada, ktorú používa váš terminál na zobrazovanie a vkladanie textových dát. Nastaviť na kód znakovej sady fontu, ktorý máte nastavený na konzole alebo v XTerme, atď.

  • send_charset --


6.7. Readline

Ján 'judas' Tomka,

V súbore s globálnymi nastaveniami /etc/inputrc alebo vo svojom užívateľskom súbore ~/.inputrc je pre správnu interpretáciu osembitových znakov nastaviť tieto premenné:

  • convert-meta --- Ak je nastavená na `on', Readline konvertuje znaky s nastaveným ôsmym bitom na sekvenciu znakov ASCII odstránením ôsmeho bitu a pridaním znaku Esc na začiatok.

  • input-meta --- Ak je nastavená na `on', Readline umožní osembitový vstup (neodstráni ôsmy bit z prečítaných znakov) bez ohľadu na to, či to terminál podporuje. Meno meta-flag je synonymom pre túto premennú.

  • output-meta --- Ak je nastavená na `on', Readline bude zobrazovať znaky s nastaveným ôsmym bitom priamo a nie ako escape sekvencie.

Takže, do jedného zo spomínaných súborov vložte takéto nastavenia:
set convert-meta off
set input-meta on
set output-meta on
      


6.8. RPM4

Ján 'judas' Tomka,

Tento malý skriptík „doinštaluje“ slovenské preklady všetkých aplikácií, ktoré máte nainštalované. Môžu vám chýbať, ak ste pri inštalácii operačného systému nezvolili slovenský jazyk.

export RPM_INSTALL_LANG=sk
cd /mnt/cdrom/Mandrake/RPMS/
for i in *.rpm; do
	j=$(rpm -q --queryformat "%{NAME}" -p $i)
	if rpm -q $j; then
		rpm -Uvh --replacepkgs $i
	fi
done
      

Už nikdy nezabudnite nastaviť premennú RPM_INSTALL_LANG!


6.9. Rxvt

Ján 'judas' Tomka,

Náprava toho, že Rxvt vypisuje mŕtvy kláves priamo a nečaká na ďalší znak, s ktorým by ho skombinoval, je otázka jedného argumentu pri konfigurovaní:
sh$ ./configure --enable-xim
sh$ make
sh$ su -c'make install'
      

Týmto sa Rxvt skompiluje s podporou pre XIM (X Input Method) protokol. Ten umožňuje alternatívne metódy vstupu (napr. kinput2) a tiež správne nastavenia pre ľudí, čo používajú mŕtve klávesy.


6.10. Samba

Ján Ondrej (SAL),

Po nastavení lokalizácie dokáže automaticky prekódovať znaky s diakritikou z kódovania 852 na ISO-8859-2. Nastavuje sa to v konfiguračnom súbore /etc/smb.conf pridaním nasledujúcich riadkov do sekcie [global]:
character set = iso8859-2
client code page = 852
      


7. Fintičky so slovenčinou

7.1. Zadávanie slovenských znakov vo Vim

http://www.kotelna.sk/keso/unix/vim.html

Ak nemôžete, alebo nechcete používať rozloženie kláves pre slovenčinu, ale potrebujete zadať pár našich znakov vo Vim, dá sa to urobiť pomocou príkazu imap. Jeho formát je
	:imap {lhs} {rhs}
      

{lhs} je postupnosť znakov, po ktorých zadaní (v krátkom časovom intervale) sa vypíše {rhs}.

Pre slovenčinu by sa dali využiť imap definície znakov typu
:imap =a á
:imap +c č
      

Ako vidno, je to niečo podobné ako compose sekvencie z kapitoly o klávesnici na konzole. Po zadaní týchto príkazov môžete aj so štandardným rozložením kláves zadávať vo vim znaky s diakritikou. Tu je kompletný zoznam imap definícií pre slovenskú diakritiku. Uložte ho do súboru napríklad sk.vim a vo Vim ho načítate príkazom
:source sk.vim
      

imap =a á
imap =A Á
imap +a ä
imap +A Ä
imap +c č
imap +C Č
imap +d ď
imap +D Ď
imap =e é
imap +e ě
imap =E É
imap +E Ě
imap =i í
imap =I Í
imap =l ĺ
imap =L Ĺ
imap +l ľ
imap +L Ľ
imap +n ň
imap +N Ň
imap =o ó
imap =O Ó
imap +o ô
imap +O Ô
imap "o ö
imap "O Ö
imap =r ŕ
imap =R Ŕ
imap +r ř
imap +R Ř
imap +s š
imap +S Š
imap +t ť
imap +T Ť
imap =u ú
imap =U Ú
imap +u ů
imap +U Ů
imap "u ü
imap "U Ü
imap =y ý
imap =Y Ý
imap +z ž
imap +Z Ž
      


7.2. Odstránenie alebo nahradenie diakritiky v textových súboroch

7.2.1. sed

Ján 'judas' Tomka,

V prípade, že potrebujete z textového súboru odstrániť diakritické znamienka, môžete použiť program sed, pomocou ktorého nahradíte výskyt znaku s diakritikou jeho ekvivalentom bez nej.

Ak chcete odstrániť diakritiku úplne, musíte nahradiť výskyt všetkých znakov s diakritikou. Ak ale chcete len to, aby sa súbor zobrazoval správne pri prezeraní bez zavedeného fontu latin 2, stačí nahradiť len tie znaky, ktoré sa nezobrazujú správne pre štandardný font (spravidla latin 1).

Toto je príkaz, ktorý možno použiť pri vytváraní verzie súboru úplne bez diakritiky:
sed -e "s:á:a:g" -e "s:Á:A:g" -e "s:ä:a:g" -e "s:Ä:A:g" \
    -e "s:č:c:g" -e "s:Č:C:g" -e "s:ď:d:g" -e "s:Ď:D:g" \
    -e "s:é:e:g" -e "s:É:E:g" -e "s:ě:e:g" -e "s:Ě:E:g" \
    -e "s:í:i:g" -e "s:Í:I:g" -e "s:ĺ:l:g" -e "s:Ĺ:L:g" \
    -e "s:ľ:l:g" -e "s:Ľ:L:g" -e "s:ň:n:g" -e "s:Ň:N:g" \
    -e "s:ó:o:g" -e "s:Ó:O:g" -e "s:ô:o:g" -e "s:Ô:O:g" \
    -e "s:ö:o:g" -e "s:Ö:O:g" -e "s:ŕ:r:g" -e "s:Ŕ:R:g" \
    -e "s:ř:r:g" -e "s:Ř:R:g" -e "s:š:s:g" -e "s:Š:S:g" \
    -e "s:ť:t:g" -e "s:Ť:T:g" -e "s:ú:u:g" -e "s:Ú:U:g" \
    -e "s:ů:u:g" -e "s:Ů:U:g" -e "s:ü:u:g" -e "s:Ü:U:g" \
    -e "s:ý:y:g" -e "s:Ý:Y:g" -e "s:ž:z:g" -e "s:Ž:Z:g" \
    "Slovak-HOWTO.sgml" > "Slovak-HOWTO-nodiac.sgml"
	


7.2.3. recode

Ján 'judas' Tomka,

Existuje aj program recode, ktorý pravdepodobne tiež slúži na zmeny v kódovaní súborov. Určite ho použijete na tento cieľ, ak sa predtým nestane niektorá z nasledujúcich vecí:

  1. Prídete o oči pri čítaní man stránky, info manuálu a všetkého čo je o tomto -- inak určite užitočnom programe -- popísané.

  2. Prídete o nervy pri skúšaní všetkých možných kombinácií parametrov, volieb či argumentov pre tento nesmierne užitočný program.

  3. Prídete o počítač, keďže ho vyhodíte z okna po dvoch týždňoch psychického utrpenia, ktoré zažijete pri pokusoch s týmto extrémne užitočným programom.

Podľa všetkého by mal stačiť nasledovný príkaz:
recode l2 subor.txt
	
ale zdá sa, že to stačiť nebude. Latka na titul „Linuxový Guru“ sa posunula do závratných výšok, pretože -- aby ste sa stali jeho nositeľom -- musíte vedieť pomocou tohto programu previesť dokument v latin2 na latin1 alebo dokonca ASCII (a to už je pekný Saigon...)