Як перезапустити оболонку GNOME з командного рядка?


51

Я хотів би реалізувати комбінацію клавіш, щоб перезапустити gnome-shell, коли ця помилка ( деякі помилки наразі ще не виправлені). Для цього мені знадобиться командний рядок, щоб перезапустити оболонку.

Команда Alt+ F2і restartне працюватиме при збої оболонки, оскільки в оболонці реалізований рядок .

Отже, як перезапустити gnome-shell з командного рядка?


ПРИМІТКА: Alt + F2 і restartзупинить усі запущені програми. (Я досі не знаю, як перезапустити графічний інтерфейс, не зупиняючи програми.)
Андрій Макуха

Відповіді:


48

Була б команда замінити оболонку gnome 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 (якщо можливо).
C.Rogers

1
ALT+f2(показати командний рядок) + gnome-shell --replaceдобре працюватиме в 18.04. Усі запущені програми не будуть зупинені.
lifeisfoo

Я додаю ampersand в кінець команди, щоб перенести процес на задній план, щоб я міг закрити термінал, не вбиваючи gnome-shell:gnome-shell --replace &
Тедді

ПОПЕРЕДЖЕННЯ: gnome-shell --replaceна моїй машині Ubuntu 19.10 більшість запущених програм закрили і gnome-shell ввели проблемний стан з білим екраном та вимагали перезавантажити комп'ютер.
Спарр

31

Найпростіший спосіб - це ввести Alt+ F2і ввести rпотім .


5
Це правда, але точно не питання. Тоді питання: що відбувається, коли ви це робите. Щоб ви могли це зробити самостійно
17:00

4
Станом на GNOME Shell 3.30.1 на Ubuntu 18.10, і командна лінія: "killall -3 gnome-shell" є єдиними розміщеними тут рішеннями. Усі інші виганяють користувача на екран входу, втрачаючи всю свою роботу.
C.Rogers

1
Спробував це на Debian buster. Помилка "Перезапуск недоступний у шляху".
livinston

26

Ви також можете зробити killall -3 gnome-shell.


2
Я не знаю, чому люди продовжують рекомендувати цю команду. Все це - це вбити гнома-шкаралупу. Як ви відповіли на питання про його перезавантаження?
smac89

1
Можливо, тому, що це хороше рішення, коли інша команда не працює. Я спробував і те, і інше - обраний варіант хороший, але не вирішив моєї проблеми, в той час як це зробило.
Мітро

2
Станом на Ubuntu 18.10, GNOME Shell 3.30.1 - ЦЕ ПРАВИЛЬНЕ РІШЕННЯ. Усі інші рішення перезапускають сеанс і виводять користувача на екран входу, втрачаючи всю свою роботу.
C.Rogers

3
SIGQUIT (3) не вбиває процес
Джек Уейсі

Це, здавалося, працює для мене. Тоді як я використовував gnome-shell --replace &раніше. Він працював, але продовжував працювати в терміналі. Проблема, яка у мене виникала, полягала в тому, що відео з Youtube на повний екран якимось чином спричиняло затримку Dash-to-Dock і панель. github.com/micheleg/dash-to-dock/isissue/…
Natetronn

5

Команда повинна просто бути gnome-shell --replace.


3
Станом на GNOME Shell 3.30.1 на Ubuntu 18.10, це рішення більше не працює, і виштовхує користувача на екран входу, втрачаючи всю свою роботу. Тепер правильним рішенням є командний рядок: "killall -3 gnome-shell", або ALT + f2 та r (якщо можливо).
C.Rogers

не працює для віддаленого сеансу, тому коли оболонка gnome застигла, це не працює.
Джек Уейсі

5

Якщо все gnome-shellзаморожене, є спосіб перезапустити його з терміналу без перезавантаження всього вікна X:

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

1

Я придумав цю функцію для виходу з користувачів (див. Внизу)

Це передбачає

  • у вас є дозволи на судо
  • у вас баш
  • у користувачів 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
}

1

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

Можливо, ви зможете запустити термінал, клацнувши правою кнопкою миші на фоні та введіть там (вкладка alt також є disfct, також), якщо ні, увійдіть в tty за допомогою ctrl-alt-F2 та запустіть звідти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.