# Длубаємося у нутрощах &kde;

Nicolas
Goutte
goutte@kde.org

## Редагування файлів налаштування вручну

### Вступ

У &kde; файли налаштування дуже просто змінити за допомогою простого редактора на зразок &kate;, оскільки файли налаштування є текстовими файлами.

Приклад текстового файла:

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

Файли налаштувань окремого користувача зберігаються у каталозі `.kde/share/config` (замініть `.kde` значенням вашого параметра $`KDEHOME`), а глобальні файли налаштувань у підкаталозі `share/config` шляху встановлення &kde;. (Ви можете визначити цей каталог за допомогою даних, виведених командою `kde4-config --prefix`.) Назви таких файлів налаштувань типово закінчуються на rc (без крапки), наприклад, `kopeterc`.

Редагування файлів налаштувань вручну може завдати шкоди стабільності вашої системи &kde;. Програми, зазвичай, не перевіряють дані, прочитані з файлів налаштування. Це означає, що програми можуть працювати з вказаними налаштуваннями нестабільно і можуть навіть аварійно завершувати роботу.

### Резервні копії

Отже, першим вашим правилом має бути створення резервної копії файла перед тим, як ви зміните його. Резервну копію краще зберігати поза межами будь-якого з підкаталогів `.kde` (або відповідного каталогу $`KDEHOME`). Створення резервних копій завжди чудова річ: у випадку значних пошкоджень системи &kde;, які знищать важливі файли налаштувань, ви зможете їх відновити (наприклад, ваші параметри &kmail;, які зберігаються у файлах `kmailrc`). (Таких значних пошкоджень не повинно бути, але вони все ж трапляються.)

### Редагування

Отже, чому взагалі може виникнути потреба у зміні файлів налаштування? Добре, по-перше така потреба може виникнути у разі примусового вмикання режиму KIOSK. Можливо, про таку зміну вас може попросити розробник, якому додавання запису до файла налаштувань може допомогти вирішити проблему з програмою. Можливо, ви захочете позбутися проблеми без вилучення всього каталогу `.kde`. А можливо, ви забажаєте краще вивчити нутрощі &kde;.

Якими б не були причини таких дій, за бажання ви можете вручну змінити файл налаштування.

Якщо ви плануєте змінити вміст такого файла, не забудьте завершити роботу програми, яка використовує цей файл налаштування. Якщо цим файлом є один з файлів, у якому зберігаються основні налаштування середовища, спробуйте змінити його, доки &kde; не запущено.

Готові? Отже, зробіть резервну копію цього файла (ну, ми вже про це говорили?), запустіть ваш улюблений текстовий редактор (нехай це буде &kate;), завантажте ваш файл (не забудьте скористатися при цьому кодуванням UTF-8, у &kate; йому відповідає пункт utf8).

Отже, ви маєте побачити вміст файла:

    [Група]
    Ключ1=Значення1
    Ключ2=Значення2
    Ключ3=Значення3

Тепер ви можете змінити вміст файла (обережно!) і зберегти його (не забудьте знову скористатися UTF-8).

Після цього ви можете випробувати програму і, якщо програма більше не запускається належним чином, закрийте програму і відновіть файл налаштування з резервної копії.

#### Супутня інформація

- містить докладніші відомості щодо структури каталогів &kde;, які допоможуть вам знайти файл, який вам слід змінити.

## Написання скриптів для стільниці

У &kde; існує потужна система обміну даними між процесами, &DCOP;, Desktop COmmunication Protocol (протокол обміну даними стільниці). За допомогою &DCOP; ви можете керувати широким набором функцій &kde; з командного рядка або за допомогою скрипту, написаного вашою улюбленою скриптовою мовою. За допомогою цієї системи ви також можете отримувати дані з програм &kde;: наприклад, у деяких програвачах &kde; передбачено методи для надсилання запитів до програвача щодо відомостей про поточну композицію, що відтворюється.

Загалом кажучи, у кожній з програм &kde; передбачено один або декілька інтерфейсів &DCOP;, у яких у свою чергу передбачено методи (або, якщо ви забажаєте, функції), які можуть викликати інші програми. Отже, першим кроком у використанні &DCOP; є визначення відповідного методу для завдання. Найпростішим способом визначити ці методи є використання оболонки kdcop, яка надає доступ до всіх можливих методів &DCOP;.

