# Slovak-HOWTO

### Ján 'judas' Tomka

verzia 4 (Blanka)

16. február 2002

Tento dokument poskytuje informácie týkajúce sa problematiky miestnych nastavení v prostredí operačných systémov GNU/Linux s ohľadom na potreby slovenského užívateľa.

# 1. Úvodné informácie

## 1.1. Licencia

Áno, môžete čítať tento dokument, a to aj na komerčné učely!

Autori nenesú zodpovednosť za materiálnu či psychickú ujmu spôsobenú čitateľovi, jeho rodinným príslušníkom, domácim a hospodárskym zvieratám, prípadne počítačovému zariadeniu.

Toto je „free“ dokument --- môžete ho šíriť a/alebo modifikovať v súlade s podmienkami licencie GNU Free Documentation Licence, ktorej znenie nájdete na adrese http://www.gnu.org/licenses/fdl.html.

Autorom pôvodného Slovak-HOWTO je Ján Ondrej (SAL). Tento dokument z neho obsahuje: názov a návody pre Joe, MC a Sambu. Všetko bolo ukradnuté so súhlasom autora.

## 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ú:

- Aktuálna verzia: http://slovencina.linux.sk/howto

- Priania, sťažnosti a ponuky na sobáš: judas@linux.sk

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

## 1.3. Osoby a obsadenie

Mená autorov návodov na lokalizáciu konkrétnych aplikácií sa nachádzajú priamo v kapitole Poslovenčovanie konkrétnych aplikácií, prípadne Fintičky so slovenčinou.

- Ján 'judas' Tomka -- Zodpovedný vedúci.

- Ľubomír 'salo' Sedláčik -- ksh/csh/tcsh, grammar bugfixes.

# 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.1. Ciele a prostriedky

Rôzne krajiny a kultúry majú odlišné pravidlá komunikácie. Tieto pravidlá môžu byť malého rozsahu, napr. formát dátumu a času, až po veľmi koplexné ako je jazyk, ktorým hovoria.

Internacionalizácia softvéru znamená programovať ho tak, aby bol schopný pracovať s použivateľovými miestnymi nastaveniami. V ISO C pracuje internacionalizácia v zmysle locales. Každé locale (miestne nastavenia) špecifikuje skupinu pravidiel, jedno pravidlo pre každý učel. Užívateľ si zvolí skupinu pravidiel špecifikovaním locale (pomocou systémových premenných).

Všetky programy dedia nastavené locale v rámci ich prostredia. Pod podmienkou, že programy sú napísané tak, že akceptujú nastavené locales, môžu sa riadiť pravidlami, ktoré uprednostňuje používateľ.

### 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:

- `LC_COLLATE` --- Triedenie reťazcov. Nastavením tejto premennej možno prinútiť aplikácie, napr. sort, ls a iné, aby pri porovnávaní reťazcov brali do úvahy miestne rozloženie jednotlivých písmen v abecede. Slovenčina má napríklad hneď niekoľko znakov, ktoré by pri triedení podľa číselnej hodnoty znaku spôsobovali problémy. Slovenské nastavenia triedenia povedia funkciam `strcoll` a `strxfrm`, že napríklad `ch` je jedno písmeno a nasleduje hneď za `h` a nie za `c`, že široké `ä` nasleduje za dlhým `á` a to zase za obyčajným `a`. Skúste si to na príkaze sort. Zadajte písmená `cc ch hh`, potom zmeňte `LC_COLLATE` príkazom

      bash$ export LC_COLLATE=sk

      tcsh$ setenv LC_COLLATE sk

  Skúste to so sort znovu a porovnajte výsledok...

- `LC_CTYPE` --- Klasifikácia a prevod znakov, multibyte. Správne nastavenie tejto premennej je nutné pre korektné rozlišovanie znakov abecedy jednotlivých jazykov, určenie číslic, tzv. bielych znakov, prevod malých písmen na veľké, atď. Najvhodnejšie je túto premennú nenastavovať a tým umožniť, aby bola jej hodnota prebratá od premenných `LC_ALL` alebo `LANG` (viď ďalej). Ak ale nechcete používať slovenské nastavenia, len mať správne zobrazené slovenské fonty a funkčnú slovenskú klávesnicu na konzole aj pod iXami, nastavte iba túto premennú.

  | Vždy si buďte stopercentne istí, že máte túto premennú nastavenú (buď cez `LC_ALL`, `LANG` alebo priamo), lebo inak nemá zmysel čítať ďalej! Ono „klasifikácia a prevod znakov“ neznie nejako lákavo, ale vedzte, že je to sakramentsky dôležité pre život slovenských písmeniek vo vašom Linuxe!

