![当 Xorg 会话聚焦时如何触发脚本?](https://linux22.com/image/153093/%E5%BD%93%20Xorg%20%E4%BC%9A%E8%AF%9D%E8%81%9A%E7%84%A6%E6%97%B6%E5%A6%82%E4%BD%95%E8%A7%A6%E5%8F%91%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
我的系统上通常运行 2 个 Xorg 会话,每个会话都在不同的虚拟终端上并与各自的系统用户一起使用:一个用于工作,另一个用于休闲。
我不会经常在它们之间切换,但当我这样做时,我必须记住在第一个会话中关闭我的时间跟踪器软件,然后在我的目标会话中启动它。这是因为rescuetime [1] 无法同时监听2 个xorg 会话。
因此,每当 Xorg 会话意识到它已经发挥作用时,通过某种方式触发脚本,我可以终止正在运行的救援时间进程并启动一个新的进程。
答案1
你也许可以编写一些脚本
#!/bin/bash
inotifywait -e modify /sys/devices/virtual/tty/tty0/active
case "$(cat /sys/devices/virtual/tty/tty0/active)" in
tty7) <dothis> ;;
tty8) <dothat> ;;
esac
exec $0 $*
“文件”/sys/devices/virtual/tty/tty0/active
告诉您哪个虚拟控制台是活动的,tty7
或者tty1
等等,并且当您从一个虚拟控制台切换到另一个虚拟控制台时,它会发生变化。该inotifywait
命令只是等待,直到出现modify
该路径名的事件,因此脚本可以检查它是哪个路径名来执行其关联的操作。此后(该exec
行)脚本重新调用自身以捕获下一个虚拟控制台转换。
在基于 Debian 的 Linux 上,您可以找到inotifywait
该软件包的一部分inotify-tools
。路径/sys/..
名需要一个适当安装的sysfs
,它通常从很久以前就属于 Linux 内核。