Hrvatska slova u X Window Systemu i latin2 printanje u Linuxu: Dobijanje našeg rasporeda tipkovnice u X-ima

## 2. Dobijanje našeg rasporeda tipkovnice u X-ima

Vjerojatno imate QWERTZ, hrvatski odnosno slovenski raspored tipkovnice. Ako ne, poslužit ce i naljepnice s našim slovima.

Ukoliko na konzoli želite zadržati npr. postojeći američki raspored tipkovnice, ili slova odmah želite probat u X-ima skinite slovenski xmodmap s ftp://sizif.mf.uni-lj.si/pub/i18n/Xmodmap.sl.pc102. Naravno, morat ćete ga malo modificirat, a kako ja osobno ovaj način ne preferiram neću dalje objašnjavati. Pređimo na Plan B :))).

Najprije, sredimo raspored na konzoli. Držite se Domikulićevih savjeta na http://linux.hr/iso/. Ne bi trebalo biti većih problema.

Vjerojatno ćete trebat komandi setfont dodat -u switch za pravilan prikaz grafičkih simbola na konzoli. To bi npr. glasilo:

`setfont /usr/share/consolefonts/lat2-14.psf -u lat1.uni`

Zapnete li, pogledajte neke od mojih fajlova.

Uspjeli ste ? OK. Home, Delete, BackSpace, End rade na konzoli? Super. Prelazimo na X-e. Instalirajmo X fontove i stvar bi trebala raditi. Ne? No dobro, na adresi ISO 8859-2 Resources nabrojane su među ostalim i lokacije za download X fontova. Novije Linux distribucije uglavnom dolaze sa svim potrebnim screen latin2 fontovima.

Kompletnu kolekciju 'blizanaca' svakog iso8859-1 fonta u latin2 obliku možete skinuti s http://www.biz.net.pl/english/x-fonts/licence.html (ne trebate ništa upisati, stisnite send). Fontove mozete skinuti u bdf, pcf ili pcf.Z obliku. Najbolje u ovom trećem, kompresiranom (noviji Xserveri mogu baratati kompresiranim fontovima).

Pogledajte u Files section vašeg XF86Configa gdje vam je FontPath za X fontove. Kod mene na Debianu je `/usr/X11R6/lib/X11/fonts`. Stvorite poddirektorij za latin2 fontove i u njemu raspakirajte arhivu. Dobit ćete nova tri poddirektorija. Sva tri unesite na vrh (bitno) FontPatha u XF86Configu.

Ako su vam fontovi pcf oblika, možete (ne morate) ih kompresirati s

`compress *.pcf` (dobijete pcf.Z oblik), ja sam koristio

`gzip *.pcf` .

Pored fontova, u svakom direktoriju morate imati fonts.dir fajl. Bilo da u direktorij dodajete novi font ili fontovima mijenjate imena (kompresiranjem npr.) obvezno nakon toga slijedi naredba

`mkfontdir`

Ako su fontovi u bdf obliku, konvertirajte ih. Skripta za konverziju u Slovenian HOWTO meni ne radi, pa sam modificirao jednu dobivenu preko Altaviste i nazvao je `fontkonv`.

    #!/bin/sh
    #skripta za bdftopcf.gz
    convert='bdftopcf $file | gzip > `basename $file .bdf`.pcf.gz'
    for file in *.bdf; do
      eval $convert
    done
    mkfontdir
    xset fp rehash || echo 'Type   "xset fp rehash"   if running from X-session'

`xset fp rehash` potreban je da ne bi morali restartat X-e.

Svaki novodobiveni direktorij može imati i fonts.alias datoteku. Najvjerojatnije ćete nove fontove htjeti isprobati u xtermu. Meni se svidio fiksni font `etl16-IL2.pcf.gz` (dolazi u `xfntil2` paketu), pa uglavnom njega koristim kao fiksni screen font pod xtermom i familijom. Možete ga skinuti http://members.xoom.com/markovicr/etl16-IL2.bdf modificiranog za slrn u X-ima (offline newsreader kojeg kad sam u X-ima koristim pod rxvt-om). U Navigatoru stisnite Shift i kliknite na link radi lakšeg snimanja.

