125 votes

Comment redémarrer GNOME Shell à partir de la ligne de commande ?

Je voudrais implémenter un raccourci clavier pour redémarrer gnome-Shell chaque fois que celui-ci se plante ( quelques bugs ne sont pas encore fixés). Pour cela, j'aurais besoin d'une ligne de commande pour redémarrer le Shell.

El Alt + F2 et restart La commande ne fonctionnera pas lorsque le Shell est écrasé car l'invite est implémentée. sur le Shell.

Dès lors, comment redémarrer le gnome-Shell à partir de la ligne de commande ?

3voto

mipmip Points 141

Le Gnome 40 l'équivalent de Alt+F2 restart est :

busctl --user call org.gnome.Shell /org/gnome/Shell org.gnome.Shell Eval s 'Meta.restart("Restarting…")'

J'ai trouvé cette astuce moi-même dans https://www.linuxuprising.com/2020/07/how-to-restart-gnome-Shell-de-la-commande.html .

1voto

jgindin Points 863

J'ai imaginé cette fonction pour déconnecter les utilisateurs (voir en bas de page)

Il suppose

  • vous avez les permissions sudo
  • vous avez bash
  • les utilisateurs ont une session X en cours (bien que vous deviez être en mesure de lancer plusieurs fois la même commande de déconnexion pour vous débarrasser des sessions restantes).

Vous pouvez lui donner plusieurs noms d'utilisateur :

logout john jane mike elisa

Et vous pouvez lui donner des options supplémentaires :

logout john --force

J'ai donc la fonction d'aide suivante :

function forcelogout() {
    logout "$@" --no-prompt --force
}

Notes :

  • Il s'agit d'un instrument brutal qui fonctionne en copiant simplement l'ensemble de l'environnement de la session. Il pourrait être plus sélectif.
  • La déconnexion semble parfois prendre un certain temps
  • Dans de rares cas, la session continue d'être signalée jusqu'à ce que quelqu'un visite le vt où la session s'est déroulée, mais il n'y a plus rien).

CODE

function logout() {
    local USERNAME
    export USERNAMES=( ) 
    while [ -n "$1" ]; do case "$1" in
        -* ) break ;;
        *) USERNAMES+=( "$1" ); shift ;;
    esac; done

    for USERNAME in "${USERNAMES[@]}"; do
        local SESSION_PID=$(pgrep -fu "$USERNAME" gnome-session|head -1)
        if [ -n "$SESSION_PID" ]; then
            (
                sudo -u "$USERNAME" cat "/proc/$SESSION_PID/environ" | xargs -0 -n 1 echo export
                echo "gnome-session-quit --logout $@"
            ) | sudo -u "$USERNAME" sh -;
        fi
    done
}

1voto

MoreIT Points 111

J'ai défini un alias : alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'

Vous pouvez peut-être démarrer un terminal en cliquant avec le bouton droit de la souris sur l'arrière-plan et en tapant à cet endroit (alt-tab est aussi un dysfonctionnement), sinon, connectez-vous à un tty avec par exemple ctrl-alt-F2 et exécutez à partir de là.

0voto

myset Points 246

Afin de redémarrer correctement tous les éléments liés, je préfère redémarrer toute la pile (si tty1..4 fonctionne).

sudo killall -9 gdm
sudo killall -9 gdm3
sudo killall -9 lightdm

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X