阻止 Scientific Linux 6.4 中的屏幕保护程序

阻止 Scientific Linux 6.4 中的屏幕保护程序

我已经将其发布到超级用户交换中心,但被告知我可以在这里更快地找到答案。

我正在尝试向应用程序添加一项功能,以在用户登录时保持屏幕处于唤醒状态。原因是我最近实现了触摸屏功能,以允许用户通过触摸屏控制 UI。然而,由于我们使用的是过时的 Linux 内核,因此我们的触摸屏功能有限——这意味着尽管内核定义了多点触摸事件,但 Xorg 根本不响应触摸。因此,我在 Qt4 应用程序的后台编写了一个驱动程序,以直接从 /dev/input 读取触摸事件并在应用程序中生成鼠标事件。

但是,由于这些鼠标事件不是系统级的,而是包含在 Qt 应用程序中,因此它们不会使屏幕保持唤醒状态,也不会在屏幕保护程序启动后将其唤醒。触摸屏的目标是消除用户在我们的产品上使用键盘和鼠标的需要,并且无法唤醒屏幕保护程序会使其难以使用。

该应用程序已经有一个 QTimer 设置,每 60 秒触发一次(以防某些系统进程在应用程序运行时更改这些设置)以“阻止屏幕保护程序”,但在查看它发出的命令后,很明显为什么它不这样做不起作用,因为它使用的命令是:

xset s on

所以我更改了计时器以发出以下命令:

xset s off
xset s noblank
xset -dpms

我还尝试执行此命令以尝试阻止 xdg-screensaver 启动:

xwininfo -name "plasma-desktop" | grep "plasma" | cut -d' ' -f4 | xdg-screensaver suspend

然而,即使进行了这些更改,屏幕保护程序最终还是会出现。

我是否需要禁用其他设置来防止这种情况?假设出现的屏幕保护程序是操作系统启动的结果xdg-屏幕保护程序,有没有办法可以在我们的应用程序登录时阻止该应用程序的启动?或者我应该采取其他方法来解决这个问题吗?

如果重要的话,我们正在运行 Scientific Linux 6.4(内核 2.6.32-754)。

编辑:忘了说了,桌面环境是KDE4。

编辑:我找到了一个与显示的屏幕保护程序相匹配的 KSS 文件。我尝试重命名它,但这只会导致一个空白的屏幕保护程序出现在它的位置。我需要知道如何禁用正在启动它的服务。

答案1

所以这可能不是最好的方法,但我找到了一种让屏幕保护程序/锁停止出现的方法。我找到了二进制文件屏幕锁在 下/usr/libexec/kde4,重命名该文件似乎可以通过确保它无法执行来防止屏幕锁定。

答案2

您仍然可以从 /dev/input 读取,但是您不是将生成的鼠标事件发送到应用程序(因此对系统隐藏),而是通过用户空间驱动程序将它们发送到系统。

然后,这些事件将遵循与正常鼠标事件相同的路径,从而允许您停用屏幕保护程序。

前:

/dev/input -> your_driver -> application

后:

/dev/input -> your_driver -> uinput -> X -> application

您甚至可以将应用程序与驱动程序完全解耦。

这个问题有一些关于如何做到这一点的答案。

相关内容