- `LC_MONETARY`, `LC_NUMERIC` --- Formát peňažných a číselných hodnôt. Umožňuje meniť skupinu nastavení, ktoré sa použijú pri formátovaní peňažných hodnôt alebo všetkých ostatných číselných hodnôt. Sú to desatinná čiarka, oddeľovač tisícov, zoskupovanie číslic, znamienka pre kladné a zaporné hodnoty, atď.

- `LC_TIME` --- Formátovanie dátumu a času. Nastavenia oddeľovačov medzi hodinami, minútami a sekundami, názvy dní, poradie rok, mesiac a deň v dátume, ...

- `LC_MESSAGES` --- Výber jazyka, použitého užívateľským rozhraním na preklad hlášok programov. Toto je presne tá premenná, ktorá prinúti aplikácie hovoriť po slovensky. Viď ďalšie kapitoly.

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é

- `LC_ALL` --- Ak je táto premenná nastavená, použije sa jej hodnota pre všetky vyššie spomenuté skupiny locales, bez ohľadu na hodnotu príslušných premenných.

- `LANG` --- Hodnota tejto premennej sa použije pre tie skupiny locales, ktoré nemajú príslušnú premennú nastavenú.

- `LANGUAGE` --- Alternatívne miestne nastavenia. Táto premenná môže obsahovať usporiadaný zoznam kódov miestnych nastavení oddelených dvojbodkami. Súbory s prekladmi hlášok programov sa budú hľadať v poradí, v akom sú určené v tomto zozname. Ak sa nepodarí nájsť súbor s preloženými hláškami programu v jednom jazyku, použije sa súbor pre nasledujúci jazyk v zozname `LANGUAGE`. Navyše, ak sa súbor pre prvý jazyk aj nájde, ale niektorý reťazec z neho nie je preložený, nepoužije sa pôvodný (anglický), ale najskôr sa pokúsi nájsť preklad daného reťazca v súbore pre ďalší jazyk v zozname `LANGUAGE`. To je výhodné pre ľudí, ktorí okrem svojho jazyka ovládajú nejaký iný lepšie ako angličtinu, v ktorej sú zvyčajne programy originálne napísané. Napríklad Slovák by mohol mať nastavené `LANGUAGE="sk:cz"` a Szolvák z Komárom zase `LANGUAGE="hu:sk"`.

  | Premenná `LANGUAGE` ovplyvňuje len premennú `LC_MESSAGES`! Pre správnu funkciu je nutné nastaviť aj ostatné premenné (minimálne `LC_CTYPE`).

- `LINGUAS` --- Táto premenná nemá špeciálny význam z hľadiska GNU libc, ale zvykne sa používať pri inštalácii programov (zo zdrojákov). Medzerami oddelený zoznam kódov miestnych nastavení určuje jazyky, pre ktoré si užívateľ želá inštalovať preklady reťazcov aplikácie. Príklad:

      bash$ export LINGUAS="sk cz"
      bash$ ./configure
      bash$ make install

  Tieto príkazy skompilujú a nainštalujú aplikáciu s podporou slovenčiny a češtiny. Inštalačné skripty obvykle tiež kontrolujú obsah premenných `LANG` a `LC_ALL`, tieto ale môžu obsahovať len jeden kód miestnych nastavení.

- `RPM_INSTALL_LANG` --- Častejšie ako zo zdrojového kódu sa aplikácie inštalujú z rôznych balíkov (rpm, deb, ...). Kvôli šetreniu miestom na disku (a logike -- málokto ovláda tridsať rečí) je v RPM4 možné určiť jazyk, ktorého preložené hlášky sa budú inštalovať. Preto odporúčam do súboru `.bash_profile` (`.login`) užívateľa, ktorý inštaluje balíky (root), vložiť nasledovný riadok:

      bash$ export RPM_INSTALL_LANG=sk

      tcsh$ setenv RPM_INSTALL_LANG "sk"

  Ak sa vám nebodaj stane taká vec, že nainštalujete celý operačný systém a až potom sa dozviete o tejto premennej (tak, ako sa to stalo aj mne), skúste skript uvedený v časti RPM4.

