Как перезапустить замороженный экран в Ubuntu без потери открытых окон?

12

У меня было устройство под управлением Ubuntu 12.04 LTS, его экран завис. Обычно я просто запрыгнул на доступный tty, т.е. Ctrl- Alt- F1и выполнил команду /etc/init.d/lightdm restartили service lightdm restart. Это, однако, убивает все, что у меня есть открыто. Как мне избежать этого?

PeanutsMonkey
источник
1
Вы не можете этого достичь. Это lightdm, который отображает / управляет окнами в системе x.
Apple II
Это также убьет все, что у вас открыто, но однажды ctrl-alt-backspace перезапустит X. Это проще, чем переключиться на TTY, войти в систему и попросить X перезапустить себя. Я не уверен, что это все еще работает, хотя.
@Douglas B. Staple - не работает с Ubuntu 12.04 LTS. Не уверен, работает ли он по-прежнему с другими дистрибутивами или это относится только к Unity.
PeanutsMonkey
Там может быть какой-то способ заменить оконный менеджер во время работы. (Это возможно по крайней мере с GNOME-Shell или с оконным менеджером i3, так что может быть какой-то путь).
FSMaxB
@FSMaxB - Не могли бы вы рассказать, как этого можно добиться с помощью Gnome-Shell или i3 Window Manager?
PeanutsMonkey

Ответы:

12

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Согласно комментарию Брендена, это может быть устаревшим и больше не работать с более новыми версиями Ubuntu. Также, пожалуйста, будьте готовы, что вы можете потерять свои открытые окна.

Теперь я получил его для Unity (я просто заменил оболочку GNOME на Unity без выхода из системы или закрытия окон):

  1. Перейти к tty1 [Ctrl] + [Alt] + [F1]
  2. Введите DISPLAY=:0так, чтобы программы знали, на каком порту найти X-сервер
  3. export DISPLAY
  4. unity --replaceили gnome-shell --replace(вы также можете заменить GNOME-Shell на Unity или Unity на GNOME-Shell)

Это работает, только если X-сервер или GNOME не заблокированы, а только Unity или GNOME-Shell.

Как это работает: связь между программами и X-сервером для отображения их пользовательского интерфейса работает через сетевой сокет. Обычно это "localhost: 0" short ": 0". Устанавливая переменную DISPLAY, программы знают, где найти X-сервер для связи с ним, поэтому программы отображаются на X-сервере на tty7, даже если программа работает на tty1.

Содержимое окон управляется X-сервером, тогда как положение и границы окон управляются встроенным в единство оконным менеджером или оболочкой GNOM, так что есть способ заменить только их, не перезапуская приложения на X-сервере. Сервер.

PS: я просто описываю то, что я понимаю, поэтому, пожалуйста, отредактируйте и исправьте меня, если я ошибаюсь в некоторых моментах.

РЕДАКТИРОВАТЬ: для GNOME-Shell, есть еще один способ перезапустить его. После перехода на tty просто введите pkill -HUP gnome-shell, я не знаю, есть ли что-то подобное для Unity.

FSMaxB
источник
Это сработало как чудо. На самом деле это спасло меня сегодня. Спасибо. Я был бы очень признателен, если бы вы смогли уточнить, что каждый из шагов выполняет в первом шаге. Я не совсем понимаю, что происходит под капотом.
PeanutsMonkey
Спасибо за ответ! Заметьте, что Unity --help говорит: «--replace Run Unity /! \ Это для совместимости с другими интерфейсами рабочего стола и действует так же, как и запуск Unity без --replace»
Том
Также я обнаружил, что для сохранения своих окон мне нужно было запустить единство через sudo.
Том
2
--replace устарела и ничего не делает, и это решение перезапустит ваш сеанс, означая, что вы потеряете все свои окна :(
Brenden
До