<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-2">
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Czech HOWTO: Lokalizace textové konzole</TITLE>
 <LINK HREF="Czech-HOWTO-4.html" REL=next>
 <LINK HREF="Czech-HOWTO-2.html" REL=previous>
 <LINK HREF="Czech-HOWTO.html#toc3" REL=contents>
</HEAD>
<BODY>
<A HREF="Czech-HOWTO-4.html">Další</A>
<A HREF="Czech-HOWTO-2.html">Předchozí</A>
<A HREF="Czech-HOWTO.html#toc3">Obsah</A>
<HR>
<H2><A NAME="konzole"></A> <A NAME="s3">3. Lokalizace textové konzole</A></H2>

<P><SF>Petr Kolář
<A HREF="mailto:Petr.Kolar@vslib.cz">Petr.Kolar@vslib.cz</A>:
5.&nbsp;1.&nbsp;1999;
Pavel Janík ml. 
<A HREF="mailto:Pavel.Janik@math.muni.cz">Pavel.Janik@math.muni.cz</A>: starší verze;
a mnozí další</SF>
<P>
<P>Pro lokalizaci textové konzole je třeba nastavit ovladač klávesnice, aby
generoval kódy znaků podle požadovaného rozložení kláves, a ovladač
displeje, aby umožňoval zobrazování národních znaků včetně písmen
s&nbsp;diakritikou (s&nbsp;akcenty).
<P>
<P>Ačkoli jádro Linuxu podporuje od verze 1.3.? Unicode umožňující současné
používání nejen všech možných písmen s&nbsp;akcenty, ale i téměř všech
světových abeced, v&nbsp;současnosti stále převažuje využívání osmibitových
kódování.
<P>
<P>Pro češtinu, slovenštinu, polštinu, maďarštinu, rumunštinu, slovinštinu,
chorvatštinu, albánštinu a další východoevropské jazyky psané latinkou
je určena znaková sada ISO-8859-2, známá také pod názvem ISO&nbsp;LATIN-2.
Západoevropské jazyky naproti tomu používají kódování ISO-8859-1. Obě
tato kódování jsou rozšířením kódu ASCII a shodují se i v&nbsp;některých
dalších znacích, takže ISO-8859-2 lze používat například i pro němčinu.
<P>
<P>Přestože kódování ISO-8859-2 je pro zmíněné jazyky mezinárodním
standardem a preferovaným kódováním, v&nbsp;mnoha neunixových systémech
se používají jiná kódování; v&nbsp;MS-Windows sada Windows-1250, která se
bohužel v&nbsp;několika znacích odlišuje od ISO-8859-2, v&nbsp;systému MS-DOS, jeho
klonech i v&nbsp;DOSových oknech MS-Windows kódová stránka 852 nazývaná též PC
LATIN-2, která má ne-ASCII znaky kódovány zcela odlišně. Další kódování se
používají v&nbsp;jednotlivých zemích (v&nbsp;České republice a na Slovensku je stále
populární sada Kamenických), na jiných operačních systémech (Macintosh),
pro některá zařízení (tiskárny) i programy (kódování Cork v&nbsp;TeXu).
<P>
<P>Zatímco znaková sada ISO-8859-2 je určena pro několik jazyků,
rozložení klávesnice je pro každý jazyk jiné. Standardní česká nebo
slovenská klávesnice pro PC vycházející z&nbsp;českého psacího stroje je pro
psaní textů, v&nbsp;nichž se vyskytují speciální "počítačové" znaky, dosti
nepohodlná. Proto mnoho lidí používá různé "programátorské klávesnice",
které bohužel nejsou standardizovány a jak ukázaly diskuse v&nbsp;konferenci
<CODE>linux</CODE>, širší dohoda o jejich rozložení je téměř vyloučena.
<P>
<P>Při zkoušení klávesnice nezapomeňte, že mnoha programům je třeba
pomoci, aby pracovaly s&nbsp;osmibitovými znaky --- kapitola 
<A HREF="Czech-HOWTO-6.html#osmbit">Lokalizace různých aplikací</A>.  Problémy by neměly být s&nbsp;editorem
vi, proto nově nainstalovanou klávesnici testujte nejdříve v&nbsp;tomto
editoru v&nbsp;režimu vkládání znaků.
<P>
<P>Distribuce, kterou používáte, může mít podporu pro české prostředí
už zabudovanou. Proto je vhodné nahlédnout nejprve do kapitoly&nbsp;
<A HREF="Czech-HOWTO-14.html#distribuce">Jak počeštit různé distribuce</A> a postupy popsané
v&nbsp;následujících odstavcích zkoušet teprve pokud nenaleznete jednodušší
řešení tam.
<P>
<H2><A NAME="ss3.1">3.1 Zobrazování znaků v&nbsp;kódování ISO-8859-2</A>
</H2>

