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