如何在 Awesome WM 中优雅地重新启动/关闭?

如何在 Awesome WM 中优雅地重新启动/关闭?

我的当前配置用途

kdesu shutdown -[rh] now

重新启动/关闭。整个关机过程大约需要1-2秒。但每次启动后,Firefox 都会说它被提前关闭,这很可能表明它被残酷地谋杀了,而不是安息了。如何配置“正常”WM 关闭程序(类似于kill -SIGTERM && sleep 10 && kill -SIGKILL,但最好使用现有的工具)在很棒的 WM 中?

GDM 的相关问题。

答案1

wmctrl可能会帮助你(包名wmctrl)。

wmctrl帮助您与 EWMH/NetWM 兼容的 X Window Manager 进行交互。我不确定 AwesomeWM 是否符合这个描述,但如果符合这个描述,这个答案就有效。

$ wmctrl -l
0x0100002d  1 stewbian arch linux - How to reboot/shut down gracefully in Awesome WM? - Unix & Linux Stack Exchange — Mozilla Firefox
0x01200007  0 stewbian ~ : bash — Konsole
$ wmctrl -c 0x01200007

可以编写脚本来列出所有窗口 ( wmctrl -l)、迭代列表并关闭每个窗口 ( wmctrl -c)。完成后,然后关闭。

#!/bin/bash

wmctrl -l | awk '{ print $1 }' | while read -r windowid; do
  wmctrl -c $windowid
done

shutdown -h now

如果这不起作用, wmctrl可以获取父进程的 PID,您可以kill向每个 PID 发送信号 ( )。

#!/bin/bash
pids=$(wmctrl -lp | awk '{print $3}')
kill -SIGTERM $pids
sleep 2

pids=$(wmctrl -lp | awk '{print $3}')
kill -SIGKILL $pids
sleep 2

shutdown -h now

您还可以按进程拆分它。您可以将 SIGTERM 发送到标题栏中带有 Firefox 的窗口,但将 SIGINT 发送到 QtCreator 的实例,然后将 SIGABRT 发送到其他所有内容,包括 Firefox 和 QtCreator(如果它们仍然存在)。

#!/bin/bash
pids=$(wmctrl -lp | awk '/Firefox/{print $3}')
kill -SIGTERM $pids

pids=$(wmctrl -lp | awk '/Qt Creator/{print $3}')
kill -SIGINT $pids

sleep 10

pids=$(wmctrl -lp | awk '{print $3}')
kill -SIGABRT $pids

shutdown -h now

答案2

您可能希望以有序的方式结束会话。 SuperUser 的这个答案似乎可以实现这一点: https://superuser.com/questions/395820/how-to-properly-end-a-kde-session-from-shell-without-root-privileges

相关内容