Как перезапустить fvwm2 из командной строки?

Для очень специфического программного приложения мы поддерживаем базу машин, работающих под управлением fvwm 2.5. Для обновления структуры меню файл конфигурации по умолчанию fvwm2rc заменяется в процессе обновления, выполняемого системой управления пакетами. Чтобы включить новую структуру меню после обновления, пользователь должен вручную выполнить действие: перезагрузить компьютер, повторно войти в систему, перезапустить fvwm. Предпочтительным действием является выбор "Диспетчер окон> Перезапустить Fvwm2", так как тогда не требуется вход в систему, и даже окна выживают.

Вопрос: Как я могу вызвать эквивалентное действие как "Перезапустить Fvwm2" из командной строки или системы управления пакетами? Следующая команда не работает (как и аналогичные):

fvwm -c "Restart"
[FVWM][SetupICCCM2]: <<ERROR>> another ICCCM 2.0 compliant WM is running, try -replace

"-replace" не вариант, так как после его вызова необходимо снова войти в систему.

5 ответов

Решение

Вам нужно либо заставить fvwm перечитать конфигурацию, либо перезапустить ее полностью. Кроме того, я не совсем уверен, что -c делает то, что вы хотите.

Быстрый или грязный способ будет:

killall fvwm
fvwm

Примечание: Пожалуйста, не выполняйте это в системе BSD или Solaris, так как killall остановит процесс init там. killall имя процесса только для Linux.

Но я не уверен, что это не разрушит некоторую информацию о окне (местоположение, размеры и т. Д.). Или вы можете попробовать заменить текущий сеанс:

fvwm --replace

Это должно завершить старый процесс fvwm, запустить новый и даже сохранить окна правильно.

Если fvwm - это ваш x-сеанс, вы все равно можете попытаться использовать FvwmCommand, внешний командный интерфейс, который, похоже, может отправлять команды текущему fvwm.

FvwmCommand требует FvwmCommandS ФИФО должен быть открыт. Если вы не можете быть уверены, что у всех ваших пользователей есть такой, он не будет работать.

Но FVWM перезапустится на SIGUSR1.

Перезапуск FVWM будет работать, даже если это последняя команда в .Xsession,

Но, как уже говорили другие, если запущенный под X-менеджером сеанса (и FVWM был скомпилирован с поддержкой менеджера сеанса), FVWM не перезапустится сам по себе, он просто завершит работу и будет ожидать его перезапуска менеджером сеанса. Это также повлияет на поведение SIGUSR1.

Руководство говорит нам:

Вот некоторые случаи, когда "Restart fvwm2" или "Restart fvwm" вызывают проблемы:

  • запуск fvwm под менеджером сессий
  • работает fvwm с многоголовыми дисплеями
  • с аргументами командной строки, такими как -f themes-rc или -cmd
  • если первый fvwm2 в $PATH другой

Эти пункты указывают на то, почему вы видите это сообщение, отметьте каждое из них в вашем случае.

Определите некоторые сочетания клавиш для выполнения команды перезапуска (также в руководстве):

Key F1 R N Restart
Key F1 R N Restart fvwm -s
Key F1 R N Restart ~/bin/fvwm -f $HOME/.fvwm/main
Key F1 R N Restart fvwm1 -s -f .fvwmrc
Key F1 R N Restart xterm -n '"X console"' \
  -T \"X\ console\" -e fvwm1 -s

Другой альтернативой является использование FvwmCommand:

$ FvwmCommand Restart

Для меня следующие работы:

kill -SIGUSR1 pid

где pid - это идентификатор процесса fvwm, который нужно перезапустить; проще (в Linux):

killall -SIGUSR1 fvwm
Другие вопросы по тегам