Як перезапустити 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.