<P>ISO-8859-2 fonty pro konzolu a program setfont, kterým se zavádí,
jsou součástí balíku kbd už od dávných verzí Linuxu. Pokud v&nbsp;některé
distribuci balík kbd není, je možné jej získat například na
<A HREF="ftp://ftp.muni.cz/pub/linux/system/keyboards/kbd-0.96.tar.gz">ftp://ftp.muni.cz/pub/linux/system/keyboards/kbd-0.96.tar.gz</A>.
<P>
<P>Pro adaptéry VGA a lepší stačí zavést font příkazem
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
setfont lat2-16.psf
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>
<P>(nikoli <CODE>lat2-08.psf</CODE> výšky 8, jak je doporučováno v&nbsp;dokumentaci
k&nbsp;cs-tools), pro adaptéry EGA je vhodný font <CODE>lat2-14.psf</CODE> (může
někdo potvrdit, že na adaptéru EGA program setfont funguje?). V&nbsp;novějších
verzích kbd jsou pro ISO-8859-2 k&nbsp;dispozici ještě fonty <CODE>iso02*</CODE>.
Pokud není použit program vtfontd, zavedení fontu se projeví na všech
virtuálních terminálech (konzolách).
<P>
<H2><A NAME="ss3.2">3.2 Národní klávesnice</A>
</H2>

<P>Pokud na vašem systému není mapa české klávesnice, lze použít část balíku
cs-tools
<A HREF="ftp://ftp.muni.cz/pub/localization/linux/obsolete/cs-tools/cs-tools-0.19.tar.gz">ftp://ftp.muni.cz/pub/localization/linux/obsolete/cs-tools/cs-tools-0.19.tar.gz</A>.
Soubory <CODE>*.map</CODE> z&nbsp;adresáře <CODE>console</CODE> z&nbsp;tohoto balíku je
třeba zkopírovat do adresáře <CODE>/usr/lib/kbd/keytables</CODE>. Zvolená
mapa klávesnice se pak zavede příkazem
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
loadkeys cz-lat2
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>
<P>v&nbsp;některém ze startovacích skriptů. V&nbsp;distribuci Red Hat stačí uvést
řádek KEYTABLE v&nbsp;souboru <CODE>/etc/sysconfig/keyboard</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
KEYTABLE="cz-prog"
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>Klávesnice fungují jako americké, do českého režimu se přepnou
stisknutím klávesy Pause nebo držením klávesy AltGr (pravý Alt).
Pro zpětné přepnutí lze použít opět Pause nebo držení AltGr.
<P>
<P>Klávesnice z&nbsp;kbd údajně nefungují s&nbsp;jádry vývojové řady 2.1.x.
Na počítačích s&nbsp;vývojovými jádry je nutné používat balík ucw
popsaný dále.
<P>
<H3>Jak funguje načítání znaků z&nbsp;klávesnice?</H3>

