当 Xorg 会话聚焦时如何触发脚本?

当 Xorg 会话聚焦时如何触发脚本?

我的系统上通常运行 2 个 Xorg 会话,每个会话都在不同的虚拟终端上并与各自的系统用户一起使用:一个用于工作,另一个用于休闲。

我不会经常在它们之间切换,但当我这样做时,我必须记住在第一个会话中关闭我的时间跟踪器软件,然后在我的目标会话中启动它。这是因为rescuetime [1] 无法同时监听2 个xorg 会话。

因此,每当 Xorg 会话意识到它已经发挥作用时,通过某种方式触发脚本,我可以终止正在运行的救援时间进程并启动一个新的进程。

[1]https://www.rescuetime.com

答案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 内核。

相关内容