Запустіть kdcop з &konsole; або міні-командного рядка (вікна, яке можна відкрити за допомогою комбінації клавіш &Alt;F2 ). У вікні програми kdcop буде показано поточні запущені програми з інтерфейсами &DCOP; у вигляді деревоподібної структури. Загалом, для визначення потрібного методу потрібен певний пошук у цій структурі, корисною підказкою є те, що інтерфейс (типовий) зазвичай містить найчастіше використовувані функції.

Щоб перевірити, що функція виконує саме ті функції, які потрібно, наведіть вказівник на запис, наприклад, setColor і двічі клацніть лівою кнопкою миші. Щоб встановити колір `c`, натисніть кнопку інструменту вибору кольору і виберіть колір. Вкажіть, чи має бути колір використано як колір A за допомогою поля для позначки. Натисніть кнопку Гаразд і програма встановить колір тла.

Щоб отримати доступ до методу &DCOP; з вашої улюбленої скриптової мови, ви можете або скористатися прив’язками &DCOP;, якщо такі прив’язки доступні у модулі kdebindings, або викликати програму, що працює з командного рядка, `dcop`. Для простого використання достатнім буде виклик `dcop` з командного рядка. Щоб викликати метод &DCOP; з командного рядка, ми повинні вказати програму і інтерфейс, батьківський для цього методу, саму назву методу і аргументи у формі, прийнятній для оболонки.

Слід вказувати програму, інтерфейс і метод саме у такому порядку, а потім аргументи у порядку, у якому їх буде показано у kdcop. `dcop` має багато інших параметрів: погляньте на дані, виведені програмою ``dcop` `--help``.

Ну от, досить теорії, час перейти до прикладів:

### Скрипт зміни кольору тла за допомогою &DCOP;

За допомогою програми командного рядка `dcop` і декількох команд мовою Perl, ми створимо простий скрипт, який повільно змінюватиме тло стільниці у циклічному порядку за певним набором.

Спочатку ми знайдемо відповідний метод за допомогою kdcop. У нашому прикладі ми не будемо довго шукати метод, а одразу вкажемо його: метод, який нам потрібен, — це kdesktop KBackgroundIface setColor . Аргументи і тип даних, який буде повернуто функцією, буде показано у стилі мов C++. Для `setColor` аргументами є колір, змінна `c`, за допомогою якої буде вказано новий колір тла, і булівське значення (true або false), змінна `isColorA`, яка визначає те, чи буде колір першим, чи другим (це корисно для створення градієнтів тощо).

Щоб використати наш метод `setColor` у командному рядку, ми виконаємо таку команду:

    % dcop kdesktop KBackgroundIface setColor '#ffffff' false

Щоб вказати колір, ми скористалися шістнадцятковим значенням RGB, яке використовується у &HTML;. Зауважте, що це значення слід вказувати у одинарних лапках, щоб екранувати # від оболонки.

Щоб визначити шістнадцяткове значення кольору RGB, відкрийте будь-яке діалогове вікно вибору кольорів у програмі &kde; (наприклад, діалогове вікно Центру керування на сторінці Вигляд та теми Кольори ), оберіть бажаний колір і скористайтеся значенням, вказаним на панелі HTML.

Отже, це все, що нам потрібно від &DCOP;; тепер нам всього лише потрібно написати потрібний скрипт. Ось (дуже!) груба реалізація:

    $min=49;  # Мінімальне значення кольору для R, G або B
    $max=174; # Максимальне значення кольору для R, G або B
    $step=5;  # Розмір кроку зміни кольору
    $sleeptime=15; # Інтервал у секундах між кроками

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

    while (1) {
            foreach (0..5) {
                    my $which = $_ % 3; # Колір (R, G або B), який слід змінити
                    my $updown = $_ % 2; # Збільшити або зменшити значення кольору
                    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));
                    }
    }

Просто запустіть скрипт без аргументів і він циклічно досить повільно змінюватиме колір тла, аж до часу, коли роботу цього скрипту буде завершено. Voilà!

