Для очень специфического программного приложения мы поддерживаем базу машин, работающих под управлением fvwm 2.5. Для обновления структуры меню файл конфигурации fvwm2rc по умолчанию заменяется во время процесса обновления, выполняемого системой управления пакетами. Чтобы включить новую структуру меню после обновления, пользователь должен вручную выполнить действие: перезапустить машину, повторно войти в систему, перезапустить fvwm. Предпочтительным действием является выбор «Менеджер окон > Перезапустить Fvwm2», поскольку тогда вход в систему не требуется, и даже окна сохраняются.
Вопрос: Как вызвать эквивалентное действие "Перезапустить Fvwm2" из командной строки или системы управления пакетами? Следующая команда не работает (как и аналогичные):
fvwm -c "Restart"
[FVWM][SetupICCCM2]: <<ERROR>> another ICCCM 2.0 compliant WM is running, try -replace
«-replace» не является вариантом, так как после его вызова необходимо снова войти в систему.
решение1
То, что вы хотите, это либо заставить fvwm перечитать конфигурацию, либо полностью перезапустить его. Кроме того, я не совсем уверен, что это -c
делает то, что вы хотите.
Самый быстрый или грязный способ:
killall fvwm
fvwm
Примечание: пожалуйста, не выполняйте эту команду в системах BSD или Solaris, так как killall завершит там процесс init. killall имя_процесса используется только в Linux.
Но я не уверен, что это не уничтожит некоторую информацию об окне (расположение, размеры и т. д.). Или вы можете попробовать заменить текущий сеанс:
fvwm --replace
Это должно завершить старый процесс fvwm, запустить новый и даже сохранить корректность окон.
Если fvwm — ваш x-сеанс, вы все равно можете попробовать использоватьFvwmКоманда, внешний командный интерфейс, который, похоже, способен отправлять команды в текущий запущенный fvwm.
решение2
Руководствоговорит нам:
Вот некоторые случаи, когда «Перезапуск fvwm2» или «Перезапуск 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
решение3
FvwmCommand
требует, FvwmCommandS
чтобы FIFO был открыт. Если вы не можете быть уверены, что у всех ваших пользователей он есть, это не сработает.
Но FVWMволяперезапуск по SIGUSR1.
Перезапуск FVWM сработает, даже если это последняя команда в .Xsession
.
Но как уже говорили другие, если запущено под X session manager (и FVWM был скомпилирован с поддержкой session manager), FVWM не перезапустится сам по себе, он просто завершит работу и будет ожидать перезапуска session manager. Это также повлияет на поведение SIGUSR1.
решение4
Для меня работает следующее:
kill -SIGUSR1 pid
где pid — идентификатор процесса fvwm, который нужно перезапустить; проще (в Linux):
killall -SIGUSR1 fvwm