Dakle,

    bdftopcf -o etl16-IL2.pcf etl16-IL2.bdf
    gzip etl16-IL2.pcf
    cp etl16-IL2.pcf.gz /usr/X11R6/lib/X11/fonts/misc-il2/
    xset fp rehash

U mojoj `/usr/X11R6/lib/X11/fonts/misc-il2/fonts.alias` datoteci ubačeno je:

`moj -etl-fixed-medium-r-normal--16-160-72-72-c-80-iso8859-2`

Zadajte naredbu

`xfd -fn moj`

i primjetit ćete male izmjene na fontu (rađene primitivno :-), bez `xmbdfed`-a).

Sad možete npr. startati xterm:

`xterm -fn moj`, ili bolje, stavit u `~/.Xdefaults` (ja koristim `/etc/X11/Xresources`) među ostalim:

`XTerm*font: moj`. (bez tocke :))

Dakle, imate naša slova na konzoli, propisno ste instalirali X latin2 fontove, pokrenuli xterm i - nema naših slova :(.

Unutar Keyboard sectiona vašeg `/etc/XF86Config` probali ste s `XkbLayout` ili `XkbKeymap` razne stvari, bez uspjeha. Ovakav način dobijanja hrvatskog rasporeda tipkovnice u X-ima bio bi treći i najlakši, nadajmo se da će u budućnosti doći i do toga.

Dakle, budući da Plan C zasad ne postoji :), vratimo se Planu B. Po defaultu u Keyboard sectionu imamo:

`# To disable the XKEYBOARD extension, uncomment XkbDisable.
# XkbDisable`

Da, otkomentirajte XkbDisable i eto rješenja. Dobijaju se naša slova u xtermu. Doduše, mala nuspojava (barem kod mene) jest da komentar u XF86Config koji se odnosi na ServerNumLock možemo zanemariti, ali to je već drugi problem.

Vjerojatno vam neće baš sve tipke simulirati konzolu (kvačice hoće :)). Ovdje uskače u pomoć jedan jako koristan utility - `xmodmap`. Startajte `xev` iz xterma i pogledajte keycode problematične tipke. Zatim tom keycodeu dajte željeni keysumname.

Ja sam npr. u svom globalnom /etc/X11/Xmodmapu imao upisano (nemam više ovakav Xmodmap, nego jedan kompliciraniji za objasnit i prilagođeniji meni najstabilnijem rođaku xterma - rxvt-u):

    ! /etc/X11/Xmodmap
    !
    ! This is the global Xmodmap file.  It is used by both xdm and xinit.
    keycode 22 = BackSpace
    keycode 86 = plus
    keycode 112 = slash
    keycode 63 = asterisk
    keycode 82 = minus

Prvi red je da bi BackSpace brisao ulijevo, drugi - moram eksplicitno reći da želim plus, ne zarez na num. dijelu tipkovnice (vidim da mnogima daje zarez). Posljednja tri retka odnose se na KP_Divide, KP_Multiply i underscore na num. dijelu tipkovnice. Premda ove tri tipke daju jednake znakove onima na nenum. dijelu tipkovnice, ja sam im udijelio i imena s tog dijela tipkovnice. Tako izbjegavam ponekad čudno ponašanje ovih tipki u lessu, dselectu ili ncftpu npr.

Još jedna sugestija. Onaj dio na Domikulićevoj stranici o Home, End, Delete i BackSpace u Xtermu kod mene ne uspijeva. Dugo sam koristio pod `/etc/X11/Xresources`:

    *VT100.Translations: #override <Key>BackSpace: string(0x7F)\n\
                  <Key>Delete:        string(0x1b) string("[3~")\n\
                  <Key>Home:          string(0x1b) string("[1~")\n\
                  <Key>End:           string(0x1b) string("[4~")\n\
                  Ctrl<Key>Prior:     string(0x1b) string("[40~")\n\

Trenutno koristim ovakav oblik (razni su razlozi zašto):

    XTerm*VT100.Translations: #override <Key>Delete: string("\033[3~")\n\
                                   <Key>Home: string("\033OH")\n\
                                   <Key>End: string("\033OF")

