<chapter id="tinkering-under-the-hood">
<!-- Uncomment the <*info
> below and add your name to be -->
<!-- credited for writing this section. -->

<!--
<chapterinfo>
<authorgroup>
<author>
<firstname
>Your First Name here</firstname>
<surname
>Your Surname here </surname>
</author>
</authorgroup>
</chapterinfo>
-->

<title
>Длубаємося у нутрощах &kde;</title>

<sect1 id="hand-editing-config-files">

<sect1info>
<author
><personname
> <firstname
>Nicolas</firstname
> <surname
>Goutte</surname
> </personname
> <email
>goutte@kde.org</email
> </author>
</sect1info>

<title
>Редагування файлів налаштування вручну</title>

<sect2 id="hand-editing-intro">
<title
>Вступ</title>
<para
>У &kde; файли налаштування дуже просто змінити за допомогою простого редактора на зразок &kate;, оскільки файли налаштування є текстовими файлами.</para>

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

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

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

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

</sect2>

<sect2 id="hand-editing-backups">
<title
>Резервні копії</title>

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

<sect2 id="hand-editing">
<title
>Редагування</title>

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

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

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

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

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

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

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

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

<itemizedlist>
<title
>Супутня інформація</title>


<listitem
><para
><xref linkend="kde-for-administrators"/> містить докладніші відомості щодо структури каталогів &kde;, які допоможуть вам знайти файл, який вам слід змінити.</para>
</listitem>

</itemizedlist>

</sect2>

</sect1>

<sect1 id="scripting-the-desktop">
<title
>Написання скриптів для стільниці</title>

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

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

<para
>Запустіть <application
>kdcop</application
> з &konsole; або міні-командного рядка (вікна, яке можна відкрити за допомогою комбінації клавіш <keycombo action="simul"
>&Alt;<keycap
>F2</keycap
> </keycombo
>). У вікні програми <application
>kdcop</application
> буде показано поточні запущені програми з інтерфейсами &DCOP; у вигляді деревоподібної структури. Загалом, для визначення потрібного методу потрібен певний пошук у цій структурі, корисною підказкою є те, що інтерфейс <quote
>(типовий)</quote
> зазвичай містить найчастіше використовувані функції.</para>



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

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

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

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

<example>
<title
>Скрипт зміни кольору тла за допомогою &DCOP;</title>

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

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

<para
>Щоб використати наш метод <methodname
>setColor</methodname
> у командному рядку, ми виконаємо таку команду: <screen
><prompt
>%</prompt
> <userinput
><command
>dcop</command
> kdesktop KBackgroundIface setColor '#ffffff' false</userinput
>
</screen>
</para>

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

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


<para
>Отже, це все, що нам потрібно від &DCOP;; тепер нам всього лише потрібно написати потрібний скрипт. Ось (дуже!) груба реалізація: <programlisting
><![CDATA[
$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));
                }
}
]]>
</programlisting>
</para>

<para
>Просто запустіть скрипт без аргументів і він циклічно досить повільно змінюватиме колір тла, аж до часу, коли роботу цього скрипту буде завершено. <foreignphrase
>Voil&agrave;</foreignphrase
>!</para>

</example>

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

<example>
<title
>Встановлення тла з Інтернету</title>

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

<programlisting
><![CDATA[
#!/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
]]>
</programlisting>

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

</example>


<!-- <itemizedlist>
<title
>Related Information</title>
<listitem
><para
>to be written</para>
</listitem>
</itemizedlist
> -->


</sect1>


<sect1 id="adding-extra-keys">
<title
>Додавання прив’язок до клавіш у &kde;</title>

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

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

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

<procedure>
<step
><para
>Скористайтеся <command
>xev</command
> для визначення кодів клавіш. У нашому випадку ми припустили, що цими кодами є 233 і 234 </para
></step>
<step
><para
>Вкажіть коди клавіш. Існує значний діапазон кодів, які ще не використано типово, отже вибір досить широкий. Ви можете знайти список цих кодів у файлі <filename
>/usr/X11R6/include/X11/keysymdef.h</filename
> (або його еквіваленті у вашій системі).</para
></step>
<step
><para
>Створіть файл з назвою <filename
>.Xmodmap</filename
> у вашому домашньому каталозі і додайте до нього такі рядки:</para>
<screen
>keycode 233 = Next_Virtual_Screen
keycode 234 = Prev_Virtual_Screen</screen>
</step>
<step
><para
>Виконайте команду <userinput
><command
>xmodmap</command
> <filename
>~/.Xmodmap</filename
></userinput
></para
></step>
</procedure>

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

