Як перезапустити Gnome-shell, після того як він не реагує / заморожується?


123

Іноді моя оболонка гнома замерзає. Я бачу (чую) фонні процеси, що працюють (відтворюють музику), але я нічого не можу зробити в гномі. Ні Alt+ F2+ R.

Я можу перейти на консоль, використовуючи: Ctrl+ Alt+ F1, увійти як той самий користувач та виконати:

gnome-shell --replace

і повернутись назад Ctrl+ F7, але потім, я отримую дивну поведінку. Наприклад, я не можу редагувати мережеві з'єднання. Я також не можу вийти. Який правильний спосіб перезапустити оболонку gnome?


Чи замерзає оболонка gnome під час використання функції пошуку в будь- gnome-shell overviewякому випадку, якщо ви можете сказати?
v2r

1
Ні, він застигає після входу (в основному), як правило, після скасування.
jk_

2
Поки що я не знайшов робочого рішення. Врешті-решт, я закінчую це рішення .
jk_

Якщо ви використовуєте будь-які розширення оболонки з: extensions.gnome.org, вимкніть їх усі та перезавантажте, щоб побачити, чи не викликав один із них проблем. Я використовую старішу версію gnome-shell і в мене виникло безліч проблем через цю точну причину! (Можливо, це так просто!)
v2r

