Slovenčina a čeština v NetBSD

Ľubomír Rintel <lkundrak@v3.sk>

Tento krátky návodík by mal slovenskému a českému užívateľovi NetBSD pomôcť preklenúť úskalia na ktoré bude narážať pri pokusoch prispôsobiť systém jeho národným zvyklostiam. Najmä ak používa textový terminál musí očakávať trochu viac roboty. Budem sa usilovať o stručnosť, aby som neopakoval veci, ktoré sú popísané v Linuxovom Slovak-HOWTO. V texte na ten dokument niekoľkokrát odkazujem a je naozaj dobrým nápadom si ho prečítať.

V dobe písania tohto textu je aktuálne vydanie NetBSD 3.0, takže príklady uvedené tu platia pre túto verziu. Je možné, že vo vašej verzií ich nebude možné použiť, ak máte inú.

K niektorým veciam pravdepodobne budete potrebovať nejaké súbory, ktoré niesú súčasťou distribúcie NetBSD. Nájdete ich tam, kde aj tento návod, resp. spolu s týmto textom zabalené v súbore netbsd-sk_cz-howto.tar

Slovíčko o kódovaní

České a slovenské znaky je možné reprezentovať niekoľkými rôznymi kódovaniami. V systéme UNIX sa tradične používa kódovanie podľa štandardu ISO 8859-2. Budeme teda predpokladať použitie tohto kódovania. Častou voľbou užívateľov X11 je kódovanie UTF-8.

Na konverziu z a do iných kódovaní používajte program iconv(1) alebo siahnite po programe GNU Recode z balíčku converters/recode.

Miestne nastavenia

Teraz si prečítajte kapitolu z Linux Slovak-HOWTO nazvanú rovnako ako tento odstavec. Je tam všetko, čo potrebujete. Národné kódy, ktoré Vás pravdepodobne budú zaujímať sú sk_SK.ISO8859-2 a cs_CZ.ISO8859-2.

Textový terminál PC

Tento odstavec sa týka iba architektúry i386. Na iných architektúrach bude postup zrejme odlišný. Uvítam, ak dakto doplní info o nich.

Väčšina nasledujúcich postupov vyžaduje ovládač terminálu wscons(4). Bolo by teda dobré sa presvedčiť, že je vo vašej konfigurácií jadra zapnutý. Pokiaľ používate jadro GENERIC, môžete si byť istí, že ho máte.

Pokiaľ chcete vaše nastavenia wscons(4) zavádzať pri štare systému, mali by ste mať kladne nastavenú premennú wscons v súbore rc.conf(5). Pokiaľ ste ju po inštalácií nemenili, tak je pravdepodobne zapnutá.

Fonty

V textovej konzole NetBSD/i386 sú znaky vždy 8 grafických bodov široké. Výška znaku závisí od módu video adaptéra vga(4). Wscons podporuje rozlíšenia s 25, 40 alebo 50 riadkami. Okrem toho ešte dokáže emulovať 24-riadkový vt100 terminál použitím módu s 25 riadkami. V nasledujúcej tabuľke sú uvedené výšky znakov pre jednotlivé rozlíšenia.

Rozlíšenie Výška znaku
80x25 8x16
80x24 8x16
80x40 8x10
80x50 8x8

Pre každé rozlíšenie existujú dva rôzne módy, podľa toho, či je možné zobraziť 256 alebo až 512 rôznych znakov. Módy s 512 znakmi sa označujú koncovkou 'bf'. Napríklad štyridsaťriadkový mód schopný zobraziť 512 rôznych znakov sa označuje "80x40bf". Použitie 512-znakového módu nedovoľuje používať viac ako 8 farieb, narozdiel od 16 farieb pri 256-znakovom.

Zavádzať fonty pre wsdisplay(4) počas behu systému umožňuje ovládač wsfont(4). Mali by sme sa najprv presvedčiť, či v konfigurácii jadra máme takýto riadok:

pseudo-device   wsfont

Samotné zavedenie fontu má na starosti utilitka wsfontload(8). Po zavedení fontu ho je ešte nutné nastaviť pre jednotlivé virtuálne terminály použitím wsconsctl(8). Napríklad takto nastavíme font zo súboru isolat2.816 na (druhom) virtuálnom termináli /dev/ttyE1:

