Как перезапустить Gnome-shell, после того как он перестал отвечать / зависать?


123

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

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

gnome-shell --replace

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


Gnome-shell зависает при использовании функции поиска 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 да, это было так, через большинство сигналов можно было бы завершить процесс оболочки gnome-shell.
Брайам

Я попробовал это на Fedora 25 и в killall -3 gnome-shellрезультате убил все приложения для меня.
Comfreak

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

Я столкнулся с проблемой сбоя gnome на моем Ubuntu VM, мне приходилось перезапускать виртуальную машину каждый раз, когда это происходило. Возможность использования ssh и использования этой команды решает эту проблему, спасибо миллиону.
Натан Ф.

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 (так что вы можете logout otheruser1 otheruser2) askubuntu.com/a/874504/17941
сэх

3
Получил ошибку Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.Shell was not provided by any .service filesбез sudo и Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11с sudo.
Seanny123

7

Вот другой обходной путь:

  1. Войдите в локальный терминал, нажав CTRL+ ALT+ F1.
  2. Запустите команду:

    sudo kill -HUP $(pidof gnome-shell)
    
  3. Вернитесь в графический интерфейс, нажав CTRL+ ALT+ F7.

PS: я использую lightdm вместо gdm3.


1
Просто и работает как шарм! (По крайней мере для меня)
Катаи

6

Если вы установили ubuntu gnome, который у вас должен быть, возможно, вы используете менеджер дисплеев gnome. В этом случае вам следует перейти на другой TTY, например, Ctrl + Alt + F4, а затем

sudo service gdm restart

Я также недавно написал статью о такой ситуации:

Помогите, мой Linux Desktop зависает!

Удачи!


6
будь осторожен , я сделал это на том же TTY, и это убило мою текущую сессию ..
РуссоАлександр

это полностью испортило текущую сессию: оно начало мигать, а затем пошло в нирвану ... пришлось перезагрузиться.
Ник О'Лай

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работает?
Джей Aurabind

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, (для этого моя клавиша «вернуться к моему отображению» - 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 дословно снят с ответа Корча, а 6 - с ответа Брайама . Плагиат здесь не противоречит правилам, но это определенно не круто. Все, что вам действительно нужно сделать, это указать, что работа не принадлежит вам, поместив ее в кавычки, и дать атрибуцию, включив ссылку на исходное сообщение и ссылку на страницу профиля автора. Для получения дополнительной информации см. Этот пост в блоге: Требуется
указание

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не вызывает segfault. Он посылает SIGKILL, неуловимый сигнал, для которого единственное действие - немедленно выйти. Его следует использовать только в том случае, если приложение не отвечает на SIGTERM, т.
Е.

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