如何从命令行重新启动 fvwm2?

如何从命令行重新启动 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” 不是选项,因为调用它后需要再次登录。

答案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需要FvwmCommandSFIFO 处于打开状态。如果你不能确定所有用户都拥有 FIFO,那么它将无法工作。

但是 FVWM将要在 SIGUSR1 上重新启动。

即使它是中的最后一个命令,FVWM 重新启动也会起作用.Xsession

但正如其他人所说,如果在 X 会话管理器下运行(并且 FVWM 已编译了会话管理器支持),FVWM 不会自行重新启动,它只会退出并等待会话管理器重新启动。这也会影响 SIGUSR1 行为。

答案4

对我来说,以下方法有效:

kill -SIGUSR1 pid

其中 pid 是需要重新启动的 fvwm 进程的进程 id;更简单(在 Linux 上):

killall -SIGUSR1 fvwm

相关内容