Документация для написания расширений GNOME Shell

Меня попросили настроить макет рабочего стола GNOME 3. По-видимому, способ сделать это - написать "расширение".

Мне удалось сделать кое-что из того, что я хотел сделать, но я чувствую себя совершенно голоденом от информации. Я не могу найти какую-либо полезную документацию в любом месте. Я потратил целые дни своей жизни, отчаянно искал все мыслимые поисковые запросы в отчаянной попытке найти полезную информацию.

На веб-сайте GNOME есть сотни расширений для загрузки. Это не тривиальные 3-лайнеры; они сложные фрагменты кода. Это бросает вызов вере в то, что любой может написать их без документации, объясняющей, как это сделать.

Пожалуйста, может кто-нибудь сказать мне, где находится фактическая документация? Пока что лучшее, что мне удалось сделать, это разделить существующие расширения, пытаясь отследить волшебную команду, которая делает конкретный бит, который мне интересен. (Не простая задача!)

Имена команд, пути объектов, примеры программ, все будет полезно!

Ответ 1

Я сам недавно закопался в этом. Документация обычно скудная или устаревшая. Вот несколько источников, которые помогли мне начать (и через разработку):

Поскольку документация почти недоступна (или актуальна), вам нужно много читать исходных текстов. Я связал источники gnome-shell выше (часть JavaScript), что является хорошим началом при погружении в части, которые не описаны в Официальной документации (которая является наиболее полной вещью, которую вы найдете).

Также особенно полезно проверить extensions.gnome.org на наличие расширений, которые делают вещи, аналогичные тем, которые вы хотите создать, и посмотрите на их источники (большинство из них с открытым исходным кодом на GitHub или Bitbucket. Вы также можете установить их и найти исходники в ~/.local/share/gnome-shell/extensions/).

При поиске чего-либо для использования или дополнительной документации по конкретной функции вы также можете обратиться к руководствам по привязкам на разных языках (хотя параметры и возвращаемые значения могут не совпадать).


И последнее, но не менее важное, вот несколько советов по отладке:

LookingGlass не особо помогает. Он показывает только одну строку исключения (описание) и только в том случае, если они возникают во время запуска (при первом запуске вашего расширения).

Для получения полной информации о StackTraces и исключениях времени выполнения обратитесь к ~/.xsession-errors -file. Это может быть очень долго и раздутым. Я использую этот удобный скрипт, чтобы прочитать его:

# Grabs the last session-errors from the current X11 session.
# This includes full Stack-Trace of gnome-shell-extension errors.
# See https://live.gnome.org/GnomeShell/Extensions/StepByStepTutorial#lookingGlass
tail -n100 ~/.cache/gdm/session.log | less

Обратите внимание, что начиная с Gnome 3.6, если вы используете gdm качестве диспетчера отображения, текущий журнал сеанса представляет собой файл ~/.cache/gdm/session.log.

В некоторых новых дистрибутивах, использующих systemd, вы можете получить журналы ошибок с:

journalctl -f /usr/bin/gnome-session

Для отладки prefs-части вашего расширения вы можете запустить настройки, используя gnome-shell-extension-prefs -tool из терминала, чтобы увидеть любой вывод-исключение на консоли (вы также можете вызвать такой инструмент, как gnome-shell-extension-prefs [uuid], чтобы напрямую показать ваши настройки расширений).

Поскольку в настоящее время нет реального способа отладки с помощью точек останова (есть, но это сложно), вы можете войти в консоль для быстрой проверки, используя print() -function. Вы увидите вывод, как упомянуто выше (либо в файле ошибок сессий, либо в терминале при запуске gnome-shell-extension-prefs -tool).


Несмотря на то, что это может быть немного трудно понять, структура расширения довольно мощная. Удачи!


Я написал пост в блоге с более подробной информацией, которую можно найти здесь: Создание расширений Gnome-Shell

Ответ 2

Подробный список ссылок можно найти на странице Gnome Developer - API Reference.

Я использовал следующее для моего расширения, но ваше использование может отличаться:

  • GTK + 3
    GTK + - это основная библиотека, используемая для создания пользовательских интерфейсов в приложениях GNOME. Он предоставляет элементы управления пользовательским интерфейсом и обратные вызовы сигналов для управления пользовательскими интерфейсами.

  • GDK 3
    GDK - это промежуточный слой, который изолирует GTK + от деталей оконной системы.

  • Clutter
    Clutter - это основанная на GObject библиотека для создания быстрых, визуально богатых графических пользовательских интерфейсов.

  • Предпросмотр GObject
    GObject Introspection стремится обеспечить уровень промежуточного уровня между (на основе GObject) C-библиотеками и языковыми связями.

  • Shell
    Справочное руководство по корпусу

  • St
    St - Shell Toolkit - это набор инструментов GNOME Shell, основанный на использовании Clutter, который определяет полезных участников. Некоторые из этих участников, такие как StBoxLayout и StBin, реализуют различные варианты компоновки.

  • Спецификация знаковой темы
    Эта спецификация freedesktop.org описывает общий способ хранения тем значков.

ПРИМЕЧАНИЕ. Эти последние два очень полезны при поиске параметров визуальных элементов!

  • PyGTK
    PyGTK - это GTK + для Python. Эта ссылка содержит раздел для каждого модуля PyGTK Python (который соответствует базовой библиотеке GTK +), содержащий описания классов.

  • PyGObject
    PyGObject - это модуль расширения Python, который обеспечивает чистый и последовательный доступ ко всей программной платформе GNOME с помощью GOzject Introspection. В частности, это Python Bindings для GLib, GObject, GIO и GTK+.
    Эта ссылка содержит главу для каждого модуля PyGObject, содержащего описания классов.