<itemizedlist>
<title
>Супутня інформація</title>
<listitem
><para
>Сторінка довідника <command
>xev</command
>. Ви можете переглянути її за допомогою переходу за адресою <userinput
>man:/xev</userinput
> у вікні &konqueror; або введенням команди <userinput
><command
>man</command
> xev</userinput
> у терміналі.</para
></listitem>
</itemizedlist>

</sect1>

<sect1 id="keys-for-scripts">
<title
>Додавання прив’язки клавіш до нових дій</title>

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

<para
>Щоб пов’язати наш виклад з двома попередніми розділами, припустімо, що ви бажаєте пов’язати раніше не використовувати клавішу клавіатури зі скриптом або командою dcop. У нашому прикладі ми пов’яжемо дві клавіші, які ми додали у розділі <xref linkend="adding-extra-keys"/>, з переходом до попередньої або наступної віртуальної стільниці, двома функціями, для реалізації яких ми використовували DCOP (обговорення можна знайти у розділі <xref linkend="scripting-the-desktop"/>).</para>

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

<procedure>
<step>
<para
>Відкрийте Центр керування, перейдіть до розділу <guilabel
>Локалізація та доступність</guilabel
>, позначте пункт <guilabel
>Клавіатурні скорочення</guilabel
></para>
</step>
<step>
<para
>Оберіть пункт <guibutton
>Нова дія</guibutton
></para>
</step>
<step>
<para
>Вкажіть назву дії, наприклад <userinput
>Наступна віртуальна стільниця</userinput
></para>
</step>
<step>
<para
>Оберіть пункт <guilabel
>Клавіатурне скорочення -> Команда/URL (простий)</guilabel
> у полі <guilabel
>Тип дії:</guilabel
></para>
</step>
<step>
<para
>На вкладці <guilabel
>Клавіатурне скорочення</guilabel
> натисніть кнопку, яку ви бажаєте використовувати для виконання команди. У нашому прикладі ми обрали натискання кнопки з піктограмою <guiicon
>Наступна сторінка</guiicon
>. На зображення клавіші з’явиться код <keysym
>Next_Virtual_Screen</keysym
>.</para>
</step>
<step>
<para
>На вкладці <guilabel
>Параметри команди/URL</guilabel
>, введіть команду, яку буде виконано, у відповідне поле: <userinput
><command
>dcop kwin default nextDesktop</command
></userinput
></para>
</step>
</procedure>

<para
>Повторіть перелічені вище дії для клавіші <keysym
>Prev_Virtual_Screen</keysym
> і команди <userinput
><command
>dcop kwin default previousDesktop</command
></userinput
>.</para>

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

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

<itemizedlist>
<title
>Супутня інформація</title
> 
<listitem
><para
>Ознайомтеся з документацією з <application
>KHotKeys</application
> або відкривши відповідний підручник за допомогою Центру довідки, або ввівши рядок <userinput
>help:/khotkeys</userinput
> до поля адреси вікна &konqueror;.</para
></listitem
> 
<listitem
><para
><xref linkend="adding-extra-keys"/></para
></listitem>
<listitem
><para
><xref linkend="scripting-the-desktop"/></para
></listitem>
</itemizedlist>

</sect1>

<sect1 id="kdebugdialog">
<sect1info>
<authorgroup>
<author
><personname
> <firstname
>Adriaan</firstname
> <surname
>de Groot</surname
> </personname
> <email
>groot@kde.org</email
> </author>
</authorgroup>
</sect1info>

<title
>&kdebugdialog; — керування виводом для усування вад у &kde;</title>

<sect2 id="kdebugdialog-basic-usage">
<title
>Основні прийоми користування</title>

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

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

<sect2 id="kdebugdialog-fullmode">
<title
>KDebugDialog у повноцінному режимі</title>

<!-- this text partly taken from the kdebugdialog handbook -->

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

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

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

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

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

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

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

<!-- Add links to "further reading" here -->
<!-- <itemizedlist>
<title
>Related Information</title>
<listitem
><para
>to be written</para>
</listitem>
</itemizedlist
>-->



</sect2>
</sect1>
</chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode: xml
sgml-omittag:nil
sgml-shorttag:nil
sgml-namecase-general:nil
sgml-general-insert-case:lower
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:0
sgml-indent-data:true
sgml-parent-document:("index.docbook" "book" "chapter")
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->
