Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tutoriel:creer_une_extension_gnome [Le 03/06/2017, 14:07]
YoBoY liens
tutoriel:creer_une_extension_gnome [Le 24/10/2017, 13:06] (Version actuelle)
Roschan à supprimer
Ligne 1: Ligne 1:
-{{tag>gnome tutoriel programmation environnements personnalisation extensions_GNOME BROUILLON}} +~~REDIRECT> :​utilisateurs/​roschan/tutoriel/creer_une_extension_gnome~~
- +
------ +
- +
-====== Tutoriel : programmer une extension Gnome Shell ====== +
- +
-Ce tutoriel concerne les personnes intéressées dans la **programmation** d'​extensions Gnome Shell. +
- +
-Les informations présentées ici sont normalement valables au moins pour les versions 3.18 à 3.24 de Gnome Shell. +
- +
-<note important>​Je partage ici mon expérience personnelle,​ mais je ne suis pas programmeur ni informaticien. +
- +
-J'ai appris à faire des extensions "en autodidacte"​ et mes conseils sont sans aucun doute perfectibles,​ je ne suis en aucun cas une autorité en la matière.</​note>​ +
- +
-===== Introduction ===== +
-==== Qu'est Gnome Shell ? ==== +
-Le vocabulaire autour de [[:​Gnome]]/​Gnome 3/[[:Gnome Shell]] est parfois confus. \\ +
-Gnome est un ensemble de logiciels libres formant un environnement de bureau. Depuis la version 3 de cet environnement,​ Gnome Shell constitue le //shell graphique// de l'​[[:​environnements|environnement]] Gnome, c'​est-à-dire qu'il fournit l'​interface graphique venant se greffer autour du [[:​gestionnaire de fenêtres]] (nommé [[:Mutter]]). +
- +
-Tous les 6 mois, aux alentours de l'​équinoxe,​ une version stable de Gnome est diffusée, numérotée 3.xx, où xx est un numéro pair. Les distributeurs (les personnes qui mettent à disposition les paquets des distributions) mettent alors quelques jours à quelques mois avant de proposer ces paquets aux utilisateurs+
- +
-<​note>​Il est possible, notamment avec les Ubuntu antérieurs à mi-2017, que les versions des logiciels Gnome utilisés ([[:​Nautilus]],​ ...) ne correspondent pas aux versions de Gnome Shell.</note> +
- +
-Vous pouvez connaître votre version de Gnome Shell en tapant <​code>​gnome-shell --version<​/code> +
- +
-==== Le code de Gnome Shell ==== +
-L'​interface Gnome Shell a la particularité d'​être codée en javascript. Ce code est ensuite interprété par un moteur de rendu nommé **Gjs** (basé sur le moteur de rendu javascript de Firefox). +
- +
-Vous le savez peut-être, javascript a la particularité d'​autoriser le //​monkeypatching//,​ c'​est-à-dire qu'une fonction du code peut être réécrite à un autre endroit du code, dynamiquement. On peut donc modifier l'​aspect et le comportement de la quasi-totalité des composants de l'​interface Gnome Shell ! +
- +
-On va d'​abord se procurer le code source de l'​interface par défaut : +
- +
-Rendez-vous à l'​adresse ''​https://​github.com/​GNOME/​gnome-shell/​tree/​gnome-3-xx''​ où xx est votre version de Gnome Shell, cliquez sur le bouton vert pour télécharger le code source au format .zip et décompressez-le avec un gestionnaire d'​archives. +
- +
-La partie du code qui nous intéresse est dans le dossier ''​./​js/​ui'',​ vous pouvez ne conserver que ce dossier là si le reste vous encombre. Je vous conseille d'​ailleurs de changer les permissions de ce dossier pour le mettre en lecture seule : nous n'​allons jamais ni le modifier ni l'​exécuter. +
- +
-==== Javascript ==== +
-Ce tutoriel ​n'est pas un cours sur le javascript, il est conseillé de se familiariser préalablement avec ce langage, qui n'est heureusement pas le plus compliqué en ce monde. +
- +
-Ce n'est pas ici que vous apprendrez la syntaxe des conditionnelles et des affectations,​ ceci dit les explications fournies devraient vous suffire à suivre même si vous débutez. +
- +
-===== Pré-requis ===== +
- +
-==== Les crashs ==== +
-On va ici "​jouer"​ avec Gnome Shell lui-même. Il est très très probable qu'on le fasse crasher à un moment ou à un autre, et il va donc falloir sérieusement améliorer la résilience aux crashs de votre installation. +
- +
-Voici quelques idées ou astuces pour cela : +
- +
-=== En cas de crash du gestionnaire de fenêtre === +
-Utilisez des applications avec des boutons de fenêtre "​CSD",​ de manière à ce que vous ne perdiez pas totalement le contrôle sur vos fenêtres en cas de disparition des barres de fenêtres. +
- +
-Un terminal comme [[:​Terminix]] peut être utile par exemple. +
- +
-=== En cas de crash de Gnome Shell === +
-Tout d'​abord,​ ayez des icônes sur le bureau. +
- +
-Dans ''​~/.local/​share/​nautilus/​scripts'',​ créez un fichier "​Remplacer Gnome Shell" contenant seulement les lignes suivantes : +
-<​file>​ +
-#​!/​bin/​bash +
- +
-gnome-shell -r +
-</​file>​ +
- +
-Vous pouvez maintenant entièrement recharger Gnome Shell à partir du menu "​clic-droit"​ fournit par Nautilus sur les fichiers, et donc notamment sur le bureau. +
- +
-=== En cas de crash total de la session graphique === +
-Avec ''​Ctrl+Alt+F2'',​ vous pouvez vous accédez à une console (tty2) où vous pouvez vous connecter en ligne de commande et par exemple annuler la manipulation ayant généré le crash en 1er lieu. +
- +
-Si vous n'​êtes pas à l'aise en ligne de commande, installez [[:​Wayland#​Weston|Weston]],​ il vous servira d'​environnement de secours pouvant être lancé sur tty2 (par exemple) avec la commande ''​weston''​ (utilise Wayland, et peut donc être lancé en parallèle d'un environnement sur [[:​Xorg]]. +
- +
-==== Tester et débugguer ==== +
-J'​admets ne pas être un grand expert en débuggage, il existe probablement mieux que ce que je suggère ici. +
- +
-Avec ''​Alt+F2'',​ on trouve une fenêtre pour lancer des commandes. Cette fenêtre accepte des commandes "​spéciales"​ internes à Gnome Shell. +
- +
-=== Recharger === +
-La commande ''​r''​ recharge Gnome Shell, cela peut prendre quelques instants. +
- +
-Les extensions notamment sont rechargées depuis le début, comme si l'​ordinateur venait d'​être allumé. +
- +
-=== Looking Glass === +
-La commande ''​lg''​ ouvre //Looking Glass//, un outil dont on reparlera plus tard. +
- +
-=== Voir les logs "en direct"​ === +
-<note important>​Installez l'​extension **Caffeine** et activez-la _tout le temps_ que durera la manipulation ci-dessous. Si Caffeine est désactivée et que votre session se verrouille, vous allez avoir des difficultés à vous y reconnecter.</​note>​ +
- +
-Entrer dans un terminal la commande  +
-<​code>​gnome-shell -r</​code>​ +
-C'est beaucoup plus "​violent"​ que de simplement recharger Gnome Shell, et donc plus long. Toutes les erreurs émises entre autres par les extensions, mais aussi les messages ou les avertissements,​ apparaissent maintenant dans le terminal. +
- +
-Pour pouvoir quitter le terminal, utilisez simplement le script qu'on a créé plus haut. +
- +
-===== Un premier exemple ===== +
-On peut créer une extension en //forkant// une extension existante, mais pour commencer, nous allons utiliser la méthode "​classique"​ en lançant la commande +
-<​code>​gnome-shell-extension-tool --create-extension</​code>​ +
- +
-On vous demande un nom, une description et un identifiant ("​uuid"​). L'​identifiant est souvent au format ''​nom-extension@pseudo'',​ inspirez-vous des identifiants d'​extensions existants dans ''​~/​.local/​share/​gnome-shell/​extensions/''​ (mettez ce dossier dans vos signets Nautilus d'​ailleurs). +
- +
-Analysons les fichiers ainsi créés (''​~/​.local/​share/​gnome-shell/​extensions/''//​votre-uuid//''/''​) : +
- +
-==== metadata.json ==== +
-Ce fichier est **obligatoire** pour qu'une extension soit reconnue par Gnome Shell. +
- +
-Entre accolades, on a une liste de propriétés au format ''"​clef":​ valeur''​ séparées par des virgules. +
- +
-Pour l'​instant,​ il y a les clefs : +
-  * ''​uuid''​ : obligatoire,​ doit correspondre au nom du dossier ; +
-  * ''​name''​ : obligatoire,​ apparaît dans [[:​gnome-tweak-tool]] ; +
-  * ''​description''​ : obligatoire,​ apparaît dans [[:​gnome-tweak-tool]] ; +
-  * ''​shell-version''​ : un tableau (array) de valeurs entre guillemets séparées par des virgules. +
- +
-==== extension.js ==== +
-Ce fichier est **obligatoire** pour qu'une extension soit reconnue par Gnome Shell. +
- +
-==== stylesheet.css ==== +
-Ce fichier n'est pas obligatoire. +
- +
-===== Créons une vraie extension ===== +
- +
-==== Une idée ==== +
- +
-==== extension.js ==== +
- +
-==== S'​adapter à l'​utilisateur ==== +
-=== Ajouter des paramètres === +
-=== Ajouter des langues === +
- +
-==== prefs.js ==== +
- +
-===== Autre exemple d'​extension ===== +
- +
-===== Ce dont je n'ai pas parlé ici ===== +
-Parce que je préfère ne parler que de ce que je comprends à peu près, je n'ai pas abordé certains aspects du développement d'​extensions pourtant très puissants. En voici quelques uns : +
-==== Clutter ==== +
-==== Tweener ==== +
-==== DBus ==== +
- +
-===== Publier l'​extension ===== +
-==== Un site de partage de code ==== +
-==== La plateforme officielle ==== +
- +
-===== Voir aussi ===== +
-https://​wiki.gnome.org/​Projects/​GnomeShell/​Extensions/​StepByStepTutorial +
-https://​developer.gnome.org/​clutter/​ +
-https://​developer.gnome.org/​st/​stable/​ +
-https://​wiki.gnome.org/​Projects/​GnomeShell/​DebuggingJavaScript +
-http://​hosted.zeh.com.br/​tweener/​docs/​en-us/​ +
  • tutoriel/creer_une_extension_gnome.1496491653.txt.gz
  • Dernière modification: Le 03/06/2017, 14:07
  • par YoBoY