1
Я спробував деактивувати їх усіх, все ще маючи проблеми :(
jk_

Відповіді:


173

Найпростішим способом є просто натискання Alt+ F2, введіть rпотім Enter. Це буде працювати так довго, як оболонка є корисною.

Ви також можете відправити SIGQUITв gnome-shellпроцес, який закінчить лише оболонку:

killall -3 gnome-shell

Інші методи використовують більш руйнівні засоби, які закривають усі програми, це не повинно.


3
+1, як SIGHUPпідказка, невже тоді не буде правильної команди killall -1 gnome-shell? Принаймні згідно man 7 signal, значення для SIGHUPдорівнює 1. Значення 3 відповідає SIGQUIT. Я надіслав значення 1 в оболонку Gnome, і воно було чисто перезапущено, як очікувалося.
Chriki

@Chriki Так, це було sigquit, через більшість сигналів було б закінчено процес gnome-shell.
Брайам

Я спробував це на Fedora 25, і це killall -3 gnome-shellпризвело до вбивства всіх програм для мене.
comfreak

6
Я б хотів, щоб ми також могли використовувати команду терміналу, яка має точно такий же ефект, як Alt+F2і r, тобто, не прогортаючи весь екран ...
Саді,

Я зіткнувся з проблемою гнома, який зазнав великих аварій на моєму ubuntu vm, мені довелося перезапускати VM кожен раз, коли це сталося. Завдяки мільйону змога ввімкнути та використовувати цю команду вирішує цю проблему.
Натан Ф.

32
  • Якщо ви хочете попросити "добре" gnome-shell перезапустити себе, тоді ви можете викликати його внутрішню функцію перезавантаження через dbus з наступною командою (якщо припустити, що DBUS_SESSION_BUS_ADDRESSenv var встановлено на правильне значення та працює як той самий користувач):

    dbus-send --type=method_call --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:'global.reexec_self()'
    
  • Якщо ви хочете запустити новий екземпляр, gnome-shell --replaceслід зробити добре. На консолі необхідно визначити необхідні змінні оточення , такі як DISPLAY, DBUS*і так далі. Звертатися до/proc/$gnome_shell_pid/environ

  • Якщо ви хочете перезапустити існуючий, тоді killall -HUP gnome-shellце зробите. Якщо ви робите це занадто часто, gnome-shell може вимкнути всі розширення, примусово вийти з системи або іншим чином поводитись недружньо.

Я створив функцію оболонки, яка встановлює DBUS_SESSION_BUS_ADDRESS із середовища gnome-shell (так що можна logout otheruser1 otheruser2) askubuntu.com/a/874504/17941
1717

3
Отримав помилку Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.Shell was not provided by any .service filesбез судо і Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11з судо.
Seanny123

7

Ось інше рішення:

  1. Увійдіть у локальний термінал, натискаючи CTRL+ ALT+ F1.
  2. Виконайте команду:

    sudo kill -HUP $(pidof gnome-shell)
    
  3. Поверніться до графічного інтерфейсу, натиснувши CTRL+ ALT+ F7.

PS: Я використовую lightdm замість gdm3.


1
Просто, і працює як шарм! (Принаймні для мене)
Катаї

6

Якщо ви встановили gnome ubuntu, який у вас повинен бути, ви можете використовувати диспетчер дисплея gnome. У такому випадку вам слід перейти на інший TTY, наприклад Ctrl + Alt + F4, а потім

sudo service gdm restart

Нещодавно я також написав статтю про таку ситуацію:

Довідка, мій робочий стіл Linux висить!

Найкраща удача!


6
будьте обережні , я зробив це в той же TTY, і це вб'є мою поточну сесію ..
RousseauAlexandre

це повністю трахнуло поточну сесію: вона почала блимати, а потім перейшла до нірвани .. довелося перезавантажуватися.
Нік О'Лай

5

Оскільки вас не влаштовує gnome-shell --replace, ви можете спробувати перезапустити сам диспетчер дисплеїв.

sudo service lightdm restart

Я думаю, що це вб'є інші процеси, якими ви керуєте. Також зверніться до http://worldofgnome.org/how-to-restart-gnome-shell-when-freezes-if-ever/

Якщо ви серйозно впадаєте у щось, що змушує вас замерзати, увімкніть SysRq, як згадується в https://www.kernel.org/doc/Documentation/admin-guide/sysrq.rst , а потім дайте <alt><sysrq/print_screen_key><k>вбити все, що там є на екран.


3
Перезапуск lighdm працює, але я хочу цього уникнути, бо мені доводиться знову відкривати все з нуля. Особливо, якщо я знаю, що це проблема оболонки Gnome і її перезапуск майже працює.
jk_

Мені невідомі інші способи переосмислити тільки оболонку гнома. Ви спробували, чи DISPLAY=:7 gnome-shell --replaceпрацює?
Джей Аурабінд

1
Ні, це не так, я використовую дисплей, коли wпоказується дисплей, відмінний від : 0 . Якщо я використовую неправильний дисплей, я отримую помилку.
jk_

Вибачте, у мене немає варіантів. Напевно, ви повинні запитати у списку розсилки користувачів gnome / розробника. Спершу з’ясуйте, чому у вас виникають відхилення від alt-f2-rабо, gnome-shell --replaceколи це рекомендований спосіб гнома.
Джей Аурабінд

Так само я. Я навіть дотримувався цього посилання, встановлюючи більше змінних ENV, але я все одно не можу редагувати мережеві з'єднання при перезапуску gnome-shell з іншого терміналу. Врешті-решт я закінчую цю хитрість
jk_

2

У мене іноді виникають ті ж проблеми, що ви описуєте, і моє рішення:

Ctrl+ Alt+ F1, увійдіть як той самий користувач та виконайте:

sudo pkill -9 ^gnome-shell

І повернутися назад з Ctrl+ Alt+F7

Якщо це правильний шлях, я не знаю. Для мене це працює щоразу.


3
Це знищить усі екземпляри користувачів gnome-shell, які можуть бути не тим, що ви хочете робити в багатокористувацькому сценарії. Зазвичай у вас є тільки вбити власний (pkill -HUP гнома-оболонки)
Steeve МакКолі

3
kill -9 трохи руйнівний Я думаю: robertwe.github.io/2015/03/19/why-you-shoudnt-use-kill--9
Роберт

чудово це працює для мене ...! ти врятуєш мій день. цінується.
NomanJaved

2

Перезапустіть X

  • Спочатку знайдіть, який диспетчер дисплеїв використовує ваш Ubuntu за допомогою наступної команди:

    cat /etc/X11/default-display-manager
    

    в моєму випадку це /usr/sbin/gdm3

    Зсередини X або зовні X

  • У способах з 1 по 4 дізнайтеся, який дисплей ви використовуєте за допомогою wкоманди.

    w
    

    відповідь може бути, наприклад tty3, (для цього клавішею "повернутися до мого дисплея" моєї (ack's) є Ctrl + Alt + F3

Методи

  1. Ctrl + Alt + F1 для виходу та Ctrl + Alt + F3 для повернення назад
  2. sudo /etc/init.d/gdm3 restart
  3. systemctl restart gdm.service
  4. sudo service gdm3 restart
  5. dbus-send --type=method_call --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:'global.reexec_self()'
  6. Простий спосіб - просто натиснути клавішу Alt + F2, а rпотім введіть і натисніть Enter. Це буде працювати так довго, що оболонка не є корисною.

Метод 5 відхилено дослівно з відповіді korc, а 6 - з відповіді Braiam . Плагіат не проти правил, але це точно не круто. Все, що вам потрібно зробити, це вказати, що твір не є вашим власним, додавши його в лапки, і надайте атрибуцію, включивши посилання на публікацію джерела та посилання на сторінку профілю автора. Детальніше дивіться у цьому дописі в блозі: Потрібне
атрибуція

1
  1. Натисніть Ctrl + Alt + F2, щоб перейти до вікна терміналу. Іноді це неможливо.

  2. Натисніть Alt + SysRq + R, щоб отримати клавіатуру.

  3. Якщо натиснути Ctrl + Alt + F2 раніше не вдалося, спробуйте його ще раз.

  4. Натисніть Alt + SysRq + E, щоб припинити всі процеси.

  5. Натисніть Alt + SysRq + I, щоб знищити всі процеси.

  6. Натисніть Alt + SysRq + S для синхронізації дисків.

  7. Зачекайте повідомлення ОК або Готово. Якщо ви не бачите повідомлення, подивіться на свій жорсткий диск, щоб побачити, чи синхронізація змінилася.

  8. Натисніть Alt + SysRq + U, щоб відключити всі дискові диски.

  9. Зачекайте повідомлення ОК або Готово. Якщо ви не бачите повідомлення протягом 15-30 секунд, припустіть, що диски відключені (або що неможливо відключити), і продовжуйте.

  10. Натисніть Alt + SysRq + B для перезавантаження.


0

kill -15 gnome-shellне працює для мене, але kill -9робить. Я думаю, це тому, що kill -9запускає segfault, який запускає gnome-shell, щоб перезапустити себе, а kill -15не.


2
kill -9не запускає сегмента за замовчуванням. Він посилає SIGKILL - нерозбірливий сигнал, для якого єдиною дією є негайне припинення. Її слід використовувати лише тоді, коли програма не відповідає на SIGTERM, а це 15.
muru

pkill -11 gnome-shellвикликає сегментацію, оскільки це буквально те, що робить сигнал 11. BTW, killпотрібен ідентифікатор процесу, а не ім'я процесу. Ви мали на увазі pkillабо killall?
TSJNachos117
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.