-2

我在我的树莓派上做一个简单的项目,它在某些系统事件(如磁盘读取、以太网通信、处理器过载)上以不同的方式闪烁一些 LED,并且这些 LED 需要在系统空闲一段时间后关闭(当未检测到系统活动时,这些 LED 会表现出不同的强度)。

为了实现空闲检测,我正在使用 XScreenSaver,直到这里,一切都完美无缺。

由于我的项目需要作为守护进程 (etc/init.d) 执行并且需要以 root 权限运行(因为 pigpio 库),因此与 X 服务器(通过 XOpenDisplay)的通信每次都返回 NULL,即使系统已准备好并且在图形界面中。在终端上,手动运行它,一切正常。

根据我的研究,我了解到,当启动时没有可用的控制台时,无法访问 X Server,并且出于安全原因无法访问它。

所以我问,我怎样才能以最简单的方式实现这一点(检测空闲时间)?(我尝试了自我重启,尝试在启动脚本上设置 DISPLAY 变量似乎没有任何效果。)我是 linux 开发的新手,不知道如何正确解决这个问题。

4

1 回答 1

0

如果有人和我有同样的问题,请回答我自己的问题。

在 X 图形界面之外检测系统不活动(空闲)只是 USB 键盘/鼠标活动的问题,通过在 /proc/interrupt 上监视它们的 IRQ(通常是 IRQ 1 /IRQ 12)或更容易(支持其他 USB 输入,甚至像操纵杆! )通过监视“softirq”行上的/proc/stat,第二个数字列包含当这些设备有一些/任何输入(鼠标移动或按下/释放键)时传输的字节数

这在 C 中很容易实现,在这些字段上 fopen / fread 将值与旧值进行比较。

非常感谢我对 Linux 内部结构和用户 Olaf 的深入研究,他们对发现显而易见的事情有丰富的知识。

于 2016-12-26T05:05:16.340 回答