Как перезапустить GNOME Shell из командной строки?

Я хотел бы реализовать сочетание клавиш для перезапуска gnome-shell при каждом сбое ( некоторые ошибки в настоящее время еще не исправлены). Для этого мне понадобится командная строка для перезапуска оболочки.

Alt+F2 и restart Команда не будет работать при сбое оболочки, поскольку подсказка реализована в оболочке.

Следовательно, как перезапустить gnome-shell из командной строки?

10 ответов

Решение

Команда для замены оболочки gnome будет gnome-shell --replace,

Со страницы руководства gnome-shell:

--replace             Replace the running window manager

Самый простой способ - Alt+F2 и набрать r тогда .

Вы также можете сделать killall -3 gnome-shell,

Если весь gnome-shell замерзли есть способ как перезапустить его с терминала без перезапуска всего окна X:

  • Ctrl+Alt+F2 для переключения на терминал
  • войдите в систему с вашими учетными данными (имя пользователя и пароль) и затем выполните:
  • DISPLAY=:0 gnome-shell -r &
  • выйти exit а также
  • Alt+F1, чтобы вернуться к графическому интерфейсу X Window.

Команда должна быть просто gnome-shell --replace,

Gnome 40 эквивалентен Alt+F2 restartявляется:

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

Сам получил этот совет от https://www.linuxuprising.com/2020/07/how-to-restart-gnome-shell-from-command.html .

Отправка сигнала TERM в Gnome Shell 42.1 работает для меня в Ubuntu 22.04:

      pkill -TERM gnome-shell

Примечание. TERM — это сигнал по умолчанию для pkill.

Чтобы правильно перезапустить все связанные, я предпочитаю перезапуск всего стека (если работает tty1..4)

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

Я определил псевдоним:alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'

Вы можете запустить терминал, щелкнув правой кнопкой мыши по фону и введя его (alt-tab тоже dysfct), если нет, войдите в tty с помощью, например, ctrl-alt-F2 и запустите его оттуда.

Я придумал эту функцию для выхода из системы пользователей (см. Внизу)

Предполагает

  • у вас есть права sudo
  • у тебя есть удар
  • у пользователей есть 1 запущенный сеанс X (хотя вы должны иметь возможность выполнить одну и ту же команду выхода из системы несколько раз, чтобы избавиться от оставшихся сеансов)

Вы можете дать ему несколько имен пользователей:

logout john jane mike elisa

И вы можете дать ему дополнительные опции:

logout john --force

Итак, у меня есть следующая вспомогательная функция:

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

Заметки:

  • Это тупой инструмент, и он работает, просто копируя всю среду сеанса. Это может быть более избирательным.
  • Иногда выход из системы занимает некоторое время
  • В редких случаях о сеансе сообщают до тех пор, пока кто-нибудь не посетит vt, где сеанс был запущен, но больше ничего нет

КОД

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
}
Другие вопросы по тегам