<P>Při stisku klávesy, při držení v&nbsp;rytmu autorepeatu a při uvolnění
klávesy generuje klávesnice na počítačích PC přerušení IRQ 1. Jádro
načítá z&nbsp;portu 0x60 tak zvané scankódy kláves, což je jeden nebo celá
posloupnost bytů. Například při stisku klávesy 'q' bude načteno 0x10
(16 desítkově), při uvolnění kód o 0x80 větší, tedy 0x90. Některé
klávesy, jako např. Delete posílají dvoubajtové escape-scankódy 0xe0,
0xNN, klávesa Pause posloupnost 0xe1, 0x1d, 0x45. Jádro nejdříve
scankódy převádí na tak zvané keykódy (funkce getkeycode
v&nbsp;<CODE>drivers/char/keyboard.c</CODE> --- docela zajímavé čtení). Toto
mapování lze měnit i na uživatelské úrovni, ale to má význam
snad jenom při používání exotického hardware. Pro národní klávesnice je
zajímavé další mapování, při němž se keykódy převádějí na kódy znaků.
Od jádra verze 0.99pl10 lze implicitní mapu
<CODE>drivers/char/defkeymap.map</CODE> měnit.
<P>
<H2><A NAME="ucw"></A> <A NAME="ss3.3">3.3 Alternativa: Balík ucw-cs-1.1.tar.gz</A>
</H2>

<P>Tento balík využívá schopnosti jádra Linuxu pracovat se znaky v&nbsp;kódování
Unicode. Pro zobrazování se používá zvláštní textový režim adaptérů
EGA/VGA, který umožňuje současně zobrazit 512 různých znaků. Jako
devátý bit kódu znaku se používá bit 3 barevných atributů. Tak je možné
zobrazovat všechny znaky podle kódování ISO-8859-1 i ISO-8859-2 současně
s&nbsp;rámečky, které mohou být na pozicích 0xB0 až 0xDF, pro něž adaptér VGA
zdvojuje levý sloupec, aby byla šířka znaku 9 bodů. V&nbsp;budoucnosti by měl
být použit grafický režim.
Díky tomu se tento balík elegantně vyrovnává s&nbsp;problémy popsanými v&nbsp;kapitole
<A HREF="#ramecky">Rámečky v~programech MC &amp; spol. se zobrazují špatně</A>.
<P>
<P>Balík se nachází na
<A HREF="ftp://atrey.karlin.mff.cuni.cz/pub/local/mj/linux/ucw-cs-1.1.tar.gz">ftp://atrey.karlin.mff.cuni.cz/pub/local/mj/linux/ucw-cs-1.1.tar.gz</A>,
jeho popis je na 
<A HREF="http://atrey.karlin.mff.cuni.cz/~mj/linuxcs/">http://atrey.karlin.mff.cuni.cz/~mj/linuxcs/</A>.
Po rozbalení balíku se přepněte do adresáře <CODE>ucw-cs-1.1</CODE> a zadejte
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
install -c -o root -g root -m 644 fonts/* /usr/lib/kbd/consolefonts
install -c -o root -g root -m 644 keymaps/* /usr/lib/kbd/keytables
install -c -o root -g root -m 755 mapscrnuni/mapscrnuni /usr/local/bin
install -c -o root -g root -m 644 mapscrnuni/latin2.table /usr/lib/kbd/consoletrans
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>
<P>do startovacích skriptů <CODE>/etc/rc*</CODE> je nutné přidat příkazy
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
setfont ucw16.psf
mapscrnuni &lt; /usr/lib/kbd/consoletrans/latin2.table
loadkeys cs-head cz-type cs-compose
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>
<P>a do souborů <CODE>/etc/profile</CODE> a <CODE>/etc/csh.cshrc</CODE> nebo
<CODE>$HOME/.bashrc</CODE> a <CODE>$HOME/.cshrc</CODE>, případně do
<CODE>/etc/issue</CODE> je nutné přidat příkaz, který zajistí přepnutí na
uživatelské mapování obrazovky:
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
/bin/echo -en "\033(K"
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>
<P>Pokud se při spuštění programu loadkeys objeví chybové hlášení jako
<P>
<BLOCKQUOTE><CODE>
<PRE>
Keymap 12: Permission denied
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>je nutné zadat tento příkaz jako root. Zdá se, že loadkeys spuštěný
obyčejným uživatelem neumí zvětšit konverzní tabulku pro klávesnici
v&nbsp;jádře, a výsledkem je zmíněné hlášení.
<P>
<P>Balík je zajímavý tím, že mapa klávesnice je rozdělena do několika
souborů, které příkaz <CODE>loadkeys </CODE> spojí a zavede jako jednu mapu.
Na místě <CODE>cz-type.map</CODE> (český psací stroj) lze použít
<CODE>cs-ucw.map</CODE> (písmena s&nbsp;akcenty se píšou se stisknutým Caps Lock),
<CODE>cz-prog.map</CODE> (česká programátorská), <CODE>sk-type.map</CODE>
(slovenský psací stroj) nebo <CODE>sk-prog.map</CODE> (slovenská
programátorská), podle toho, komu co vyhovuje.
<P>
<H2><A NAME="ss3.4">3.4 Tipy a problémy</A>
</H2>

<H3>Vypadnutí fontu při přepnutí do X a zpět</H3>

<P>U některých X-serverů dojde při přepnutí z&nbsp;virtuálního terminálu do
X a zpět k&nbsp;vypadnutí konzolového fontu. Situaci lze řešit opětovným
ručním zavedením fontu, nebo je možné použít program vtfontd -
<A HREF="ftp://ftp.excom.spb.su/pub/linux/Utils/Console/vtfontd-1.0.1.tar.gz">ftp://ftp.excom.spb.su/pub/linux/Utils/Console/vtfontd-1.0.1.tar.gz</A>,
který také umožňuje používat na jednotlivých konzolách různé fonty.
<P>
<H3>V Midnight Commanderu nelze přepínat fonty</H3>

<P>Inu tento problém vlastně ani není problémem, je to samozřejmost,
protože v&nbsp;mc nejsme na virtuální konzole, ale na normálním terminálu
ttypx, tudíž nemáme právo použít ioctl PIO_FONT, protože nejsme ani
vlastníkem tty, ani superuživatelem (<CODE>drivers/char/vt.c</CODE> řádek
212 --- opět velmi zajímavé čtení).
<P>
<H3><A NAME="ramecky"></A> Rámečky v&nbsp;programech MC &amp; spol. se zobrazují špatně</H3>

<P>Při používání některých programů (jako například Midnight Commanderu)
bývají problémy se zobrazováním rámečků. U Midnight Commanderu je možné
použít parametr <CODE>-a</CODE>, který způsobí, že mc bude pro zobrazování
rámečků používat ASCII znaky <CODE>+</CODE>, <CODE>-</CODE> a <CODE>|</CODE>, což sice
nepůsobí příliš esteticky, ale je to rozhodně lepší, než když se místo
rámečků zobrazují písmena.
<P>
<P>Vzhledem k&nbsp;tomu, že programy používající čárovou grafiku jako MC nebo
MenuConfig jádra, jsou po nainstalování českých fontů na textovou konzolu
Linuxu nečitelné, je nutné použít font, který tyto rámečky obsahuje, a
upravit nastavení databází termcap a terminfo. Již upravené databáze
jsou ke stažení na URL
<A HREF="http://linux-cz.inecnet.cz/ftp/mc/">http://linux-cz.inecnet.cz/ftp/mc/</A>.
<P>
<P>Tyto databáze je nutno zkopírovat <CODE>termcap</CODE> do <CODE>/etc/termcap</CODE>
a <CODE>terminfo</CODE> do <CODE>/usr/lib/terminfo/l/linux</CODE> a znovu se
přihlásit. Ke konverzi mezi zdrojovou a binární podobou
terminfo slouží příkazy infocmp a tic. I potom mohou být problémy
způsobené tím, že u videoadaptéru VGA jsou znaky s&nbsp;kódy 0xB0 až 0xDF
vyhrazeny pro rámečky a VGA při zobrazování zdvojuje pravý sloupec každého
z&nbsp;těchto znaků, aby se dosáhlo šířky znaku 9 pixelů, ale u znakových sad
ISO-8859-2 jsou na těchto pozicích běžné znaky. Elegantním řešením je
použití unikódových fontů Pavla Mareše popsaných v kapitole 
<A HREF="#ucw">ucw</A>
.
<P>
<H3>Snadné přepínání češtiny a angličtiny</H3>

<P>Pokud nepoužíváte klávesnici, která umožňuje přepínání mezi dvěma režimy
(čeština nebo slovenština a angličtina), můžete pro přepínání používat
následující dva skripty, které zajistí i přepnutí fontů.
<P>
<UL>
<LI>Cz:
<BLOCKQUOTE><CODE>
<PRE>
loadkeys cz-lat2
setfont lat2-16.psf
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI>Us:
<BLOCKQUOTE><CODE>
<PRE>
loadkeys us
setfont
</PRE>
</CODE></BLOCKQUOTE>
</LI>
</UL>
<P>
<P>Skripty budou samozřejmě fungovat pouze tehdy, budete-li mít nainstalovánu
podporu národní klávesnice a ISO-8859-2 znaky pro konzolu. Přitom je nutné
pamatovat, že zatímco klávesnice se přepíná pouze pro jednu virtuální
konzolu, fonty (není-li použito vtfontd) se přepínají pro všechny.
<P>
<H3>Český text je i po nastavení správného fontu nečitelný</H3>

<P>Příčinou může být, že text je v&nbsp;jiném kódování. Text je třeba
překódovat pomocí utility cstocs popsané v&nbsp;kapitole 
<A HREF="Czech-HOWTO-10.html#cstocs">cstocs</A> do kódování ISO-8859-2 a poté jej prohlížet a editovat
standardním způsobem. Nebo případně, vznikl-li tento font na jednom
z&nbsp;Billových produktů, můžete použít k&nbsp;prohlížení font upravený tak, aby
zobrazoval správně české znaky, jak v&nbsp;kódování CP1250 (Windoze), tak i
ISO-8859-2 (unixové OS). Tento font opět najdete někde na
<A HREF="ftp://ftp.inet.cz/">ftp://ftp.inet.cz/</A>.
<P>
<H3>Lepší konzolové fonty</H3>

<P>Vzhled fontů z&nbsp;balíku kbd je dost špatný, velká písmena s&nbsp;akcenty jsou
nižší než bez akcentů, pokud si chce někdo vytvořit vlastní font, může
mu pomoci tento popis:
<P>
<P>Soubory s&nbsp;fontem jsou umístěny v&nbsp;<CODE>/usr/lib/kbd/consolefonts</CODE>.
Používají se dva formáty těchto souborů, formát psf, který je popsán
v&nbsp;souboru 
<A HREF="file:/usr/lib/kbd/consolefonts/psffiles.doc">file:/usr/lib/kbd/consolefonts/psffiles.doc</A>, a ještě
jednodušší formát, který nepoužívá žádnou hlavičku, a soubory obsahují
prostě obrazy všech 256 znaků uložených v&nbsp;pořadí podle kódů znaků.
Pro každý znak z&nbsp;fontu je v&nbsp;souboru tolik bytů, kolik bodů je výška
fontu (včetně volných řádků nahoře a dole; nejčastěji 8 až 16 bodů),
první byte odpovídá hornímu řádku znaku. Každý znak má šířku 8 bodů,
nejvyšší bit se zobrazuje vlevo.
<P>
<P>Je také možné použít editor fontů chedit, který se nachází na
<A HREF="ftp://ftp.fi.muni.cz/pub/linux/apps/misc/chedit.tar.gz">ftp://ftp.fi.muni.cz/pub/linux/apps/misc/chedit.tar.gz</A>.
Je poněkud zastaralý a umí editovat pouze fonty ve formátu psf.
<P>
<H3>Změna qwerty na qwertz</H3>

<P>Obě české klávesové mapy, tedy <CODE>cz-lat2.map</CODE> i
<CODE>cz-lat2-prog.map</CODE>, mají standardní rozložení qwerty, jste-li
zvyklí na rozložení qwertz, není nic jednoduššího než zaměnit písmenka
'y' a 'z' v&nbsp;klávesové mapě, tedy v&nbsp;souboru <CODE>cz-lat2.map</CODE>, případně
<CODE>cz-lat2-prog.map</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
...
keycode 21 = z
...
keycode 44 = y
...
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H3>Jediný dvojhmat z&nbsp;Woken, který znám, je Alt+Shift...</H3>

<P>Ano, tento dvojhmat je mým prvním stisknutím klávesnice, jestliže jsem nucen
sedět u počítače s&nbsp;Billovým OS. (Doufám, že se autoři skutečných operačních
systému neurazí.) Slouží k&nbsp;přepnutí se mezi primární a sekundární
klávesnicí. Pro některé skalní příznivce firmy SoftMicro jsem přichystal
úpravu <CODE>cz-lat2.map</CODE>:
<P>
<P>upravíme řádek s&nbsp;keycode 42 (klávesa Shift)
<P>
<BLOCKQUOTE><CODE>
<PRE>
keycode 42 = Shift Shift Shift Shift Shift Shift Shift Shift AltGr_Lock\
 Shift AltGr_Lock Shift Shift Shift Shift Shift Shift
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>...vše samozřejmě na jednom řádku. Potom již bude kombinace LeftShift+LeftAlt
fungovat stejně jako klávesa Pause, tedy pro přepínání klávesnic.
<P>
<H3>Zdroje</H3>

<P>
<UL>
<LI>
<A HREF="ftp://ftp.muni.cz/pub/localization/linux/obsolete/cs-tools/">ftp://ftp.muni.cz/pub/localization/linux/obsolete/cs-tools/</A>
Balík české podpory pro Linux cs-tools, z&nbsp;větší části zastaralý.</LI>
<LI>
<A HREF="ftp://sunsite.unc.edu/pub/Linux/system/">ftp://sunsite.unc.edu/pub/Linux/system/</A>
Balík kbd --- programy chvt, dumpkeys, getkeycodes, loadkeys, mapscrn,
setfont, setkeycodes a další. Spousta fontů a klávesových map.</LI>
<LI>
<A HREF="ftp://ftp.inet.cz/pub/UNIX/">ftp://ftp.inet.cz/pub/UNIX/</A>
Různé fonty --- mc.psf (font pro MC), font.winux (CP1250+IL2)</LI>
</UL>
<P>
<H3>Použité materiály</H3>

<P>
<UL>
<LI>Zpravodaj ÚVT MU, březen 1994: Pavel Ševeček --- Ufff, zase ta čeština!
Luděk Matyska --- Čeština v&nbsp;Unixu</LI>
<LI>Manuálové stránky console, console_ioctls, dumpkeys, getkeycodes,
keytables, loadkeys, setfont, setkeycodes, showkey</LI>
<LI>Dokumentace balíků cs-tools a kbd.</LI>
<LI>Vlastní zkušenosti.</LI>
<LI>Zdrojové texty Linux 2.0.29 --- Here you can find virtually everything
you'd like to know.</LI>
</UL>
<P>
<HR>
<A HREF="Czech-HOWTO-4.html">Další</A>
<A HREF="Czech-HOWTO-2.html">Předchozí</A>
<A HREF="Czech-HOWTO.html#toc3">Obsah</A>
</BODY>
</HTML>