Nažalost, čini se daleko dan kad će na Unixima biti unificiran keyboard policy, također xterm i rođaci ne funkcioniraju baš 100 % stabilno, tako da, kad su osjetljivije stvari u pitanju uvijek editiram na konzoli. Naime znaju se desiti pojave poput 'letter droppings'. Napravite npr. mali test. Editirajte u npr. xtermu neku nevažnu dugačku datoteku i držite Delete stisnuto. Ukoliko vam se nakon brisanja dvadesetak redaka ne desi ništa neuobičajeno, tada vam je xterm dosta stabilan.

Relativno nova i izvrsna stranica o stanovitim problemima s tipkovnicom (želite li editor pod xtermom, a da mu propisno rade Home, End, BackSpace i Delete, te da pokazuje naša slova - koristite joe :)) je Adjusting Keyboard Behavior.

## 2.1 My Files

    /etc/init.d/mojlocal
    --------------------
    #!/bin/sh
    # /usr/X11R6/bin/xfstt --res 96 --encoding iso8859-2 &
    setfont /usr/share/consolefonts/lat2-14.psf -u lat1.uni
    echo "Postavljen font lat2-14.psf!"
    # Audio Excel inicijaliziraj CD
    modprobe sb
    /root/cminit -cd 1 -loud 1
    #aumix -c 70
    for t in 1 2 3 4 5 6 7 8
    do
    setleds +num </dev/tty$t> /dev/null
    done

    /etc/profile
    ------------
    # /etc/profile: system-wide .profile file for bash(1).
    stty -istrip
    echo -ne '\033(K'
    INPUTRC=/etc/inputrc
    LESSCHARSET=latin1
    LESSCHARDEF="8bcccbcc18b95.33b."
    PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/sbin:/sbin:/usr/local/sbin
    #PS1="\h \w\\$ " bivsi prompt
    PAGER=less
    LESS="-rMcw"
    EDITOR="joe -asis"
    VISUAL="joe -asis"
    NNTPSERVER=news.tel.hr
    GLOBIGNORE='.:..'
    # NNTPSERVER=bagan.srce.hr
    export PATH PAGER INPUTRC LESSCHARSET LESSCHARDEF LESS EDITOR VISUAL NNTPSERVER
    ulimit -c unlimited
    umask 022

    ~/.bash_profile - user login shell
    ---------
    MOZILLA_HOME=/usr/local/netscape
    NPX_PLUGIN_PATH=/usr/local/netscape/plugins
    MINICOM='-m -c on'
    alias ll="ls --color -alFN"
    alias l="ls --color -aFN"
    alias joe="joe -asis -nobackups"
    alias cp="cp -ip"
    alias mv="mv -i"
    alias rm="rm -i"
    alias mfe="mount /floppy"
    alias umf="umount /floppy"
    alias x="startx"
    alias x8="startx -- :1 -bpp 8"
    # alias uspan="tar -xvMf /dev/fd0"
    alias f="fetchmail -v"
    alias s="slrn --spool -C"
    alias sp="slrnpull"
    alias pine="picofix pine"
    if [ $TERM = "rxvt" ] ; then
        PS1='\[\e[01;35m\]\h \[\e[01;33m\]\$\[\e[00m\] \[\e]0;\w\007\]'
    else
        PS1='\[\e[01;35m\]\h \[\e[01;34m\]\w\[\e[01;35m\]\$\[\e[00m\] '
    fi
    export PS1 MOZILLA_HOME NPX_PLUGIN_PATH MINICOM

    ~/.bashrc - user non-login shell
    ---------------------------------
    # ~/.bashrc: executed by bash(1) for non-login shells.
    source ~/.bash_profile
    source /etc/profile

    /etc/printcap
    ----------------
    #       @(#)etc.printcap        5.2 (Berkeley) 5/5/88
    #
    # > This file was generated by /usr/sbin/magicfilterconfig. <
    #
    lp|lj|hplj4l|HP Laserjet 4L:\
            :lp=/dev/lp1:sd=/var/spool/lpd/hplj4l:\
            :sh:pw#80:pl#72:px#1440:mx#0:\
            :if=/etc/magicfilter/ljet4-filter:\
            :af=/var/log/lp-acct:lf=/var/log/lp-errs: