6

Для очень специфического программного приложения мы поддерживаем базу машин, работающих под управлением 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 ответов5

4

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

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

killall fvwm
fvwm

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

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

fvwm --replace

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

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

1

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

Вот некоторые случаи, когда «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
0

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

kill -SIGUSR1 pid

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

killall -SIGUSR1 fvwm
0

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

$ FvwmCommand Restart
0

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

Но FVWM будет перезапущен на SIGUSR1.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .