web-dev-qa-db-fra.com

Documentation pour l'écriture d'extensions GNOME Shell

On m'a demandé de personnaliser la disposition du bureau GNOME 3. Apparemment, la façon de le faire est d'écrire une "extension".

J'ai réussi à faire certaines des choses que je voulais faire, mais je me sens complètement affamé d'informations. Je ne trouve aucune documentation utile n'importe où. J'ai gaspillé tout jours de ma vie à parcourir frénétiquement chaque terme de recherche imaginable dans une tentative désespérée de trouver des informations utiles.

Le site GNOME a des centaines d'extensions à télécharger. Ce ne sont pas des 3 lignes insignifiantes; ce sont des morceaux de code sophistiqués. Cela défie la croyance que n'importe qui puisse les écrire sans documentation expliquant comment le faire.

S'il vous plaît, quelqu'un peut-il me dire où se trouve la documentation réelle? Jusqu'à présent, le mieux que j'ai réussi à faire est de démonter les extensions existantes en essayant de retrouver la commande magique qui fait le bit spécifique qui m'intéresse. (Pas une tâche facile!)

Les noms de commandes, les chemins des objets, les exemples de programmes, n'importe quoi seraient utiles!

62
MathematicalOrchid

J'ai récemment creusé moi-même. La documentation est généralement clairsemée ou obsolète. Voici quelques sources qui m'ont aidé à démarrer (et à travers le développement):

Étant donné que la documentation est presque indisponible (ou à jour), vous devrez faire beaucoup de lecture source. J'ai lié les sources de gnome-Shell ci-dessus (la partie JavaScript), ce qui est un bon début pour plonger dans des parties qui ne sont pas couvertes par la documentation In-official (qui est la chose la plus complète que vous trouverez).

Ce qui est également particulièrement utile est de vérifier extensions.gnome.org pour les extensions qui font des choses similaires à ce que vous voulez créer, et regardez leurs sources (la plupart d'entre elles sont open-source sur GitHub ou Bitbucket. Vous peut également les installer et trouver les sources sous ~/.local/share/gnome-Shell/extensions/).

Lorsque vous recherchez quelque chose à utiliser ou plus de documentation sur une fonction particulière, vous pouvez également consulter des manuels pour les liaisons dans différents langages (en pensant que les paramètres et les valeurs de retour peuvent ne pas correspondre).


Enfin, voici quelques conseils de débogage :

LookingGlass n'est pas particulièrement utile. Il ne montre qu'une seule ligne d'exception (la description) et uniquement si elles se produisent au démarrage (lorsque votre extension est démarrée pour la première fois).

Pour les StackTraces complètes et les exceptions d'exécution, consultez le fichier ~/.xsession-errors. Cela pourrait être très long et gonflé. J'utilise ceci script pratique pour le lire:

# 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

Notez que depuis Gnome 3.6, si vous utilisez gdm comme gestionnaire d'affichage, le journal de session en cours est le fichier ~/.cache/gdm/session.log.

Sur certaines distributions plus récentes utilisant systemd, vous pouvez obtenir les journaux d'erreurs avec:

journalctl -f /usr/bin/gnome-session

Pour déboguer la partie prefs de votre extension, vous pouvez lancer les préférences en utilisant l'outil gnome-Shell-extension-prefs - depuis un terminal, pour voir toute sortie d'exception sur la console (vous pouvez également appeler l'outil comme gnome-Shell-extension-prefs [uuid], pour afficher directement vos préférences d'extensions).

Puisqu'il n'existe actuellement aucun moyen réel de débogage avec des points d'arrêt (il y en a, mais c'est délicat ), vous pouvez vous connecter sur la console pour une vérification rapide, utilisez la fonction print()-. Vous verrez la sortie comme mentionné ci-dessus (soit dans le fichier d'erreur de sessions ou sur le terminal lors du démarrage de gnome-Shell-extension-prefs - outil).


Bien qu'il puisse être un peu difficile d'y entrer, le cadre d'extension est assez puissant. Amusez-vous !


J'ai écrit un article de blog avec un peu plus de détails , qui peut être trouvé ici: Faire des extensions Gnome-Shell

72
Lukas Knuth

Une liste complète de références peut être trouvée sur la page Gnome Developer - API Reference .

J'ai utilisé ce qui suit pour mon extension, mais votre utilisation peut varier:

  • GTK +
    GTK + est la bibliothèque principale utilisée pour construire des interfaces utilisateur dans les applications GNOME. Il fournit des commandes d'interface utilisateur et des rappels de signaux pour contrôler les interfaces utilisateur.

  • GDK
    GDK est une couche intermédiaire qui isole GTK + des détails du système de fenêtrage.

  • Désordre
    Clutter est une bibliothèque basée sur GObject pour créer des interfaces utilisateur graphiques rapides et visuellement riches.

  • GObject Introspection
    GObject Introspection s'efforce de fournir une couche middleware entre les bibliothèques C (basées sur GObject) et les liaisons de langage.

  • Shell
    Manuel de référence de Shell

  • St
    St - Shell Toolkit - est le toolkit personnalisé basé sur GNOME Shell qui définit les acteurs utiles. Certains de ces acteurs, tels que StBoxLayout et StBin implémente différentes options de mise en page.

  • Spécification du thème de l'icône
    Cette spécification freedesktop.org décrit un moyen courant de stocker des thèmes d'icônes.

REMARQUE: Ces deux derniers sont très utiles pour trouver les paramètres des éléments visuels!

  • PyGTK
    PyGTK est GTK + pour Python. Cette référence contient un chapitre pour chaque Python PyGTK (qui correspond à la bibliothèque GTK + sous-jacente) contenant les descriptions de classe.

  • PyGObject
    PyGObject est un module d'extension Python qui donne un accès propre et cohérent à l'ensemble de la plate-forme logicielle GNOME grâce à l'utilisation de GObject Introspection. Plus précisément, il s'agit de Python Liaisons pour GLib, GObject, GIO et GTK +.
    Cette référence contient un chapitre pour chaque module PyGObject contenant les descriptions de classe.

12
omid