# &kde; sisemusse piiludes

Nicolas Goutte goutte@kde.org

## Konfiguratsioonifailide redigeerimine käsitsi

### Sissejuhatus

&kde; konfiguratsioonifaile on väga lihtne redigeerida isegi lihtsa tekstiredaktoriga (näiteks &kate;), sest need kujutavad endast lihtsaid tekstifaile.

Tekstifaili näide:

    [General]
    AutoSave=1
    LastFile=/var/tmp/test.txt

Kasutajate isiklikud konfiguratsioonifailid asuvad kataloogis `.kde/share/config` (`.kde` asemel võib seista ka midagi muud vastavalt keskkonnamuutuja $`TDEHOME` määratlusele), globaalsed konfiguratsioonifailid aga &kde; paigalduse asukohas alamkataloogis `share/config` (selle asukoha leiab käsuga `tde-config --prefix`). Failinimede lõpus seisab tavaliselt rc (sellele ei eelne punkti), näiteks `kopeterc`.

Konfiguratsioonifailide redigeerimine käsitsi kujutab endast riski sinu &kde; stabiilsusele. Rakendused ei kontrolli tavaliselt konfiguratsioonifailide sisu. See tähendab, et kui midagi on valesti, ei pruugi konfiguratsioon tööle hakata ja rakendust võib tabada krahh.

### Varukoopiad

Seepärast olgu sinu esimeseks reegliks enne konfiguratsioonifaili redigeerimist teha sellest varukoopia. See on kõige mõistlikum salvestada kuhugi mujale kui kataloogi `.kde` (või muusse keskkonnamuutjaga $`TDEHOME` määratud kataloogi). Varukoopiatest on sageli kasu ka muudel juhtudel: nii võib näiteks mõni suurem krahh hävitada &kde; olulised konfiguratsioonifailid (näiteks sinu &kmail;i seadistused, mida sisaldab fail `kmailrc`). Selliseid suuri krahhe ei tohiks üldiselt küll ette tulla, aga päris välistada ei ole neid paraku ka võimalik.

### Redigeerimine

Miks peaks üldse konfiguratsioonifailides midagi muutma? Kindlasti läheb seda vaja, kui soovid rakendada KIOSK-i režiimi. Võib-olla palub mõni arendaja sul midagi proovida, mis aitaks mõne rakenduse probleeme lahendada. Vahest soovid mõnest probleemist vabaneda ilma tervet `.kde` kataloogi eemaldamata. Aga võib-olla soovid hoopis heita pilgu &kde; sisemusse.

Mis ka ei ole põhjus, oletame siinkohal, et sa tahad mingit konfiguratsioonifaili käsitsi muutma hakata.

Enne seda tuleks kindlasti kontrollida, et seda kasutav rakendus ei tööta. Kui tegemist on mõne tähtsama konfiguratsioonifailiga, oleks mõttekas redigeerimine ette võtta üldse väljaspool &kde; töökeskkonda.

Oled valmis? Tee siis failist varukoopia (seda ei tasu kindlasti unustada!), käivita meelepärane tekstiredaktor (oletame, et selleks on &kate;) ja ava fail (ava see kindlasti UTF-8 kodeeringus; &kate; näitab seda kui utf8).

Nüüd on sinu ees umbes selline fail:

    [Group]
    Key1=Value1
    Key2=Value2
    Key3=Value3

Seejärel võid seda muutma asuda (aga ole ettevaatlik!) ning siis salvestada (kontrolli taas, et salvestaksid UTF-8 kodeeringus).

Pärast seda tasub testida rakendust. Kui see ei tööta enam korralikult, sulge rakendus ja asenda muudetud fail varasemaga, millest tegid varukoopia.

### Lisainfo

- kde-for-administrators pakub rohkem infot &kde; kataloogistruktuuri koha, aidates sul leida faili, mida soovid redigeerida.

## Skriptid ja töölaud

&kde; pakub &DCOP;-i ehk töölaua kommunikatsiooniprotokolli (Desktop COmmunications Protocol) näol välja võimsa protsessidevahelise kommunikatsioonisüsteemi. &DCOP;-i abil saab kontrollida &kde; väga paljusid tahke käsurealt või enda lemmikskriptikeeles kirja pandud skriptiga. Samuti saab selle abil infot &kde; rakenduste käest: nii on mitmel &kde; meediamängijal oma meetodid, millega saab rakenduse käest hankida teavet parajasti esitatava pala kohta.

Üldiselt pakuvad kõik &kde; rakendused ühe või enamgi &DCOP;-liidese, mis omakorda pakub meetodid (või, kui sulle rohkem meeldib, siis funktsioonid), mida mõni teine rakendus võib välja kutsuda. See tähendab, et &DCOP;-i kasutamise esimene samm on leida vajalikule ülesandele sobilik meetod. Kõige lihtsam on seda teada saada &DCOP;-i meetodite graafilise kasutajaliidese kdcop abil.

Käivita kdcop &konsole;st või minikäsurealt (see on aken, mis avaneb kiirklahviga &Alt;F2 ). kdcop näitab puukujuliselt korraldatuna parajasti töötavaid rakendusi, mis pakuvad &DCOP;-liidest. Üldiselt nõuab sobiva meetodi leidmine puus mõningast otsimist, kuid tasuks tähele panna, et liides (vaikimisi) sisaldab enamasti kõige sagedamini kasutatavaid funktsioone.

Testimaks, et funktsioon teeb seda, mis vaja, tee topeltklõps kirjel setColor. Värvi `c` määramiseks klõpsa värvivalija nupul ja vali värv. Märgi kast, millega määrad, et tegemist on värviga A. Klõpsa nupule OK ning taustavärv ongi määratud.

&DCOP; meetodi kasutamiseks oma lemmikskriptikeeles võib pruukida kas &DCOP; seoseid, kui moodul tdebindings neid pakub, või kutsuda välja käsureaprogramm `dcop`. Lihtsamate vajaduste rahuldamiseks piisab lihtsalt programmi `dcop` väljakutsumisest. &DCOP; meetodi väljakutsumiseks käsurealt tuleb määrata rakendus ja liides, millele meetod kuulub, meetod ise ning argumendid kujul, mis sobib kokku shelliga.

Määrata tuleb rakendus, liides ja meetod (just selles järjekorras) ning nende järel argumendid samas järjekorras, nagu neid esitab kdcop. `dcop` pakub veel hulga võtmeid, millega võimaldab tutvuda käsk ``dcop` `--help``.

Aitab teooriast - vaatame nüüd näidet:

### Taustavärvi muutmise skript &DCOP;-iga

Käsureaprogrammi `dcop` ja pisukese Perli abiga loome lihtsa skripti, mis tasapisi vahetab töölaua tausta spektri erinevate värvide vastu.

Kõigepealt otsime rakendusega kdcop üles sobiva meetodi. Antud juhul ei ole meil palju otsida: vajalik meetod on kdesktop KBackgroundIface setColor . Argumente funktsiooni tagastustüüpi näidatakse C++ keeles. Meetodi `setColor` argumendid on värv `c`, mis määrab kindlaks uue taustavärvi, ning tõeväärtus (tõene või väär) `isColorA`, mis määrab kindlaks, kas värv on esimene või teine (sellest on abi üleminekute jaoks ja muudelgi puhkudel).

Kasutamaks meetodit `setColor` käsureal läheb meil vaja järgmist käsku:

    % dcop kdesktop KBackgroundIface setColor '#ffffff' false

Värvi määramiseks pruukisime 16-süsteemis RGB-väärtust, nagu seda kasutab &HTML;. Pane tähele, et seda ümbritsevad ühekordsed jutumärgid, et shell ei hakkaks omamoodi tõlgendama märki #.

Värvi 16-süsteemis RGB-väärtuse leidmiseks ava mõnes &kde; rakenduses värvivalija dialoog (näiteks &kcontrolcenter;es Välismus ja teemad Värvid ), vali vajalik värv ning kasuta väärtust, mida näitab tekstikast HTML.

See ongi kõik, mida me &DCOP;-ist vajame, nii et nüüd tuleb veel lihtsalt skript valmis kirjutada. Alljärgnev on (äärmiselt!) lihtne variant:

    $min=49;  # Minimum value of R, G, or B colour
    $max=174; # Maximum value of R, G, or B colour
    $step=5;  # Amount to step colour by on each step
    $sleeptime=15; # Interval in seconds between each step

    @start = ($max, $min, $min);
    @colour = @start;

    while (1) {
            foreach (0..5) {
                    my $which = $_ % 3; # Which colour (R, G or B) to change
                    my $updown = $_ % 2; # Whether to increase or decrease the colour value
                    do {
                            if ($updown == 0) { $colour[$which]+=$step; }
                            if ($updown == 1) { $colour[$which]-=$step; }
                            my $dcopcall=sprintf "dcop kdesktop KBackgroundIface setColor '#%x%x%x' true\n", @colour;
                            system($dcopcall);
                            sleep $sleeptime;
                            } while (($colour[$which] >= $min) and ($colour[$which] <= $max));
                    }
    }

Kui käivitad skripti ilma täiendavate argumentideta, vahetab see taustavärvi läbi kogu spektri seni, kuni skripti töö lõpetatakse. Voilà!

Perl ei ole mõistagi ainus keel, milles &DCOP;-i jaoks skripte kirjutada—kui eelistad shelliskripti, saab ka seda teha:

### Tausta määramine internetist

Järgnev skript hangib põhipildi koomiksist User Friendly ja seab selle töölaua taustapildiks, kasutades ära tavalisi tööriistu ja veidi &DCOP;-i abi:

    #!/bin/sh
    COMICURL=`wget -qO - http://www.userfriendly.org/static/index.html | \
              grep Latest | sed -e "s,.*SRC=\",," -e "s,\">.*,,"`
    TMPFILE=`mktemp /tmp/$0.XXXXXX` || exit 1
    wget -q -O $TMPFILE $COMICURL
    dcop kdesktop KBackgroundIface setWallpaper $TMPFILE 1

Esimene rida pärast #!/bin/sh kasutab programmi `wget` ja veidi regulaaravaldiste maagilisi võimeid hankimaks pilt koomiksi pealehekülje &HTML;-lähtekoodist. Teine ja kolmas rida tõmbavad pildi internetist ning lõpuks seab `dcop` selle taustapildiks.

## Kiirklahvide lisamine &kde;-le

Paljudel klaviatuuridel on tänapäeval lisaklahve, millele ei ole vaikimisi omistatud ühtegi toimingut.

Multimeediaklahvid tekitavad enamasti signaali ja neile saab omistada mingi kiirkorralduse nagu igale muule klahvile. Mõningaid klahve aga ei tuvastata ning nendele vajutamisel dialoogis Kiirklahvide seadistamine ei juhtu mitte midagi.

Mõnel IBM-i sülearvutil on näiteks täiendavad vasakule ja paremale osutava noolega klahvid, mis näevad välja nagu lehekülg vasakule ja lehekülg paremale.

1. Käsuga `xev` saab teada klahvide koodi. Antud juhul on neiks 233 ja 234.

2. Vali klahvisümbolid. Tervet rida sümboleid vaikimisi ei kasutata, nii et valik peaks olema päris suur. Nende nimekirja leiab failist `/usr/X11R6/include/X11/keysymdef.h` (sinu süsteemis võib see küll asuda kuskil mujal).

3. Loo oma kodukataloogi fail `.Xmodmap` ja lisa sinna järgmised read:

       keycode 233 = Next_Virtual_Screen
       keycode 234 = Prev_Virtual_Screen

4. Käivita käsk ``xmodmap` `~/.Xmodmap``

Nüüd võid uuesti käivitada käsu `xev`. Peaksid nägema, et nüüd on ka neil klahvidel oma klahvisümbolid. Seejärel on neile võimalik omistada toiminguid nagu igale muule klahvile.

## Lisainfo

- Käsu `xev` manuaalilehekülje saab avada &konqueror;is `man:/xev` või terminalis ``man` xev` sisestades.

## Uute toimingute kiirklahvide lisamine

Enamikule töölaua või rakenduste toimingutele on kiirklahvid juba eelnevalt omistatud. Kui seda aga pole või kui oled loonud mingi omaenda toimingu, siis saad ka sellele kiirklahvi määrata.

Lisaks eelmainitule võib sul tekkida tahtmine omistada senikasutamata klahv näiteks mõnele skriptile või DCOP-käsule. Me omistame siinses näites kaks lisatud klahvi (vt. adding-extra-keys), millega liikuda eelmisele või järgmisele virtuaalsele töölauale, kahele funktsioonile, milleks sul läheb vaja DCOP-i (vt. scripting-the-desktop).

Seda saab kergesti teha nii:

1. Ava &juhtimiskeskus;, vali Hõlbustus ja seal Aktiveerimistoimingud

2. Vali Uus toiming

3. Anna uuele toimingule nimi, ⪚ `Järgmine virtuaalne töölaud`

4. Vali toimingu tüübiks Kiirklahv -> Käsk/URL (lihtne)

5. Vajuta kaardil Kiirklahv nupule, millega soovid käsu käivitada. Antud juhul tuleks siis vajutada klahvi, millel on järgmise lehekülje pilt. Klahvikujutisele peaks ilmuma Next_Virtual_Screen.

6. Määra kaardil Käsu/URL-i seadistused käsk: ``dcop twin default nextDesktop``

Korda sedasama klahviga Prev_Virtual_Screen, mille puhul käsk on siis ``dcop twin default previousDesktop``.

Seejärel peaks klahvi Prev_Virtual_Screen või Next_Virtual_Screen vajutamine viima sind vastavalt eelmisele või järgmisele virtuaalsele töölauale.

Mõistagi võib mis tahes toimingule omistada mis tahes vaba klahvi.

## Lisainfo

- Põhjalikumalt selgitab seda kõik kiirklahvide (KHotKeys) dokumentatsioon, millega saab tutvuda &abikeskus;es või &konqueror;is, kui sisestada seal `help:/khotkeys`;.

- adding-extra-keys

- scripting-the-desktop

## &tdedebugdialog; - &kde; silumisväljundi kontrollimine

### Põhiasjad

&tdedebugdialog; ei ole vaikimisi &kmenu;s, see tuleb käivitada shellist või mini-käsurealt käsuga ``tdedebugdialog``. &tdedebugdialog; avab akna, milles on üles loetud kõik silumispiirkonnad. Iga piirkonna ees on märkekast, mida märkides või millest märget eemaldades saab &kde; antud osa silumisväljundi sisse või välja lülitada.

Silumispiirkonnad on järjestatud numbrite, mitte tähestiku järgi, mistõttu näiteks tdeio (127) on eespool kui artskde (400). Numbrid ulatuvad kuskile 200 000 kanti, aga reaalselt on silumispiirkondi 400. Vajaliku piirkonna leidmiseks ei pea mõistagi nimekirja läbi kerima. Dialoogi ülaosas on tekstiväli, millele saad sisestada vajaliku piirkonna nime või kas või osagi sellest. Näidatavate kirjete nimekirja hakatakse kohe filtreerima, et see vastaks sinu sisestatud tekstile - kui ⪚ kirjutad `k`, nimekiri veel väga palju ei muutu, aga näiteks `kont` peaks näitama juba ainult &kontact;i silumispiirkondi. Väga kiiresti saab silumisväljundi sisse või välja lülitada nuppudega Vali kõik ja Tühista kõik valikud, millest esimene paneb &kde; väljastama tohutut kogust silumisväljundit, teise korral see aga puudub peaaegu täielikult.

### TDEDebugDialog täisrežiimis

Täisrežiimis, mille saab avada käsuga ``tdedebugdialog` `--fullmode``, on näha ikka samad silumispiirkonnad, aga hüpikkastist saab korraga valida neist vaid ühe. Seejärel saab eraldi määrata erinevat laadi väljundi - informatsioon, hoiatus, viga ja fataalne viga - andmise või mitteandmise ning iga tüübi korral ka määrata, kuhu väljund saadetakse. Valikud on järgmised:

Fail: sel juhul tuleks sisestada ka faili nimi. See kirjutatakse sinu kodukataloogi (keskkonnamuutujaga $`HOME` määratud kataloogi).

Sõnumiboks: iga silumisteadet näidatakse infodialoogina. Selles tuleb klõpsata OK, et rakendus saaks edasi töötada.

Shell: see on vaikevõimalus. Teated saadetakse standardveaväljundisse (stderr) ning on näha kas shelliaknas, kus rakendus käivitati, või failis `.xsession-errors`.

Syslog: selle korral saadetakse kõik silumisteated süsteemse logi programmile, mis neid oma reeglite kohaselt edasi töötleb.

Puudub: selle korral ei väljastata mingeid seda tüüpi teateid.

Fataalsete vigade korral antud teadete puhul ei ole enamasti mõistlik valida puudumist või süsteemset logi, sest sel juhul sa teadet ei näe ning fataalse veaga silmitsi sattunud rakendus sulgub, ilma et et sa aimaksidki, miks nii juhtus. Seda, kas rakendus fataalsete vigade korral suletakse, saab muidugi määrata ka märkekastiga Fataalsete vigade puhul katkestatakse — vaikimisi on see sisse lülitatud. Samas on fataalse vea tekkimisel rakenduse krahh nagunii kõige tõenäolisem, mis juhtuda saab.