从守护程序运行时XOpenDisplay失败(C语言)

时间:2016-12-21 00:14:39

标签: c linux daemon xserver idle-timer

一些简单的项目在我的覆盆子pi上工作,它在一些系统事件(如磁盘读取,以太网通信,处理器过载)上以不同方式闪烁一些LED,这些LED需要关闭一些系统空闲后的时间(当没有检测到系统活动时,这些LED的强度会发生变化)。

为了实现空闲检测,我使用XScreenSaver,直到这里,一切都运行完美。

由于我的项目需要作为守护进程(etc / init.d)执行并且需要以root权限运行(因为pigpio库),与X Server的通信(通过XOpenDisplay)每次都返回NULL,即使系统也是如此准备就绪,并在图形界面。在终端上,手动运行,一切都很完美。

正如我的研究所做的那样,我知道在启动时没有可用的控制台时无法访问X Server,并且出于安全原因无法访问它。

所以我问,我怎样才能以最简单的方式实现这个目标(检测空闲时间)? (我试过自动重启,尝试在启动脚本上设置DISPLAY变量似乎没什么用。)我是linux开发的新手,无法解决如何正确解决这个问题。

1 个答案:

答案 0 :(得分:0)

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

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

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

非常感谢我对Linux内部和外部人员的深入研究。用户Olaf具有发现明显的巨大知识。