Звичайно ж, Perl не є єдиною мовою, якою ви можете писати скрипти для &DCOP;, — якщо ви бажаєте писати скрипти мовою оболонки, це теж можна робити:

### Встановлення тла з Інтернету

Наведений нижче скрипт звантажуватиме зображення стрічки коміксів User Friendly і робитиме його шпалерами стільниці за допомогою широко використовуваних інструментів і декількох рядків &DCOP;:

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

У першому рядку після #!/bin/sh буде використано `wget` і трохи фокусів формальних виразів для визначення адреси зображення за допомогою вихідних кодів головної сторінки &HTML;. За допомогою другого та третього рядків зображення буде звантажено і, нарешті, за допомогою `dcop` звантажене зображення буде використано як шпалери.

## Додавання прив’язок до клавіш у &kde;

На багатьох сучасних клавіатурах містяться додаткові клавіші, які, типово, не пов’язано з жодною дією.

Натискання мультимедійних клавіш часто надсилає системі сигнал, такі клавіші можна легко пов’язати з дією у програмі, так само, як ви пов’язуєте ці дії з іншими клавішами. Втім, деякі з клавіш не визначаються системою, отже їх натискання за допомогою пункту меню Налаштування скорочень не призводитиме до бажаних результатів.

Наприклад, на деяких ноутбуках IBM є додаткові клавіші, розташовані поряд з клавішами стрілочок ліворуч і праворуч, які підписано page left і page right.

1. Скористайтеся `xev` для визначення кодів клавіш. У нашому випадку ми припустили, що цими кодами є 233 і 234

2. Вкажіть коди клавіш. Існує значний діапазон кодів, які ще не використано типово, отже вибір досить широкий. Ви можете знайти список цих кодів у файлі `/usr/X11R6/include/X11/keysymdef.h` (або його еквіваленті у вашій системі).

3. Створіть файл з назвою `.Xmodmap` у вашому домашньому каталозі і додайте до нього такі рядки:

       keycode 233 = Next_Virtual_Screen
       keycode 234 = Prev_Virtual_Screen

4. Виконайте команду ``xmodmap` `~/.Xmodmap``

На цьому кроці ви знову зможете запустити програму `xev` і побачити, чи призводить натискання клавіш до надсилання кодів клавіш, які ви призначили. Тепер ви зможете прив’язати клавіші до потрібних дій у звичайному режимі.

### Супутня інформація

- Сторінка довідника `xev`. Ви можете переглянути її за допомогою переходу за адресою `man:/xev` у вікні &konqueror; або введенням команди ``man` xev` у терміналі.

## Додавання прив’язки клавіш до нових дій

Для більшості дій, що стосуються роботи стільниці або програм, ви можете прив’язати клавіатурне скорочення або за допомогою загальних налаштувань стільниці або за допомогою відповідного вікна налаштування програми. Якщо дія, з якою ви бажаєте пов’язати скорочення, створена вами власноруч, або недоступна у відповідних діалогових вікнах з інших причин, ви все одно можете призначити для неї клавіатурне скорочення.

Щоб пов’язати наш виклад з двома попередніми розділами, припустімо, що ви бажаєте пов’язати раніше не використовувати клавішу клавіатури зі скриптом або командою dcop. У нашому прикладі ми пов’яжемо дві клавіші, які ми додали у розділі , з переходом до попередньої або наступної віртуальної стільниці, двома функціями, для реалізації яких ми використовували DCOP (обговорення можна знайти у розділі ).

Цього можна просто досягти у таких спосіб:

1. Відкрийте Центр керування, перейдіть до розділу Локалізація та доступність, позначте пункт Клавіатурні скорочення

2. Оберіть пункт Нова дія

3. Вкажіть назву дії, наприклад `Наступна віртуальна стільниця`

4. Оберіть пункт Клавіатурне скорочення -> Команда/URL (простий) у полі Тип дії:

5. На вкладці Клавіатурне скорочення натисніть кнопку, яку ви бажаєте використовувати для виконання команди. У нашому прикладі ми обрали натискання кнопки з піктограмою Наступна сторінка. На зображення клавіші з’явиться код Next_Virtual_Screen.

