我正在尝试根据用户请求制作屏幕保护程序功能(或屏幕消隐),允许屏幕变为空白并通过用户触摸输入唤醒。我遇到的问题是尝试处理唤醒时的第一个“点击”事件,因为这是一个嵌入式平板电脑设备,只有触摸屏,用户根本不知道屏幕关闭时他们在哪里点击(这意味着用户可以取消并点击他们不想要的内容)。
我看到有一个现有问题Xorg - 从屏幕消隐恢复时忽略第一次单击事件大约三年前有人问过这个问题,我想知道是否有任何更新。我尝试过启用 dpms 的 xset、设置各种超时、屏幕消隐,但一切最终都会在第一个触摸事件中立即触发用户点击下方的按钮。
我正在使用 Poky 1.8 (Fido)、Kernel 3.19.5,如果有人知道在 C++ 中处理这些事件的任何方法,我可以完全访问源代码。该程序没有锁屏,并且以 root 身份运行。我正在构建 XScreensaver 只是为了看看这是否有帮助,或者这是否只是一个失败的原因。
答案1
我遇到了同样的问题(也使用 yocto fido)。我无法使用建议的答案,因为我没有设法构建 xscreensaver (有很多依赖项)
我最终通过使用xssstart
和修改slock
屏幕锁解决了这个问题。我称之为点击锁定
https://github.com/zpfvo/clicklock
我还使用 autotools 构建文件制作了 xssstart 的一个分支,以便于交叉编译(只需inherit autotools
在配方中使用):
https://github.com/zpfvo/xssstart
xssstart
一旦启用屏幕保护程序,就会运行命令,并且单击锁定只是一个黑色全屏窗口,在第一次触摸或按键事件后关闭。
所以你必须跑xssstart clicklock
答案2
这是一个相当古老的问题。不过,我不会是最后一个努力解决这个问题的人。
简而言之:我找到了解决方案。
我正在 kiosk 模式下运行 chromium,并使用 Fluxbox 作为 WM。我没有依赖 Xorg 让屏幕进入睡眠状态,而是使用仅具有消隐功能的 xscreensaver。
这使我能够使用一个小的 perl 脚本监听屏幕的状态变化。 http://pastebin.com/uwFsvG87
wmctrl
当屏幕空白时,此脚本会切换到另一个(空)虚拟桌面,并在取消空白时切换回来(有 100 毫秒延迟)。
为了让用户看不到它,我禁用了 Fluxbox 工具栏并设置了全黑的背景。
它运作得很好。 :-)