• [^] # Re: voir du côté de /etc/gdm3/PostSession/Default ou un fichier dans le même dossier ?

    Posté par . En réponse au message exécution d'un programme en fin de session gnome (avant déconnexion). Évalué à 3. Dernière modification le 23 août 2024 à 16:47.

    J'ai demandé à chatGPT ... C'est possible (voir le code plus bas). Pour créer une extension, voir https://doc.ubuntu-fr.org/utilisateurs/roschan/tutoriel/creer_une_extension_gnome par exemple, ou https://gjs.guide/extensions/development/creating.html (doc officielle)

    Pour info, GNOME Shell emet un signal 'end session' lorsqu'une session est sur le point de se terminer, c'est-à-dire lorsque l'utilisateur demande à se déconnecter, à redémarrer ou à éteindre l'ordinateur.

    global.display.connect('end-session', ...) : Cette ligne de code connecte ce signal à une fonction de rappel (callback), qui est exécutée lorsque ce signal est émis.

    
    const { St, Main, Shell, Meta } = imports.gi;
    const Dialog = imports.ui.modalDialog;
    const ExtensionUtils = imports.misc.extensionUtils;
    let logoutSignal;
    function init() {
     // Initialisation si nécessaire
    }
    function enable() {
     logoutSignal = global.display.connect('end-session', (display, screen) => {
     // Afficher la boîte de dialogue ici
     let dialog = new Dialog.ModalDialog({
     styleClass: 'prompt-dialog',
     destroyOnClose: false
     });
     dialog.contentLayout.add(new St.Label({
     text: 'Voulez-vous exécuter un script avant de fermer la session ?'
     }));
     dialog.setButtons([
     {
     label: 'Oui',
     action: () => {
     // Exécuter un script shell ici
     Shell.util_spawn(['sh', '-c', '/chemin/vers/votre/script.sh']);
     dialog.close();
     display.end_session(true); // Confirmer la déconnexion
     }
     },
     {
     label: 'Non',
     action: () => {
     dialog.close();
     display.end_session(true); // Confirmer la déconnexion sans exécuter le script
     },
     key: Dialog.DEFAULT_CANCEL_ACTION
     }
     ]);
     dialog.open();
     });
    }
    function disable() {
     // Nettoyage lors de la désactivation
     if (logoutSignal) {
     global.display.disconnect(logoutSignal);
     logoutSignal = null;
     }
    }