6. На вкладці Параметри команди/URL, введіть команду, яку буде виконано, у відповідне поле: ``dcop kwin default nextDesktop``

Повторіть перелічені вище дії для клавіші Prev_Virtual_Screen і команди ``dcop kwin default previousDesktop``.

Тепер натискання клавіш Prev_Virtual_Screen і Next_Virtual_Screen перемикатиме систему на попередню і наступну віртуальну стільницю, відповідно.

Звичайно ж, ви можете призначити будь-яку невикористану комбінацію клавіш до будь-якої дії.

### Супутня інформація

- Ознайомтеся з документацією з KHotKeys або відкривши відповідний підручник за допомогою Центру довідки, або ввівши рядок `help:/khotkeys` до поля адреси вікна &konqueror;.

Adriaan
de Groot
groot@kde.org

## &kdebugdialog; — керування виводом для усування вад у &kde;

### Основні прийоми користування

Типово, ви не знайдете &kdebugdialog; у K-меню. Вам доведеться запустити його з командної оболонки або з міні-командного рядка командою ``kdebugdialog``. &kdebugdialog; відкриє вікно з довгим списком ділянок зневадження. Поряд з пунктом кожної з ділянок ви побачите поле для позначки. Позначення або зняття позначки з такого поля увімкне або вимкне виведення даних для усування вад для відповідної частини &kde;.

Список ділянок зневаджування впорядковано за числовими позначеннями, а не за абеткою, отже, наприклад, kio (127) стоїть у списку вище за kfind (2000). Коди числових позначень можуть бути порядку 200000, але насправді існує лише приблизно 400 ділянок. Але вам не потрібно обшукувати весь список, щоб знайти потрібну вам ділянку. У верхній частині діалогового вікна є рядок пошуку, куди ви можете ввести назву потрібної вам ділянки. Список буде відповідним чином просіяно: у ньому залишаться лише ділянки зневаджування, назви яких містять введений вами текст. Наприклад, введення символу `k` не призведе до значних змін у списку, а ось введення рядка `kont` зменшить список до переліку ділянок зневаджування програми &kontact;. За допомогою кнопок Вибрати все і Зняти весь вибір ви можете наказати &kde; виводити дані щодо всіх компонентів або майже не виводити ніяких даних.

### KDebugDialog у повноцінному режимі

У повноцінному режимі роботи програми, доступ до якого можна отримати запуском kdebugdialog командою ``kdebugdialog` `--fullmode``, ви отримаєте доступ до того самого списку ділянок зневаджування, але зможете обирати зі спадного списку лише одну ділянку за раз. Після вибору ви зможете незалежно вмикати або вимикати виведення певних типів повідомлень: інформації, попереджень, помилок та критичних помилок. Для кожного з цих типів ви можете обрати призначення повідомлень. Серед можливих варіантів:

Файл, у цьому випадку ви зможете вказати назву файла. Цей файл буде записано до вашого каталогу $`HOME`.

Вікно повідомлення. Кожне повідомлення для усування вад буде показано у інформаційному діалоговому вікні, вам слід буде натиснути кнопку Гаразд, щоб продовжити роботу з програмою.

Оболонка, типовий варіант. Повідомлення буде виведено до stderr, їх можна буде побачити у вікні командної оболонки, з якого було запущено програму і у файлі `.xsession-errors`.

Системний журнал. За вибору цього варіанта всі повідомлення для усування вад буде надіслано до системної служби запису журналу, яка обробить повідомлення за допомогою власних методів.

Немає. За допомогою цього варіанта можна придушити виведення цього типу повідомлень.

Загалом кажучи, для повідомлень про критичні помилки не слід обирати призначень «Немає» або «Системний журнал», оскільки за такого вибору ви, найімовірніше, не побачите цього повідомлення і програма, у якій сталася критична помилка, просто зникне не залишивши вам нічого для того, щоб здогадатися про причину цього зникнення. Вмикати або вимикати зникнення програми після критичних помилок можна за допомогою пункту Зупиняти під чaс фатальних помилок, який типово позначено, — але, ймовірніше за все, програма все одно аварійно завершиться (у найнепередбачуваніший спосіб), якщо у ній станеться критична помилка.