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

51

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

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

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

Вениамин
источник
ПРИМЕЧАНИЕ: Alt + F2 и restartостановит все запущенные программы. (Я до сих пор не знаю, как перезапустить графический интерфейс, не останавливая программы.)
Андрей Макуха

Ответы:

48

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

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

--replace             Replace the running window manager
Джокердино
источник
2
Спасибо, я не был уверен --replace= "перезагрузка".
Бенджамин
4
Начиная с GNOME Shell 3.30.1 в Ubuntu 18.10, это решение больше не работает и выводит пользователя на экран входа в систему, теряя всю свою работу. Правильным решением теперь является командная строка: "killall -3 gnome-shell" или ALT + f2 и r (если это возможно).
Роджерс
1
ALT+f2(Показать командную строку) + gnome-shell --replaceбудет хорошо работать в 18.04. Все запущенные программы не будут остановлены.
lifeisfoo
Я добавляю амперсанд в конец команды, чтобы поместить процесс в фоновый режим, чтобы я мог закрыть терминал, не убивая gnome-shell:gnome-shell --replace &
Тедди
ВНИМАНИЕ: gnome-shell --replaceна моем компьютере с Ubuntu 19.10 большинство запущенных приложений закрывалось, и gnome-shell входил в состояние проблемы с белым экраном и приглашением перезагрузить компьютер.
Спарр
31

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

agustibr
источник
5
Это правда, но точно не вопрос. Тогда возникает вопрос: что происходит, когда вы это делаете. Так что вы можете сделать это сами
сехе
4
Начиная с GNOME Shell 3.30.1 в Ubuntu 18.10 и командной строки: «killall -3 gnome-shell» - единственные решения, опубликованные здесь, которые работают. Все остальные выгоняют пользователя на экран входа, теряя всю свою работу.
Роджерс
1
Попробовал это на Debian Buster. Ошибка «Перезапуск недоступен на Wayland».
Ливинстон
27

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

Денис
источник
2
Я не знаю, почему люди продолжают рекомендовать эту команду. Все, что это делает, это убивает gnome-shell. Как вы ответили на вопрос о перезапуске?
smac89
1
Возможно, потому что это хорошее решение, когда другая команда не работает. Я пробовал оба, выбранный - хороший, но не решил мою проблему, хотя это и помогло.
Митро
2
Начиная с Ubuntu 18.10, GNOME Shell 3.30.1 - ЭТО ПРАВИЛЬНОЕ РЕШЕНИЕ. Все остальные решения перезапускают сеанс и выводят пользователя на экран входа в систему, теряя всю свою работу.
Роджерс
3
SIGQUIT (3) не убивает процесс
Джек Уэйси
Казалось, это работает для меня. В то время как я использовал gnome-shell --replace &раньше. Это работало, но продолжало работать в терминале. У меня была проблема с видео на YouTube в полноэкранном режиме, в результате чего Dash-to-Dock и панель зависли. github.com/micheleg/dash-to-dock/issues/…
Natetronn
5

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

Кристофер Кайл Хортон
источник
3
Начиная с GNOME Shell 3.30.1 в Ubuntu 18.10, это решение больше не работает и выводит пользователя на экран входа в систему, теряя всю свою работу. Правильным решением теперь является командная строка: "killall -3 gnome-shell" или ALT + f2 и r (если это возможно).
Роджерс
не работает для удаленного сеанса, поэтому, когда оболочка gnome зависла, это не работает.
Джек Уэйси
5

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

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

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

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

  • у вас есть права 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
}
sehe
источник
1

Я определил псевдоним: 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 и запустите его оттуда.

MoreIT
источник