Bouton éteindre

Bonjour,
avec Bookworm/gnome, j’utilisais cette extension pour obtenir un bouton d’extinction dans la barre du haut :
https://extensions.gnome.org/extension/5272/add-a-shutdown-button/

Cependant, il n’est plus possible de l’utiliser avec Trixie/gnome (j’obtiens une erreur). Du moins, je ne sais pas faire : j’ai regardé le code de cette extension mais je ne comprends pas ce qui est fait.

Serait-il possible de faire apparaître le bouton en question dans la barre du haut à l’aide d’une ligne de commande ?

Cordialement,

Michel Suquet

Bonjour,
La barre du haut de quoi?

du bureau gnome.

Normalement il y un applet qui fait ça en standard, comme pour tous les environnement graphique (je n’utilise pas gnome donc je ne peux pas aller regarder).

où trouve-ton cette applet ? Aucune doc que j’ai consultée n’en parle.

Normallement elle y est déjà
image

Il faut 4 clics pour éteindre avec ce qui est installé en standard :
→ un clic pour dérouler le menu
→ un clic pour le bouton marche/arrêt (faux bouton d’extinction) qui déroule un menu
→ un clic pour éteindre (véritable bouton d’extinction)
→ un clic pour confirmer

Ce que je veux c’est déplacer ce véritable bouton dans la barre supérieure, ce que faisait l’extension qui ne fonctionne plus avec Trixie.

Et la séquence de touche CTRL+ALT+SUPP ?

Cela permet d’éteindre mais je voudrai comprendre comment mettre un bouton qui permet aussi cela.

CTRL+ALT+SUPP n’éteint pas avec Trixie mais ferme la session. Avec Bookworm cela éteint : j’avais fait l’essai avec Bookworm.

L’extension est indiquée fonctionner pour Gnome 40 et 42, et Trixie est en gnome-shell 48 : elle date un peu dirait-on…
Elle a l’air toute simple, et lance la commande suivante :
gnome-session-quit --power-off --no-prompt

Moi perso, je presse la touche « windows » et tape « stop », puis la touche entrée.

-=-

Sinon, le code de l’extension a l’air simple, mais depuis Gnome 45, il y a pas mal de changement à apporter notamment sur la déclaration des « import ». L’erreur que tu dois avoir est sans doute celle-ci :
SyntaxError : import declarations may only appear at top level of a module @ resource:///org/gnome/shell/ui/main.js:1:1

D’après ce lien, j’ai essayé les choses suivantes pour être compatible avec les versions Gnome 45+ :

  • modif du fichier metadata.json pour y ajouter la version 48 (et retirer les versions < à 45).

  • modif du fichier extension.js pour se conformer aux nouvelles syntaxes d’import, ce qui donne ça pour les lignes concernées :

    import GObject from ‹ gi://GObject ›;
    import St from ‹ gi://St ›;
    import GLib from ‹ gi://GLib ›;

    import * as Main from ‹ resource:///org/gnome/shell/ui/main.js ›;
    import * as PanelMenu from ‹ resource:///org/gnome/shell/ui/panelMenu.js ›;
    import * as PopupMenu from ‹ resource:///org/gnome/shell/ui/popupMenu.js ›;

J’ai réussi à avoir l’extension activée sans erreur à l’ouverture de session, mais hélas pas d’icône dans la top bar… :cold_sweat: Mais bon, je ne suis pas dev et j’ai bien tatonné pour arriver à ça…

1 J'aime

Cette extension était d’ailleurs déjà incompatible avec une version à jour de bookworm : gnome-shell 42, ça date un peu (2022) !

Il faudrait en trouver une compatible gnome-shell 45 minimum.

Sinon tu créé un lanceur avec la commande citée, tu lui donne une icône particulière et voilà.

Merci pour les pistes de modifications. En effet, il y a pas mal de choses à revoir.

Pour une extension compatible 45, il y a celle-ci :
https://extensions.gnome.org/extension/6484/logout-button-on-panel/

J’avais pensé aussi à cette idée mais je me demande si on peut incorporer un lanceur dans la barre supérieure.

Bon, alors c’est facile : tu installes cette extension, et tu édites le fichier ~/.local/share/gnome-shell/extensions/logoutbutton@lfarkas.org/extension.js, et tu remplaces à la fin :

function _DoLogout() {
  var sessionManager = new GnomeSession.SessionManager();
  sessionManager.LogoutRemote(LOGOUT_MODE_NORMAL);
}

par :

function _DoLogout() {
  var sessionManager = new GnomeSession.SessionManager();
  sessionManager.ShutdownRemote();
}

Tu peux aussi changer l’icône, puisqu’il y a un dossier icons… Et même t’amuser à changer le nom de la fonction si tu veux faire qque de plus propre.
Attention toutefois en cas de mise à jour de l’extension !

Merci pour les modifications : cela fonctionne. J’ai ajouté 2 icônes pour le bouton marche/arrêt.

Par contre, ce serait mieux d’avoir une extensions enregistrées sous une UUID telle que shutdownbutton@asr-webdesign.fr pour se mettre à l’abri d’une mise à jour. Je vais voir si cela est possible mais je crains qu’il y ait une vérification sur le site des extensions https://extensions.gnome.org/.

En attendant, je vais aussi explorer la possibilité d’ajouter un lanceur dans la barre supérieure.

Tu contactes le dev de l’extension logout-button-on-panel et tu lui demandes (pull request) s’il ne peut pas créer une autre extension shutdown-button-on-panel ! Ici :
https://github.com/lfarkas/gnome3-extensions/pulls

Ou tu la crées toi-même si tu te sens capable…

Je viens de créer une issue sur son site de développement :

Bon, ben tu t’es fait jeter apparemment (l’issue est closed). :cold_sweat:
Mais pourquoi as-tu créé une « issue » (soit un bug) ? Son extension fonctionne très bien, il fallait créer un « pull request » (une demande) comme je te l’avais dit. En plus écrire en FR, mentionner l’autre extension, je crois que tu t’y es mal pris… Mais bon, ce n’était pas garanti pour autant qu’il accepte.

Mais tu peux très bien te faire ta propre extension : tu dois juste donner le même uuid dans le fichier metadata.json que le nom du dossier de l’extension (par exemple shutdownbutton@michel).

Ensuite, tu peux aller jusqu’à remplacer partout le mot logout par shutdown, même dans le fichier extension.js. Tu peux aussi virer la ligne const LOGOUT_MODE_NORMAL = 0; puisque qu’elle est devenue inutile.
Et voilà, à la fin, tu as ta propre extension, qui ne risque pas une mise à jour non souhaitée.

Tu peux regarder cette page pour avoir des infos : How to Create A GNOME Extension - CodeProject