Please ask development related questions in the KDE Community Forum.
Getting Started/Set up KDE 4 for development (ru)
Languages: عربي | Asturianu | Català | Česky | Kaszëbsczi | Dansk | Deutsch | English | Esperanto | Español | فارسی | Suomi | Français | Galego | Italiano | 日本語 | 한국어 | Norwegian | Polski | Português Brasileiro | Română | Русский | Svenska | Slovenščina | српски | Українська | 简体中文 | 繁體中文
| Tutorial Series | Getting Started |
| Prerequisites | Сборка KDE 4 |
| What's Next | Other development topics |
| Further Reading | n/a |
Contents |
[edit] Запуск приложений и сеансов KDE 4
Существует три основных способа работы разработчиков с KDE 4:
- Запуск приложения KDE 4 вместе с другими приложениями в текущей рабочей среде (desktop environment).
- Встраивание сеанса KDE 4 в текущую рабочую среду
- Запуск KDE 4 в качестве единственной рабочей среды на вашей машине.
Все 3 способа описаны в последующих разделах.
Если при запуске приложений kde4 возникают похожие ошибки:
Qt: Session management error: Could not open network socket QMutex::lock: Deadlock detected in thread -1241241936
или при запуске startkde ничего не происходит, то прочитайте эту статью, чтобы найти решение проблемы.
[edit] Запуск приложений KDE 4
[edit] Использование обычной оболочки с sux
Для данного способа требуется утилита sux (http://fgouget.free.fr/sux/sux-readme.shtml). Утилита sux доступна во многих дистрибутивах. В противном случае вы можете положиться на способ обычная оболочка без sux, описанный ниже. sux позволяет переключаться к другому пользователю с неявным управлением настроек (implicit managing of the X forwarding details) X (authentication and DISPLAY exporting) простым и удобным способом.
Чтобы войти в систему, напечатайтеsux - kde-devel
Все переменные окружения и всё остальное будет корректно установлена для
вашего .bashrc. Чтобы запустить приложение, просто наберите его имя, например,kwrite.
При получении ошибок, связанных с отсутствием mimetypes и им подобных, попробуйте следующее:
- запустите
unset XDG_DATA_DIRS ; kbuildsycoca4
[edit] Использование обычной оболочки без sux
Наиболее простой способ запустить KDE 4 приложение - использовать su, чтобы стать пользователем kde-devel, а затем запустить любое приложение KDE 4 из командной строки. Чтобы сменить пользователя, напечатайте:
su - kde-devel
а затем, после ввода пароля
export DISPLAY=:0
Все переменные окружения и всё остальное должно быть корректно установлено в вашем
kwrite.
При получении ошибок, связанных с отсутствием mimetypes и им подобных, попробуйте следующее:
- запустите
unset XDG_DATA_DIRS ; kbuildsycoca4
Если вы получаете ошибку о том, что невозможно соединиться с X-сервером, то удостоверьтесь. что выполнили
sudo xhost +local:kde-devel
из-под обычного пользователя KDE 3 для обеспечения приложению возможности подсоединяться к X-сессии.
X-сервер должен принимать входящие TCP-соединения, это обычно отключено по умолчанию в некоторых дистрибутивах (например, Kubuntu Feisty). При использовании kdm следует отредактировать /etc/kde3/kdm/kdmrc из-под рута и удостовериться, что файл не содержит следующего:
ServerArgsLocal=-nolisten tcp
После этого необходимо перезапустить X-сервер, после чего команда xhost уже не будет возвращать ошибку ""unable to open display".
Для удобства следует добавить всё это в автозапуск для обычного пользователя. Для этого создайте в каталоге $HOME/.kde/Autostart обычного пользователя новый файл со следующим содержанием:
#! /bin/sh
xhost +local:kde-devel
Удостоверьтесь, что новый файл исполняемый, например, выполнив команду chmod +x для этого файла (сделает его исполняемым).
Для того, чтобы узнать больше о проблемах безопасности, создаваемых использованием xhost, посмотрите эту статью
[edit] Использование SSH
Самый простой способ запускать KDE 4 приложения с помощью SSH в текущей рабочей среде - войти под пользователем kde-devel в командную оболочку совместимую с X следующим образом: The simplest way to run a KDE 4 application with SSH in your current desktop environment is to get an X-aware shell prompt as the kde-devel user like this:
ssh -X kde-devel@localhost
Теперь можно запускать KDE 4 приложения обычным способом, например:
kwrite
Эти 2 строчки могут быть соединены для удобства:
ssh -X kde-devel@localhost kwrite
[edit] Вход без пароля
Перед тем, как что-то серьёзное может быть выполнено с помощью данного способа, следует настроить вход без пароля. Сначала, выполните следующую команду из-под обычного пользователя:
ssh-keygen -t rsa
Три раза нажмите enter, чтобы принять путь ~/.ssh/id_rsa и пустую строку с паролем. Теперь скопируйте в ~/.ssh/id_rsa.pub одиночную строку, выводимую следующей командой:
cat ~/.ssh/id_rsa.pub
После того, как строка скопирована, войдите обратно под пользователем kde-devel с помощью ssh и добавьте скопированную строку в файл $HOME/.ssh/authorized_keys:
ssh -X kde-devel@localhost $HOME/kde/bin/kwrite \ $HOME/.ssh/authorized_keys
Вставьте строку, сохраните файл и закройте KWrite. Теперь снова попробуйте запустить kwrite той же SSH-командой; Вам не должно потребоваться вводить пароль:
ssh -X kde-devel@localhost $HOME/kde/bin/kwrite
chmod og-xrw ~/.ssh/id_rsa(также файл должен иметь данные права при создании)
[edit] SSH-файл рабочего стола (The SSH desktop file)
Один из способов запускать приложения более удобным способом, чем через SSH из командной строки, - создать .desktop файлы, которые входят в другой эккаунт с помощью ssh.
Можно использовать существующий .desktop файл в качестве шаблона (с вашего рабочего окружения) или же создать с нуля. Основная идея - дописать префикс к имени программы:
ssh -X kde-devel@localhost $HOME/kde/bin/
Простой .desktop файл, запускающий KWrite, выглядит следующим образом:
[Desktop Entry]
Categories=Qt;KDE;TextEditor;
Comment=
DocPath=kwrite/index.html
Encoding=UTF-8
Exec=ssh -X kde-devel@localhost /home/kde-devel/kde/bin/kwrite %U
GenericName=Text Editor
Icon=kwrite
InitialPreference=8
MimeType=text/plain
Name=KWrite (kde-devel)
Path=
StartupNotify=false
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-StartupType=Multi
X-DCOP-ServiceType=non
X-KDE-StartupNotify=true
X-KDE-SubstituteUID=false
X-KDE-Username=
[edit] Запуск сеансов KDE 4
[edit] Вложенный сеанс KDE 4
Вместо того, чтобы использовать полнофункциональный виртуальный X для разработки ПО, можно использовать Xephyr, чтобы встроить сеанс KDE 4 в запущенный KDE 3 сеанс или любую другую рабочую среду X11.
Это также можно осуществить с помощью xnest, но xnest не может работать с такими расширениями, как Render, поэтому многие предпочитают Xephyr.
Если вы хотите запустить минимальный сеанс KDE, просто запустите Xephyr (в Kubuntu называется xserver-xephyr, пользователи Gentoo должны скомпилировать x11-base/xorg-server с USE="kdrive"):
Xephyr :1&
Теперь вы можете запустить KDE:
export DISPLAY=:1 /path/to/kde4/bin/startkde-modified &
startkde-modified является копией скрипта startkde с добавлением в начало файла следующих строк:
export KDEDIR=`kde4-config --prefix`
export LD_LIBRARY_PATH=$KDEDIR/lib
export PATH=$KDEDIR/bin/:$PATH
export KDEHOME=~/.kde4
Xephyr можно также использовать с KDM с помощью протокола Xdmcp, что позволяет запускать новый сеанс KDE 4 через KDM.
В Kubuntu это можно сделать, изменив
[Xdmcp]
# Whether KDM should listen to incoming XDMCP requests.
# Default is true
Enable=false
в /etc/kde3/kdm/kdmrc на
[Xdmcp]
# Whether KDM should listen to incoming XDMCP requests.
# Default is true
Enable=true
и модифицируйте ваш /etc/kde3/kdm/Xaccess, чтобы разрешить доступ к локальной машине. Помимо этого следует заблокировать доступ к порту Xdmcp для всех внешних интерфейсов, если вы работаете в опасной зоне (untrusted zone/environment).
Если всё готово, просто запустите Xephyr:
Xephyr -query localhost :1 -host-cursor -screen 1024x768&
где -host-cursor задаёт число попыток использовать курсор хоста и -screen - разрешение экрана.
Note: Если вы получаете много ошибок при соединении, можно попробовать запустить Xephyr с опцией -ac, например:
Xephyr -ac :1&
Если у вас нет Xephyr, то вы можете использовать Xnest:
Xnest -ac :1& export DISPLAY=:1
This section needs improvements: Please help us to cleanup confusing sections and fix sections which contain a todo
Я использую это для моего стартого скрипта nested_kde4.sh:
- ! /bin/bash
NESTED_KDE_DISPLAY_BACKUP=$DISPLAY
export DISPLAY=:0
Xephyr :1 -screen 1024x768 &
export DISPLAY=:1
$HOME/kde/bin/startkde-modified &
export DISPLAY=${NESTED_KDE_DISPLAY_BACKUP}
Если появляется ошибка:
"Call to lnusertemp failed (temporary directories full?). Check your installation."
Попробуйте:
mkdir /var/tmp/kde-devel-kde4
Вышеприведённый код предполагает, что вы работаете из-под kde-devel.
[edit] Отдельный сеанс KDE 4
Чтобы запустить полный сеанс рабочей среды KDE, можно либо:
X :1 & export DISPLAY=:1 startkde
либо можно добавить KDE 4 в менеджер сеансов. Для KDM (или совместимого менеджера входа) это можно сделать, создав .desktop файл либо в `kde-config --prefix`/share/apps/kdm/sessions/, либо в /usr/share/xsessions/. Наиболее простой способ сделать это - скопировать существующий kde.desktop файл и назвать его kde4.desktop. Откройте новый .desktop файл в текстовом редакторе и замените поля Exec, TryExec и Name на что-то в стиле:
Exec=$HOME/kde/bin/startkde
TryExec=$HOME/kde/bin/startkde
Name=KDE4
Замените $HOME/kde из примера выше на префикс, где находится KDE4.
После перезапуска менеджера входа (Alt+e в KDM) в списке сеансов должен появится новый пункт.
[edit] Разработка
[edit] KDevelop
В данном разделе описано, как использовать KDevelop 3.4 для разработки приложений KDE 4. Если у вас есть какие-либо вопросы или замечания, касающиеся данного раздела, то вы можете воспользоваться страницей обсуждения.
[edit] Необходимые программы
Для работы требуется, по крайней мере, KDevelop версии 3.4, который является KDE 3 приложением. Версии ниже 3.4 не поддерживают Qt 4 и некоторые другие вещи. Версия KDevelop для KDE 4 ещё не готова для применения в серьёзных разработках. KDevelop можно скачать с домашней страницы проекта. Удостоверьтесь, что вы поставили KDevekop, как обычное KDE 3 приложение, не с помощью пользователя kde-devel.
Также необходимо установить самую последнюю версию GDB, на данный момент это 6.6.0.
Кроме того, нужно создать локальную копию документации по kdelibs API, как описано в инструкции по сборке.
Также необходимо установить ctags, htdig, htmerge и htsearch. Могут оказаться полезнымиvalgrind и callgrind.
Удостоверьтесь, что вы выполнили сборку KDE 4 так, как описано в build инструкции и получили исправную рабочую среду KDE 4. Проверьте, запускаются ли простые простые приложение типа Konsole и KWrite из командной строки пользователя kde-devel.
su - kde-devel.
[edit] = Настройка окружения
KDevelop не имеет встроенной поддержки проектов CMake. К счастью, CMake может генерировать файлы проектов KDevelop. Для этого вместе с командой cmake нужно использовать параметр -GKDevelop3. Этот параметр позволяет CMake вместе с обычными Makefile-ми генерировать файлы проекта KDevelop. Для удобства можно изменить настройки cmakekde в .bashrc. Просто замените
cmake $srcFolder -DCMAKE_INSTALL_PREFIX=$KDEDIR \
-DCMAKE_BUILD_TYPE=debugfull&& \
make && \
make install;
на
cmake $srcFolder -GKDevelop3 -DCMAKE_INSTALL_PREFIX=$KDEDIR \
-DCMAKE_BUILD_TYPE=debugfull&& \
make VERBOSE=1 && \
make install;
После этого заново войдите в систему, чтобы изменения .bashrc вступили в силу. Затем перезапустите cmakekde из каталога сборки (его корня) проекта, над которым вы хотите работать с помощью KDevelop (если вы не использовали параметр -GKDevelop3 во время сборки). Например, если вы хотите работать с Konsole, входящей в состав kdebase, вам надо запустить cmakekde в каталоге $KDE_BUILD/KDE/kdebase. К несчастью, это пересоберёт весь проект, но всего один раз после изменения генератора файлов.
Из-за того, что все переменные окружения пользователя kde-devel специфичны для KDE 4, перед запуском KDevelop необходимо устанавливать старые значения, соответствующие KDE 3. Самый удобный способ - добавить следующую функцию в ваш .bashrc:
function start3app {Переменные PATH и LD_LIBRARY_PATH взяты у KDE 3 пользователя, и их значение в различных системах может различаться. Напечатайте
mkdir -p /tmp/$USER-kde
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
export LD_LIBRARY_PATH=
export KDETMP=/tmp/$USER-kde
export KDEVARTMP=/var/tmp/$USER-kde
export KDEHOME=$HOME/.kde
export KDEDIR=/usr
export KDEDIRS=$KDEDIR
export DISPLAY=:0
eval "$@"
source $HOME/.bashrc #Снова сбрасываем значения переменных окружения
}
echo $PATHи
echo $LD_LIBRARY_PATHработая под обычным KDE 3 пользователем, чтобы получить их значения. Составляю функцию, приведённую выше, мы предположили, что KDE 3 установлена с префиксом /usr, как, например, принято в Debian-based дистрибутивах. Если KDE 3 установлена с другим префиксом, например, /opt/kde3, то вам следует поменять значение переменной KDEDIR.
Теперь вы можете запускать KDevelop, напечатав start3app kdevelop. Выполните это прямо сейчас.
С помощью функции start3app можно запускать любые KDE 3 приложения, например Kompare или kdesvn.
Однако, вы не можете таким образом запускать KDbg для отладки KDE 4 приложений из-за того, что переменные окружения для отлаживаемого приложения неверны.
[edit] Настройка KDevelop
Теперь нам нужно настроить KDevelop. Для этого зайдите в Настройка->Настроить KDevelop...->Документация. Очистите все поля, не связанные с разработкой KDE 4.
Выберите Добавить..., чтобы добавить документацию по kdelibs API. В данном диалоге используйте следующие установки:
- Тип: Doxygen Documentation Collection (это следует установить в первую очередь)
- Расположение: $KDE_SRC/KDE/kdelibs/kdelibs-apidocs/index.html
Теперь добавьте документацию по Qt API:
- Тип: Qt Documentation Collection (это следует установить в первую очередь)
- Расположение: $HOME/qt-copy/doc/html/qt.dcf
После добавления документации по kdelibs и Qt API, проверьте, активны ли чекбоксы (TOC,Индекс и Поиск). Затем откройте вкладку Полнотекстовый поиск и проверьте корректность путей для утилит htdig, htmerge и htsearch. Посде этого диалоговое окно настроек можно закрыть.
Теперь настало время открыть проект, над которым вы собираетесь работать, выберите Проект->Открыть проект.... Файлы проектов находятся в каталогах самих проектов. Например, если вам требуется Konsole, то нужно открыть $KDE_BUILD/KDE/kdebase/apps/konsole/konsole.kdevelop. Теперь необходимо указать настройки проекта в Проект->Параметры проекта. Это необходимо делать для каждого нового проекта.
Иногда файл проекта KDevelop может отсутствовать в каталоге нужного вам приложения.
Это может быть обусловлено различными причинами, но часто зависит от того, как написаны файлы CMake. Обычно, если в CMake файле присутствует заголовок project(projectname), всё должно работать. Если вы знакомы со структурой CMake файлов, вы можете попробовать добавить заголовок (если он отсутствует).
Обойти эту проблему можно создав проект KDevelop в родительском каталоге (или даже ещё выше). В таком случае вам следует использовать Сделать каталог активным из контекстного меню Выбор файлов, ненужные каталоги можно не использовать при сборке и установке.
- Поддержка C++->Авто-дополнение кода
- Здесь следует добавить базы данных для дополнения Qt и kdelibs кода (и других библиотек), например, можно добавить базу данных для дополнения кода kdepimlibs, если вы работаете над kdepim.
- Для kdelibs нужно щёлкнуть по кнопке Добавить..., выбрать Загрузка символов из любого каталога в хранилище классов и добавить каталог с заголовочными файлами KDE ($HOME/kde/include) в список и следовать инструкциям визарда. Можно воспользоваться файловым диалогом и кнопкой «Добавить».
- Теперь добавьте базу данных для Qt 4, используя Загрузка символов из библиотеки Qt 4 в хранилище классов. Для этого следует выбрать каталог с заголовочными файлами Qt 4, $HOME/qt-copy/include.
- Поддержка C++->Параметры Qt
- Отметьте Включить параметры Qt и выберите Qt4 версию. Установите значение QMake Binary в $HOME/qt-copy/bin/qmake. Затем выберите Qt 4 style в Qt include syntax. В Designer Binary пропишите $HOME/qt-copy/bin/designer. Чтобы получить возможность использовать виджеты KDE в дизайнере, используйте диалог Change Plugin Paths, чтобы добавить каталог плагинов KDE. Для этого в строке редактирования напечатайте $HOME/kde/lib/kde4/plugins и нажмите Добавить.
- Параметры запуска
- Удостоверьтесь, что вы вписали правильный путь для Executable. Например, для запуска Konsole нужно вписать $KDE_BUILD/KDE/kdebase/apps/konsole/src/konsole. Не забудьте в Debug Arguments добавить параметр --nofork, в противном случае некоторые приложения, например KMail, не будут работать вообще.
- В связи с тем, что функция start3app изменяет некоторые переменные окружения, вам необходимо изменить их в настройках проекта, чтобы KDE 4 приложения могли запускаться из KDevelop.
- Для таких приложений, как Konsole, это не принципиально, но остальные (наподобие KMail) упадут при запуске, если этого не сделать.
- Просто щёлкните по кнопке Добавить / Копировать, чтобы добавить переменные окружения. Вам потребуются следующие (такие же, как и в вашем .bashrc):
Name Value KDEHOME $HOME/.kde4 PATH $QTDIR/bin:$KDEDIR/bin:/usr/local/bin:$PATH LD_LIBRARY_PATH $QTDIR/lib:$KDEDIR/lib:$LD_LIBRARY_PATH KDETMP /tmp/$USER-kde4 KDEVARTMP /var/tmp/$USER-kde4 KDEDIR $HOME/kde KDEDIRS $KDEDIR LD_BIND_NOW 42
- Параметры сборки->Сборка
- Удостоверьтесь, что выбран верный каталог сборки. Например, для Konsole это $KDE_BUILD/KDE/kdebase/apps/konsole.
- Параметры сборки->Make
- Возможно, вы захотите выбрать Прервать после первой ошибки. Также вы можете добавить 'VERBOSE= или VERBOSE=1 в Дополнительные параметры make, чтобы контролировать уровень "болтливости" во время сборки.
- При наличии более одного процессора или доступа к кластеру icecream, можно выбрать опцию Run multiple jobs и задачть число процессоров в поле Число одновременных процессов. Это увеличит скорость компиляции. Это то же самое, что и -j опция make.
- Форматирование
- Вы должны сделать настройку этого меню для соответствия стилю, принятому в проекте, над которым вы работаете.
- CTags->Общие
- Необходимо корректно установить Путь к программе ctags, в Debian-based дистрибутивах это /usr/bin/ctags.
- Возможно, вы захотите включить опцию При нескольких попаданиях, сразу перейти к первому.
Все настройки, касающиеся проекта, выполнены. Теперь вы должны удалить некоторые ненужные плагины в Settings->Configure Plugins.... Например, я отключаю следующие плагины:
Abbreviation Expansion, Code Snippets, Doxygen Support, Embedded Konsole, File Tree, Final Packaging Support, "Open with" Menu Addon, QuickOpen, Regular Expression Tester, Scripting, Security Checker, Shell Filtering and Insertion, Text Structure and Tools Menu Addition.
Вы должны отключить, по крайней мере, те, что выделины жирным шрифтом.
Теперь откройте какой-нибудь исходный файл (если вы этого ещё не сделали). Пункт меню Настройка->Настроить редактор... станет активным, вам нужно настроить параметры отступа, чтобы они соответствовали стилю, принятому в проекте, над которым вы работаете. Наиболее важные настройки:
- Внешний вид->Границы->Показывать номера строк: Должно быть выбрано.
- Внешний вид->Границы->Показывать отметки на полосе прокрутки: Должно быть выбрано.
- Редактирование->Табуляция
- Редактирование->Статичный перенос строк->Показывать маркеры статичного переноса строк: Должно быть выбрано.
- Отступы->Автоматическая расстановка отступов->Режим расстановки отступов: Должен быть C Style
- Отступы in general
В главном окне щёлкните по вкладке CTags, находящейся на нижнем таббаре, затем щёлкните по кнопке Regenerate, чтобы создать базу данных CTags для более лёгкой навигации по исходному коду.
Поздравляем! Все существенные настройки выполнены!
[edit] Использование KDevelop
Обратитесь к мануалу по KDevelop, чтобы ознакомиться с общей информацией по использованию KDevelop. Данный раздел касается аспектов, специфичных для KDE 4.
[edit] Отладка
Приложения KDE содержат много отладочных символов, что означает, что требуется большое количество памяти для достижения приемлемого времени запуска приложения во время отладки. Мнение одного из разработчиков GDB: "Мне было бы очень тяжело отлаживать KDE при наличии меньше 1 GB RAM". Если пошагавая отладка работает слишком медлено, то вам может помочь следующее:
- Спрячьте локальные переменные. Часть Locals из вкладки переменных (слева) сильно замедляет работу при наличии большого количества локальных переменных во время пошаговой отладки. Значение переменной по-прежнему можно получить с помощью Evaluate expression.
- Используйте патч с http://bugs.kde.org/show_bug.cgi?id=143977. Он предотвращает обновление виджета framestack при выполнении каждого шага, значительно повышая скорость отладчика. Патч имеет незначительные ошибки, только поэтому он ещё не внесён в проект.
KDevelop не поддерживает модификацию сборочной системы CMake. Это означает, что вы не можете использовать KDevelop, чтобы добавить или удалить файлы с проекта или изменить какие-либо параметры сборки.
Вам необходимо модифицировать файлы CMake вручную, после чего запускать cmakekde. Ознакомьтесь с уроком по CMake, чтобы узнать, как это делать.
Из-за того, что это неудобно и занимает очень много времени, лучше для всех ваших библиотек в каталоге установки создавать символические ссылки (ln -s), указывающие на файлы из каталога сборки
Обычно, даже простые программы используют внутренние библиотеки, например диалог настроек в Konsole является библиотекой.