### 2.1.4. Priorita premenných

Miestne nastavenia sa určujú zo spomenutých premenných, pričom tieto sa vyhodnocujú v tomto poradí:

`LANGUAGE` --- ovplyvňuje len `LC_MESSAGES`
`LC_ALL`
`LC_*`
`LANG`

To znamená asi toľko, že keď raz nastavíte `LC_ALL`, jednotlivé premenné `LC_*` sa už neberú do úvahy. Na druhej strane, ak máte napríklad nastavené len niektoré z `LC_*`, ostatné sa nastavia na hodnotu premennej `LANG`.

### 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):

Tabuľka 1. Príklady kódov miestnych nastavení

sk_SK.ISO-8859-2 | sk_SK |  | sk
cs_CZ.ISO-8859-2 | cs_CZ@-ch | cs@-ch | cs
en_GB.iso8859 | en_GB | en@euro | en
ja_JP.ujis | ja_JP.EUC | ja_JP | ja

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.

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

| export/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.

### 2.2.3. Nastavenie časovej zóny

S miestnymi nastaveniami úzko súvisí aj nastavenie časovej zóny. Vedel by som o tom rozprávať celé hodiny, ale ono by to muselo byť zložitejšie ako len nastavenie jednej premennej... A to takto:

    bash$ export TZ="Europe/Bratislava"

    tcsh$ setenv TZ "Europe/Bratislava"

Toto nastavenie ovplyvňuje len časový posun oproti hardverovým hodinám. (Mimochodom, odporúčam hardverové hodiny nastavené na greenwichský svetový čas, čím tiež odpadajú problémy s prechodom medzi letným a zimným časom atď. ale o tom sú popísané iné súbory.) Toto celé je dosť dobrá vec, hlavne ak mate prístup k počítaču v inej časovej zóne, ale chcete pracovať s časom v stredoeurópskej zóne. Do svojho súboru `.bash_profile` (`.login` pre tcsh) vložte vyššie uvedený riadok.

## 2.3. Príklady miestnych nastavení

- Užívateľ je síce zo stredného Slovenska, ale už keď s ním bola jeho mama tehotná, púšťala mu do brucha kurzy angličtiny. Nemá teda zmysel používať slovenské nastavenia, až na krajné prípady, napr. slovenské fonty v Gimpe. Darujte mu súbor `.i18n` s nasledovným obsahom (aj na takéto malé oné potrebuje locales-sk):

      LC_CTYPE=sk

- Užívateľ je normálny, má rád svoj materinský jazyk, ale netrápi ho, keď má polovicu aplikácií po slovensky a polovicu po anglicky. Po česky vie. Toto ho poteší (nezabudnite mu potajomky nainštalovať aj locales-cs):

      LANGUAGE=sk:cs
      LANG=sk

- Užívateľ je z blízkeho juhu, jeho obľúbené pleso je Balaton, všetky hlášky chce po maďarsky, ak sa inak nedá, pochopí aj slovenčinu. Nesmieme zabudnúť na jeho miernu schizofreniu, pričom jedno jeho ja potrebuje slovenské triedenie reťazcov a druhé nevie žiť bez formátovania dátumu a času v češtine. Nikdy sa nesmie zabudnúť na inštaláciu prekladov hlášok pre maďarčinu, češtinu a slovenčinu z balíkov, ktoré podporujú premennú LINGUAS. Treba ho tiež presvedčiť, že inštalácia locales-{sk,hu,cs} nepredstavuje bezpečnostné riziko:

      LANGUAGE=hu:sk:cs
      LC_COLLATE=sk
      LC_TIME=cs
      LANG=hu
      LINGUAS="hu cs sk"

# 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.1. Fonty

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 kbd. Po jeho nainštalovaní sú súbory s fontami umiestnené v adresári `/usr/lib/kbd/consolefonts/`.

