| Tutorial Series | Getting Started |
| Previous | Сборка KDE 4 |
| What's Next | Other development topics |
| Further Reading | n/a |
Contents |
Существует три основных способа работы разработчиков с KDE 4:
Все 3 способа описаны в последующих разделах.
| Note |
|---|
Если при запуске приложений kde4 возникают похожие ошибки:
Qt: Session management error: Could not open network socket QMutex::lock: Deadlock detected in thread -1241241936или при запуске startkde ничего не происходит, то прочитайте эту статью, чтобы найти решение проблемы. |
Для данного способа требуется утилита 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
| Note |
|---|
При получении ошибок, связанных с отсутствием mimetypes и им подобных, попробуйте следующее:
|
Наиболее простой способ запустить KDE 4 приложение - использовать su, чтобы стать пользователем kde-devel, а затем запустить любое приложение KDE 4 из командной строки. Чтобы сменить пользователя, напечатайте:
su - kde-develа затем, после ввода пароля
export DISPLAY=:0
| Note |
|---|
| Экспортирование переменной DISPLAY необходимо, чтобы KDE 4 приложения появлялись на рабочем столе KDE 3. |
Все переменные окружения и всё остальное должно быть корректно установлено в вашем
.bashrc файле. Чтобы запустить приложение, просто напечатайте его имя, например,kwrite
| Note |
|---|
При получении ошибок, связанных с отсутствием mimetypes и им подобных, попробуйте следующее:
|
| Note |
|---|
Если вы получаете ошибку о том, что невозможно соединиться с 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, посмотрите эту статью |
Самый простой способ запускать 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
Перед тем, как что-то серьёзное может быть выполнено с помощью данного способа, следует настроить вход без пароля. Сначала, выполните следующую команду из-под обычного пользователя:
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
| Warning |
|---|
Использование беспарольного входа через SSH небезопасно, поэтому удостоверьтесь, что вы защитили ваш файл ~/.ssh/id_rsa, убрав к нему доступ с помощью:
chmod og-xrw ~/.ssh/id_rsa |
Один из способов запускать приложения более удобным способом, чем через SSH из командной строки, - создать .desktop файлы, которые входят в другой эккаунт с помощью ssh.
| Note |
|---|
| Это возможно, если только ваша рабочая среда поддерживает .desktop файлы, но, по крайней мере, KDE и GNOME поддерживают. |
Можно использовать существующий .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=
| Tip |
|---|
| Apps launched using SSH like this don't trigger the correct launch responses, so you probably want to disable "launch feedback" for your .desktop files |
| Note |
|---|
| Чтобы надлежащим образом создать .desktop файл для KDE 4 приложений, использую образец, пакет приложения (app's package) должен быть установлен в ~/kde/bin с помощью команды cmakekde |
Вместо того, чтобы использовать полнофункциональный виртуальный 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:
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.
Чтобы запустить полный сеанс рабочей среды KDE, можно либо:
X :1 & export DISPLAY=:1 startkde
| Note |
|---|
| Если X-сервер отказывает в соединении, выдавая что-то наподобие: Xlib: connection to ":1.0" refused by server, попробуйте X -ac :1. |
либо можно добавить 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) в списке сеансов должен появится новый пункт.
| Note |
|---|
| Путь к 'qdbus' (обычно $QTDIR/bin) должен быть корректно прописан в $PATH для удачного запуска сеанса. В противном случае вы получите следующую ошибку "Could not start DBus. Check your installation." |
В данном разделе описано, как использовать KDevelop 3.4 для разработки приложений KDE 4. Если у вас есть какие-либо вопросы или замечания, касающиеся данного раздела, то вы можете воспользоваться страницей обсуждения.
Для работы требуется, по крайней мере, 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-develKDevelop не имеет встроенной поддержки проектов 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 { 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
Теперь вы можете запускать KDevelop, напечатав start3app kdevelop. Выполните это прямо сейчас.
| Tip |
|---|
| С помощью функции start3app можно запускать любые KDE 3 приложения, например Kompare или kdesvn. Однако, вы не можете таким образом запускать KDbg для отладки KDE 4 приложений из-за того, что переменные окружения для отлаживаемого приложения неверны. |
Теперь нам нужно настроить KDevelop. Для этого зайдите в Настройка->Настроить KDevelop...->Документация. Очистите все поля, не связанные с разработкой KDE 4.
| Note |
|---|
| Так как KDevelop не распознаёт переменные среды (например, $HOME), их надо заменить на реальные пути. |
Выберите Добавить..., чтобы добавить документацию по kdelibs API. В данном диалоге используйте следующие установки:
Теперь добавьте документацию по Qt API:
После добавления документации по kdelibs и Qt API, проверьте, активны ли чекбоксы (TOC,Индекс и Поиск). Затем откройте вкладку Полнотекстовый поиск и проверьте корректность путей для утилит htdig, htmerge и htsearch. Посде этого диалоговое окно настроек можно закрыть.
Теперь настало время открыть проект, над которым вы собираетесь работать, выберите Проект->Открыть проект.... Файлы проектов находятся в каталогах самих проектов. Например, если вам требуется Konsole, то нужно открыть $KDE_BUILD/KDE/kdebase/apps/konsole/konsole.kdevelop. Теперь необходимо указать настройки проекта в Проект->Параметры проекта. Это необходимо делать для каждого нового проекта.
| Note |
|---|
| Иногда файл проекта KDevelop может отсутствовать в каталоге нужного вам приложения.
Это может быть обусловлено различными причинами, но часто зависит от того, как написаны файлы CMake. Обычно, если в CMake файле присутствует заголовок project(projectname), всё должно работать. Если вы знакомы со структурой CMake файлов, вы можете попробовать добавить заголовок (если он отсутствует). Обойти эту проблему можно создав проект KDevelop в родительском каталоге (или даже ещё выше). В таком случае вам следует использовать Сделать каталог активным из контекстного меню Выбор файлов, ненужные каталоги можно не использовать при сборке и установке. |
| Note |
|---|
| Загрузка символов из библиотеки Qt 4 в хранилище классов требуется, если вы не установили Qt4, т.е. используете его напрямую с каталога сборки. Недостаток использования «Загрузки символов из библиотеки Qt 4 в хранилище классов» состоит в том, что во время добавления из-за отсутствия прогрессбара приложение выглядит зависшим. В качестве альтернативы можно использовать загрузку символов из любого каталога в хранилище классов. |
| 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 |
Все настройки, касающиеся проекта, выполнены. Теперь вы должны удалить некоторые ненужные плагины в 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.
Вы должны отключить, по крайней мере, те, что выделины жирным шрифтом.
Теперь откройте какой-нибудь исходный файл (если вы этого ещё не сделали). Пункт меню Настройка->Настроить редактор... станет активным, вам нужно настроить параметры отступа, чтобы они соответствовали стилю, принятому в проекте, над которым вы работаете. Наиболее важные настройки:
В главном окне щёлкните по вкладке CTags, находящейся на нижнем таббаре, затем щёлкните по кнопке Regenerate, чтобы создать базу данных CTags для более лёгкой навигации по исходному коду.
Поздравляем! Все существенные настройки выполнены!
Обратитесь к мануалу по KDevelop, чтобы ознакомиться с общей информацией по использованию KDevelop. Данный раздел касается аспектов, специфичных для KDE 4.
Приложения KDE содержат много отладочных символов, что означает, что требуется большое количество памяти для достижения приемлемого времени запуска приложения во время отладки. Мнение одного из разработчиков GDB: "Мне было бы очень тяжело отлаживать KDE при наличии меньше 1 GB RAM". Если пошагавая отладка работает слишком медлено, то вам может помочь следующее:
| Note |
|---|
| KDevelop не поддерживает модификацию сборочной системы CMake. Это означает, что вы не можете использовать KDevelop, чтобы добавить или удалить файлы с проекта или изменить какие-либо параметры сборки. Вам необходимо модифицировать файлы CMake вручную, после чего запускать cmakekde. Ознакомьтесь с уроком по CMake, чтобы узнать, как это делать. |
| Tip |
|---|
| При работе над библиотеками, их надо установить перед тем, как тестировать или отлаживать изменения.
Из-за того, что это неудобно и занимает очень много времени, лучше для всех ваших библиотек в каталоге установки создавать символические ссылки (ln -s), указывающие на файлы из каталога сборки Обычно, даже простые программы используют внутренние библиотеки, например диалог настроек в Konsole является библиотекой. |