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

123

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

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

gnome-shell --replace

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

jk_
источник
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

Другие методы используют более разрушительные средства, которые не должны закрывать все приложения.

Braiam
источник
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 может отключить все расширения, принудительно выйти из системы или иным образом вести себя не в удобной для пользователя манере.
korc
источник
Я создал функцию оболочки, которая устанавливает 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

Если это правильный путь, я не знаю. Для меня это работает каждый раз.

Landas
источник
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. Это будет работать до тех пор, пока оболочка не станет непригодной для использования.
markackerman8-gmail.com
источник
Метод 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 для перезагрузки.

Дилан Certain
источник
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