# wsfontload -N latin2 isolat2.816
# wsconsctl -f /dev/ttyE1 -d -w font=latin2

Pre zavedenie fontu je potrebné právo zapisovať do /dev/wsfont, pre jeho nastavenie je potrebné môcť zapisovať na príslušný terminál.

Ak chceme písma zavádzať automaticky pri štarte systému, pridáme riadok do súboru wscons.conf. Pre font z príkladu o odstavec vyššie by vyzeral takto:

#       meno    šírka   výška   kódov.  súbor
font    latin2  -       16      iso     /usr/share/wscons/fonts/isolat2.816

Pravdepodobne najvhodnejším miestom pre príkazy na použitie zavedených fontov je /etc/rc.local. Tam pridáme:

LAST=4  # číslo posledného vitruálneho terminálu
for term in $(/usr/bin/seq 0 $LAST)
do
        /sbin/wsconsctl -f /dev/ttyE$term -d -w font=latin2
done

Distribučné balíčky NetBSD neobsahujú žiaden font v kódovaní ISO 8859-2, takže buď použíjeme isolat2.816 alebo si nájdeme vhodný medzi písmami určenými pre Linux a upravíme pre NetBSD, ako je uvedené v nasledujúcom odstavci. Prípadne si vytvorte vlastný font editormi z balíčka sysutils/pcvt-utils.

Linuxové fonty

V Linuxe sa najčastejšie používajú fonty vo formáte PSF (aj keď Linuxový setfont(8) zvláda aj "surové" fonty). Preto je týchto fontov dostupné relatívne veľké množstvo. V samotnom balíčku kbd je okolo 150 fontov, z nich vyše 120 vo formáte PSF. Ďalšie PSF fonty sú obsiahnuté vo voľne dostupnom balíčku fontpack. Na editáciu PSF fontov existuje dostatok nástrojov, spomeňme napríklad editor cse.

Pre použitie s wsfontload(8) je z PSF fontov získať "surový" font, a tak asi nezaškodí popis ich formátu. PSF súbor má na začiatku 4-bajtovú hlavičku, potom nasledujú samotné údaje o znakoch, a potom môžu nasledovať informácie o mapovaní znakov na na unicode. Znaky v PSF sú vždy 8 bodov široké, takže každý riadok je vyjadrený práve jedným bajtom. Fonty s mapu na unicode majú podľa konvencie koncovku .psfu, ostatné .psf.

My potrebujeme akurát odstrániť hlavičku a unicode mapu. Je dobré pritom nestratiť informáciu o výške znaku a zaznamenať ju trebárs v mene súboru. Je síce väčšinou možné ju uhádnuť z veľkosti súboru, ale vtedy si môžme zmýliť 16 bodov vysoký 256-znakový font s 512-znakovým s výškou 8. Nám sa napríklad hodí font Latin-2 font z balíčka kbd, tak z neho takto dostaneme raw font:

$ file lat2-16.psfu
lat2-16.psfu: Linux/i386 PC Screen Font data, 256 characters, Unicode directory, 8x16

Zistili sme, že má 256 znakov výšky 16 bodov, takže surový font bude 4096 mať bajtov.

dd if=lat2-16.psfu of=~/latin2.816 bs=1 skip=4 count=4096

Hotovo. Výsledný súbor ~/latin2.816 môžeme teraz zaviesť wsfontload(8) ako je už opísané vyššie. Mnohé linuxové fonty sa nachádzajú v balíčkoch kbd a consoletools-data, s náhľadom ich možno nájsť na http://v3.sk/~lkundrak/fonts/.

Mapa klávesnice pckbd

V súčasnosti (release 3.0) NetBSD nedisponuje dostatočnou funkcionalitou pre vstup Latin 2 znakov z klávesnice. V praktický dopad pre slovenského a českého užívateľa spočíva napríklad v tom, že pckbd(4) nerozoznáva mäkčeň ako diakritické znamienko, a wsconsctl(8) nepozná symbolické mená mnohých znakov s diakritikou.