Pre nás sú dôležité najmä súbory, ktoré majú v mene `iso02`, `lat2`, `latin2` alebo číslo `852`. To naznačuje, že ide o fonty s podporou ISO-8859-2 (latin2), prípadne DOS codepage 852, čo sú štandardy aj pre slovenskú diakritiku.

Pozor, pôvodný balík sa volá kbd, ale existuje jeho rozšírená verzia, ktorá sa objavuje v distribúciách -- console-tools. Rozdiely medzi nimi sú minimálne, pre kbd budeme používať príkaz setfont, pre console-tools zase consolechars. Taktiež, názvy dodávaných fontov sa trochu odlišujú, takže budem uvádzať ekvivalenty pre oba balíky.

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

kbd:

  setfont `meno-fontu`

console-tools:

  consolechars -f `meno-fontu`

`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

kbd:

      sh$ setfont

console-tools:

      sh$ consolechars -d

Č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:

kbd:

  lat2-{08,10,12,14,16}, lat2a-16, iso02.{08,14,16}

console-tools:

  lat2-{08,10,12,14,16}, lat2u-16, iso02.f{08,14,16}

Na zavedenie fontu použite príkaz

kbd:

      sh$ setfont meno-zo-zoznamu

console-tools:

      sh$ consolechars -f meno-zo-zoznamu

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:

kbd:

      sh$ setfont iso02.16 -m latin2u.trans

console-tools:

      sh$ consoletrans -f lat2u-16 -m iso02

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

kbd:

      SYSFONT=lat2a-16

console-tools:

      SYSFONT=lat2u-16
      SYSFONTACM=iso02

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:

`~/.bash_profile`:

      if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && ! [ -f ~/.font ]; then
      	setfont -o ~/.font gr928a-8x16
      fi

`~/.bash_logout`:

      if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && [ -f ~/.font ]; then
      	setfont ~/.font
      	rm -f ~/.font
      fi

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.2. Include a nesprávna funkcia kláves E a C

Problém s E a C je spôsobený zavedením jednotnej meny v európskej únii. Na vine nie je ani tak EU, ale niekto, kto symboly pre euro a cent umiestnil na AltGr-E a AltGr-C, čo sú naše obyčajné E a C. Totiž, národné klávesnice sú väčšinou riešené tak, že po zavedení súboru naďalej funguje americké rozloženie a na prepínanie do národného režimu sa používa klávesa Pause, alebo môžme zadávať národné klávesy pri súčasnom držaní klávesy AltGr (pravý Alt). Súbor `euro.inc`, ktorý definuje tieto dva problémové symboly, je pripojený zo súboru `qwerty-layout.inc`, ktorý zase pripájajú samotné slovenské keymapy (`sk-qwerty`, `sk-prog-qwertz`, …).

Riešenie je veľmi jednoduché - zeditujete `qwerty-layout.inc` (alebo `qwertz-layout.inc`) a odkomentujete znakom `#` riadok

    include "euro"

### 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):

žiadny | Shift | AltGr | Shift-AltGr
Control | Shift-Control | AltGr-Control | Shift-AltGr-Control
Alt | Shift-Alt | AltGr-Alt | Shift-AltGr-Alt
Control-Alt | Shift-Control-Alt | AltGr-Control-Alt | Shift-AltGr-Control-Alt

Z hľadiska slovenskej klávesnice sú dôležité len prvé štyri - prvé dva sú zvyčajne nezmenené americké znaky, napr. `two at`, čo je 2 @, a druhé dva sú znaky slovenskej abecedy, ktoré bude ovládač klávesnice posielať aplikáciám ak pri stlačení tejto klávesy budeme súčasne držať klávesu AltGr (pravý Alt), napr. `lcaron two`, čo je naše ľ 2.

Aby ste mohli vkladať slovenské znaky, nemusíte celý čas pridržiavať AltGr nosom, ale môžete použiť Pause/Break, ktorý v kontexte s národnými klávesnicami funguje ako AltGr Lock. Chápte to tak, že keď sa prepnete do slovenského režimu stlačením Pause/Break, prvé a druhé dva reťazce v každom riadku keycode sa vymenia, napr.

    two at lcaron two -> lcaron two two at

Vtedy môžete použiť AltGr na zadávanie znakov americkej klávesnice, alebo sa opätovným stlačením Pause/Break prepnúť spät do US režimu.

