对于一个非常具体的软件应用程序,我们维护一组运行 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-session,你仍然可以尝试使用Fvwm命令,外部命令接口似乎能够向当前正在运行的 fvwm 发送命令。
答案2
手册告诉我们:
以下是“重新启动 fvwm2”或“重新启动 fvwm”导致问题的一些情况:
- 在会话管理器下运行 fvwm
- 使用多头显示器运行 fvwm
- 具有命令行参数,例如 -f themes-rc 或 -cmd
- 如果 $PATH 中的第一个 fvwm2 是不同的
这些要点暗示了您为什么会看到该消息,请根据您的情况逐一检查。
定义一些键盘快捷键来执行重启命令(也在手册中):
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 处于打开状态。如果你不能确定所有用户都拥有 FIFO,那么它将无法工作。
但是 FVWM将要在 SIGUSR1 上重新启动。
即使它是中的最后一个命令,FVWM 重新启动也会起作用.Xsession
。
但正如其他人所说,如果在 X 会话管理器下运行(并且 FVWM 已编译了会话管理器支持),FVWM 不会自行重新启动,它只会退出并等待会话管理器重新启动。这也会影响 SIGUSR1 行为。
答案4
对我来说,以下方法有效:
kill -SIGUSR1 pid
其中 pid 是需要重新启动的 fvwm 进程的进程 id;更简单(在 Linux 上):
killall -SIGUSR1 fvwm