Je nutné aplikovať záplaty a prekompilovať ako jadro, tak aj wsconsctl(8). K tomu potrebujeme zdrojový kód NetBSD, záplatu NetBSD-lat2.diff, prekladač gcc (z balíka comp.tgz). Postupujeme takto:

  1. Stiahneme, rozbalíme a nainštalujeme všetko potrebné
  2. Aplikujeme záplatu
    # cd /usr/src
    # patch < ~/NetBSD-lat2.diff
    
    Môže sa stať, že program patch skončí neúspešne, pokiaľ záplatu aplikujete na iné verzie súborov, ako pre ktoré bola vytvorená. V takom prípade podľa súborov s koncovkou .rej opravte príslušné súbory ručne.
  3. Preložíme a nainštalujeme wsconsctl(8)
    # cp /usr/src/sys/dev/wscons/wsksymdef.h /usr/include/dev/wscons/wsksymdef.h
    # cd /usr/src/sbin/wsconsctl
    # make USETOOLS=Yes
    # make USETOOLS=Yes install
    
  4. Preložíme jadro a systém naštartujeme s ním

Mapovanie klávesnice meníme zmenou premennej map klávesnicovej časti zariadenia konzoly príkazom wsconsctl(8). Alternatívou je uloženie jej obsahu do súboru a automatické načítanie počas štartu systému. Klávesové mapy sa obvykle nachádzajú v adresári /usr/share/wscons/keymap. Vhodná slovenská ani česká klávesnicová mapa nie sú súčasťou distribúcie NetBSD, takže použijeme niektorú z nesledujúcich:

Pokiaľ teda chceme používať klávesovú mapu uloženú v súbore a načítavať ju počas štartu systému, pridáme do súboru wscons.conf(5) takýto riadok:
mapfile /usr/share/wscons/keymaps/pckbd.sk.iso8859-2

Pokiaľ nechceme reštartovať systém len kvôli znovunačítaniu klávesovej mapy, vynútime si jej načítanie.

/etc/rc.d/wscons restart

X11

Klávesnica

Čo sa týka nastavení klávesnice spomína Linux Slovak HOWTO prakticky všetko dôležité. Snáď by ho ešte stálo za to doplniť o alternatívnej možnosti zmeny klávesovej mapy príkazom setxkbmap(1). Ten umožňuje zmeniť mapovanie počas behu X11 servra, bez zmeny konfiguračného súboru, čo sa môže hodiť keď zdieľame X11 terminál s ľuďmi s inými národnými nastaveniami. V takom prípade si len do svojho .xinitrc alebo .xsession pridáme riadok nie nepodobný tomuto:

setxkbmap -layout sk

V prípade, že máme nejaké špeciálne požiadavky, napríklad prepínať medzi viacerými mapami, nieje na škodu si zbežne prebehnúť súbor /usr/X11R6/lib/X11/xkb/README.config. Z neho sa dozvieme, že našu túžbu prepínať slovenskú a anglickú klávesnicu kombináciou shift+alt uspokojíme takto:

setxkbmap -rules xfree86 -layout "sk,us" -option "grp:alt_shift_toggle"

Toto funguje v X servri XFree86 verzie 4.5.0 a jarná únava mi efektívne bráni zistiť, ako je to v iných verziach.

Písmo

XFree86 4.5.0 v NetBSD 3.0 obsahuje písma v ISO 8859-2 kódovaní. Všetko, čo je teda potrebné spraviť je nanútiť X klientom aby tieto fonty používali. Obvykle ide o nastavenie príslušného X resourcu. To, že ktorého by mal popisovať manuál k príslušnému X klientovi, je však pravdepodobné, že sa bude volať font. Relatívne rýchlym a účinným riešením môže byť pridanie takéhoto riadku do súboru ~/.Xdefaults.

*font: -misc-fixed-medium-r-normal-*-12-*-*-*-*-*-iso8859-2

Po zmene tohto súboru treba novú databázu resourcov natiahnuť do X11 servra, a to buď reštartom servra, alebo takýmto príkazom:

$ xrdb ~/.Xdefaults

Programy využívajúce GTK knižnicu by sa mali umúdriť po pridaní nasledovného do súboru ~/.gtkrc.

style "default"
{
        font="-adobe-helvetica-medium-r-normal-*-*-120-*-*-p-*-iso8859-2"
}

class "GtkWidget" style "default"

Odkazy

Budúce revízie & TODO

Toto je revízia $Revision: 1.12 $. Akékoľvek dobré nápady, opravy chýb a podobne sú vítané.


Posledná zmena: $Date: 2013/08/22 11:16:37 $