Riadok pre klávesu s kódom 41 (znaky ` a ~), má v súbore `sk-qwerty.map.gz` nasledovný tvar:

    keycode 41 = grave asciitilde dead_diaeresis dead_circumflex ...

Mne osobne sa nepáči, že sú tu umiestnené mŕtve klávesy dead_diaeresis (dve bodky nad znakom) a dead_circumflex (mäkčeň), pretože ich nepotrebujem --- ä aj ô na slovenskej klávesnici predsa je. A keby aj nebolo, na ich písanie môžem kľudne použiť mŕtvy kláves mäkčeň. O tom si bližšie povieme v časti o compose sekvenciách. Teraz chcem mať na tomto mieste znaky ; (semicolon) a ° (degree) tak, ako je to na popiske mojej klávesnice. Zmením teda riadok takto:

    keycode 41 = grave asciitilde semicolon degree ...

Ináč, ten stupeň asi nie je stupeň, ale mŕtvy znak krúžku nad písmenom, napr. v češtine nad u, ale taký kláves je nám fakt nanič. Radšej budeme písať stupne.

Názvy znakov, ktoré sa používajú pri definovaní jednotlivých kláves si môžete pre znaky ASCII zistiť v súbore `us.map.gz`. Číselné kódy všetkých kláves vám vypľuje program

showkey

Pravidlá pre názvy znakov špecifických pre slovenčinu v kmap súboroch:

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.

Tabuľka 2. Mŕtve klávesy

Názov | Význam | Compose
--- | --- | ---
dead_acute | dĺžeň | \'
dead_circumflex | mäkčeň | ^
dead_diaeresis | dve bodky nad | "

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:

`~/.bash_profile`:

      if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && ! [ -f ~/.keymap ]; then
      	dumpkeys > ~/.keymap
      	loadkeys gr.map
      fi

`~/.bash_logout`:

      if tty 2>/dev/null |grep '/dev/tty[0-9]*$' &>/dev/null && [ -f ~/.keymap ]; then
      	loadkeys ~/.keymap
      	rm -f ~/.keymap
      fi

## 3.3. Zhrnutie nastavení konzoly

Pokiaľ som sa niekde nesekol, tak minimálne v distribúciách RedHat a Mandrake by po týchto zmenách mala do pohody zašlapať slovenská podpora (fonty + klávesnica).

`/etc/sysconfig/i18n`:

  kbd:

        SYSFONT=lat2a-16

  console-tools:

        SYSFONT=lat2u-16
        SYSFONTACM=iso02

`/etc/sysconfig/keyboard`:

      KEYTABLE=sk-qwertz
      KBCHARSET=iso-8859-2

Tiež, ak zadávate rootovské heslo s použitím iného rozloženia kláves ako je štandardné (`us`), vložte si jeho popis do súboru `/etc/sysconfig/console/default.kmap`. Pozor, nesmiete len tak skopírovať súbor, alebo vytvoriť link! Ak chcete použiť napríklad rozloženie `sk-qwertz`, urobte to takto:

    sh$ loadkeys sk-qwertz
    sh# dumpkeys >/etc/sysconfig/console/default.kmap

Ak chcete nastaviť slovenský font a klávesnicu len jednorazovo, tieto príkazy by to mali dokázať:

kbd:

      sh$ setfont lat2a-16
      sh$ loadkeys sk-qwertz

console-tools:

      sh$ consolechars -f lat2u-16 -m iso02
      sh$ loadkeys sk-qwertz

...a naspäť na štandardné nastavenia:

kbd:

      sh$ setfont
      sh$ loadkeys -d

console-tools:

      sh$ consolechars -d
      sh$ loadkeys -d

# 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.1. Inštalácia fontov - X server

Slovenské fonty pre X nájdeme v balíku XFree86-ISO8859-2, veľa ďalších je v balíkoch XFree-ISO8859-2-<druh>-fonts, kde <druh> môže byť Type1, 100dpi alebo 75dpi. Ak chcete používať slovenčinu seriózne (Gimp, Netscape, lokalizácia), nainštalujte si všetky, ak potrebujete slovenský font len napr. v XTerme, postačí vám základný balík.

Po rozbalení archívu sa fonty nachádzajú na niekoľkých miestach. Všetky cesty k novým fontom si treba odpisať, zapamätať, mať na očiach:

`/usr/share/fonts/ISO8859-2/misc`
`/usr/share/fonts/ISO8859-2/75dpi`
`/usr/share/fonts/ISO8859-2/100dpi`
`/usr/share/fonts/ISO8859-2/Type1`

Tieto cesty totiž budeme vkladať do konfiguračného súboru X Window Systemu (`/etc/X11/XF86Config`, prípadne `/etc/X11/XF86Config-4`). Tým sprístupníme X serveru fonty z týchto adresárov. Sekciu `"Files"` upravíme vložením riadkov `FontPath`:

    Section "Files"
        ...
        FontPath   "/usr/share/fonts/ISO8859-2/misc"
        FontPath   "/usr/share/fonts/ISO8859-2/75dpi"
        FontPath   "/usr/share/fonts/ISO8859-2/100dpi"
        FontPath   "/usr/share/fonts/ISO8859-2/Type1"
    EndSection

Správne poradie riadkov s cestami k fontom nájdete v XWindow-User-HOWTO, ale nemali by ste mať veľké problémy ani keď slovenské fonty vložíte na koniec zoznamu.

Za behu X Window Systemu pridáte nové adresáre s fontami príkazom

    sh$ xset +fp /usr/share/fonts/ISO8859-2/misc, /usr/share/fonts/ISO8859-2/75dpi, …

### 4.1.2. Inštalácia fontov - X Font Server

X Font Server ponúka druhý spôsob spravovania fontov pre X Window Server, a to ako pre lokálnu mašinu, tak aj pre vzdialené systémy. Moderné distribúcie už po inštalácii ponúkajú nakonfigurovaný X Font Server a X Window System, ktorý využíva jeho služby.

Pri tomto spôsobe treba cesty k fontom vložiť do konfiguračného súboru X Font Serveru a konfigurácia v `/etc/X11/X86Config` (XF86Config-4) by mala vyzerať takto:

    Section "Files"
        FontPath "unix/:7100"
    EndSection

za predpokladu, že X Font Server beží na porte 7100 (voľba príkazového riadku `-port`).

Ak teda používate xfs, niečo podobné ako v predchádzajúcej kapitole urobíte s konfiguračným súborom pre tento program (`/etc/X11/fs/config`) v časti `catalogue`:

    catalogue = ...,
            /usr/share/fonts/ISO8859-2/misc,
            /usr/share/fonts/ISO8859-2/75dpi,
            /usr/share/fonts/ISO8859-2/100dpi,
            /usr/share/fonts/ISO8859-2/Type1

Hneď potom musí xfs znovu načítať konfiguračný súbor a tým umožníte používanie slovenských fontov lokálnemu aj iným X serverom:

    sh# killall -USR1 xfs

### 4.1.3. Slovenské TrueType fonty

Ak vlastníte legálnu kópiu systému WindowsXX (kde XX je hocičo), alebo MacOS, nemali by vás zavrieť, ak použijete TrueType fonty obsiahnuté v ich distribúciách. Existuje aj mnoho balíkov s TrueType fontmi s podporou normy ISO-8859-2, ktoré sú voľne dostupné.

Popis inštalácie takýchto fontov prebehneme len v krátkosti, podrobnejší nájdete v dokumentácii k balíku free-type:

1. Skopírujte súbory s TrueType fontami napr. do adresára `/usr/share/fonts/ttf/win/`. Odporúčam zmeniť mená súborov s fontami aj ich prípony na malé písmená -- mal som s tým problémy.

2. Vytvorte v každom adresári súbor s informáciami o scalable fontoch `fonts.scale` nasledovným príkazom:

       sh# cd /usr/share/fonts/ttf/win
       sh# ttmkfdir -o fonts.scale

   Ak to nie je celkom ono a dostanete veľa chybových hlásení, alebo súbor `fonts.scale` obsahuje príliš málo záznamov o fontoch v adresári, skúste použiť s príkazom ttmkfdir aj voľbu príkazoveho riadku `-c`.

3. Zoznam fontov v súbore, ktorý načítava X server aj xfs, vytvoríte nasledovne:

       sh# cd /usr/share/fonts/ttf/win
       sh# mkfontdir

Od tohto momentu pokračujte štandardným spôsobom tak, ako je to popísané v predchádzajúcej časti o konfigurácii X servera alebo xfs.

### 4.1.4. Čo je iné so slovenskými fontami

Okrem toho, že sa slovenské znaky zobrazujú správne, nič. Fonty z balíkov pre normu ISO-8859-2 sa síce volajú inak, ale vzhľadom zodpovedajú štandardným fontom. V nasledujúcej tabuľke sú uvedené zodpovedajúce dvojice fontov:

Tabuľka 3. Slovenské ekvivalenty štandardných fontov

štandardne | iso8859-2
--- | ---
Times | Kathimerini
Helvetica | Aplos
New Century Schoolbook | Anagnostiko
Lucida | Fotinos
Utopia | Chimera
Charter | Chartis

Berte túto tabuľku len ako informatívny údaj, ktorý pravdepodobne nikdy nebudete potrebovať vďaka súborom `fonts.alias` v adresároch so slovenskými fontmi. Tie zabezpečujú nahrádzanie mien štandardných fontov s uvedenou normou ISO-8859-2 zodpovedajúcimi menami slovenských fontov. Napríklad požiadavka na font

`-b&h-lucida-bold-i-normal-sans-11-80-100-100-p-69-iso8859-2`

poskytne a teda zobrazí v skutočnosti font

`-biznet-fotinos-bold-i-normal-sans-11-80-100-100-p-69-iso8859-2`

### 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:

Tabuľka 4. Možnosti prepínania medzi rozloženiami kláves

voľba | prepínanie medzi rozloženiami
--- | ---
grp:ctrl_shift_toggle | LShift + LCtrl / RShift + RCtrl
grp:caps_toggle | Caps Lock / LShift + RShift
grp:ctrl_alt_toggle | Ctrl + Alt

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:

1. Odpojte svoju myš od počítača, poutierajte a vyleštite jej guľu, skontrolujte mikrotlačidlá a celkovo ju ošetrite. Odložte ju do tepla a sucha. Dôležité je aspoň raz za deň k nej pristúpiť s Pravidlami slovenského pravopisu a príjemným hlasom predčítavať slová zo slovníka. Po pár tyždňoch môžete prejsť k jednoduchej beletrii a rozprávkam.

2. Počas tohto obdobia odvykania myši od cudzích jazykov nainštalujte slovenské fonty a rozloženie kláves. Takisto sa pokúste pozháňať slovenské preklady obľúbených aplikácií vašej myši. Ako pozadie obrazovky odporúčam nastaviť slovenskú zástavu a adresáre s hudbou by ste mali obohatiť o tituly ako Iné Kafe, Maduar a rôzne iné rockové uragány a punkové smršte.

3. Ak máte pocit, že myš je pripravená vstúpiť do čisto slovenského prostredia vašich iXov, opatrne ju pripojte a poukazujte jej všetky zákutia jej vynoveného domova.

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.1. XF86Config-4

Časť konfiguračného súboru X Window Systemu (4.0.1) s rozbehaným X Font Serverom, slovenským rozložením kláves s prepínaním medzi americkým a slovenským pomocou Shift + Ctrl.

    Section "Files"
        RgbPath     "/usr/X11R6/lib/X11/rgb"
        FontPath    "unix/:7100"
        ModulePath  "/usr/X11R6/lib/modules"
    EndSection

    Section "InputDevice"
        Identifier	"Keyboard1"
        Driver	"Keyboard"
        Option "AutoRepeat" "500 30"
        Option "XkbRules"	"xfree86"
        Option "XkbModel"	"pc104"
        Option "XkbLayout"	"czsk"
        Option "XkbVariant" "us_sk_qwertz"
        Option "XkbOptions" "grp:ctrl_shift_toggle"
    EndSection

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

## 5.1. Kompilácia kernelu so slovenskou klávesnicou

Je veľmi jednoduché zmeniť rozloženie kláves, s ktorým bude jadro vášho operačného systému skompilované. Ak použijete program loadkeys s voľbou príkazového riadku `--mktable <keymapfile>`, tento vám vygeneruje „zdrojový kód“ súboru `<keymapfile>`. Ten uložte do súboru `drivers/char/defkeymap.c` v adresárovej štruktúre zdrojového kódu Linuxu.

    sh# cd /usr/src/linux
    sh# loadkeys --mktable sk-qwerty > drivers/char/defkeymap.c

Toto je akási náhrada za `/etc/sysconfig/console/default.kmap` s tým rozdielom, že vaše rozloženie bude zavedené už od úplného štartu systému. V prípade problémov s initscriptami (alebo štarte zo záchrannej diskety) budete mať zavedené svoje rozloženie v každom prípade. Pozor, nekompilujte si kernel so slovenským rozložením len preto, že žijete na Slovensku! Na to slúži príkaz loadkeys. Použite toto riešenie, len ak bezpodmienečne potrebujete slovenské rozloženie pri zadávaní rootovho hesla alebo tak podobne.

## 5.2. Diakritika v názvoch súborov na FAT partíciách

Ak chcete pristupovať spod Linuxu na FAT/VFAT oddiely a mať prípadnú diakritiku v názvoch súborov na takýchto partíciách, pri konfigurácii kernelu (pred kompilovaním) zvoľte tieto nastavenia v časti Filesystems->Native Language Support:

CONFIG_NLS_CODEPAGE_852 --- Codepage 852
CONFIG_NLS_ISO8859_2 --- ISO 8859-2 (Latin 2)

Pri pripájaní FAT/VFAT môžete potom uviesť voľbu `codepage=852`.

Voľba `codepage` nastavuje kódovú stránku pre prevod znakov krátkych mien na súborových systémoch FAT a VFAT. Implicitne má codepage hodnotu 437.

# 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, `<judas@linux.sk>`

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), `<ondrejj@salstar.shadow.sk>`

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, `<judas@linux.sk>`

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.4. Mandrake 8

Viď RPM4.

Ján 'judas' Tomka, `<judas@linux.sk>`

### 6.4.1. NLSPATH

Ak inštalujete aplikácie, ktorých súbory s preloženými hláseniami (*.mo) sa po inštalácii nenachádzajú v adresárovej štruktúre pod `/usr/share/locale/`, odstráňte zo súboru `/etc/profile` riadok

    export NLSPATH=/usr/share/locale/%l/%N

Vraj je ten riadok nutný pre level1 compliance for LI18NUX2000, man a staršie programy, ale kašľať na štandardy a starý šrot, keď to funguje len bez tej premennej. Samozrejme, ak vám to funguje aj s ňou, zabudnite na mňa.

V prípade, že nemôžete meniť `/etc/profile`, vložte si do svojho `~/.profile` riadok

    unset NLSPATH

### 6.4.2. SYSFONTACM

Pre správnu funkciu fontov je nutné okrem `LC_CTYPE` a `SYSFONT` nastaviť aj premennú `SYSFONTACM` v súbore `/etc/sysconfig/i18n`. No ak máte vlastný úžívateľský súbor `~/.i18n`, globálny sa nenačíta a premenná `SYSFONTACM` sa nenastaví. Preto vždy vložte do svojho užívateľského súboru riadok:

    SYSFONTACM=iso02

Na vine je skript `/etc/profile.d/lang.sh`, pretože ten pošle na terminál Escape sekvenciu zavedenia užívateľského fontu len v prípade, že je nastavená premenná `SYSFONTACM`. Tak si ju nastavte, alebo si to nejako opravte!

## 6.5. Midnight Commander

Ján Ondrej (SAL), `<ondrejj@salstar.shadow.sk>`

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, `<judas@linux.sk>`

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, `<judas@linux.sk>`

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, `<judas@linux.sk>`

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, `<judas@linux.sk>`

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), `<ondrejj@salstar.shadow.sk>`

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, `<judas@linux.sk>`

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.2. cstocs

Braňo Katreniak

Keď sa zmieňujete o tom, ako sa dá odstrániť slovenčina z dokumentu, zdá sa mi vhodné spomenúť aj program cstocs. Je to milá utilitka štandardne dodávaná s TeXom. Umožňuje konverziu súborov prakticky všetkých možných kódových stránok medzi sebou navzájom, pričom jedna z možností je aj odstránenie diakritiky. Pričom sa mi to zdá pohodlnejšie ako sed.

### 7.2.3. recode

Ján 'judas' Tomka, `<judas@linux.sk>`

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