gpt4 book ai didi

screensaver - 有没有一种体面的方法来抑制 linux 中的屏幕保护程序?

转载 作者:行者123 更新时间:2023-12-04 03:18:15 46 4
gpt4 key购买 nike

我正在寻找一种体面的、非蹩脚的方式来禁止 xscreensaver、kscreensaver 或 gnome-screensaver,无论哪个可能正在运行,最好以与屏幕保护程序无关的方式,并且它绝对必须快速执行。
我已阅读 xscreensaver FAQ .
我有一个基于 gtk 的游戏程序,它在混合多个音频 channel 时以 30 帧/秒的速度运行,并且由于它是由操纵杆控制的,因此有时会启动“the”屏幕保护程序。我将“the”放在引号中,因为有至少三个不同的流行屏幕保护程序,xscreensaver、gnome-screensaver 和 kscreensaver,每个都有自己独特而笨重的方法,应用程序可能会通过这些方法来抑制它们。
有没有人将代码封装成一个快速的代码块来禁止所有这些?哦,它必须与 GPL 兼容。
目前,如果检测到任何屏幕保护程序并且操纵杆正在使用中,我的代码只是对不合作的屏幕保护程序开发人员发出悲哀的提示,并且实际上除了建议用户手动禁用屏幕保护程序之外并没有尝试做任何事情,这是我唯一能做的事情想去做是非常丑陋的,我干脆拒绝去做。
只是想知道是否有其他人遇到过这个问题,他们做了什么,如果他们做了什么,它是否像我认为的那样丑陋,或者是否有一些优雅的解决方案......似乎可能以某种方式合成 X 事件以欺骗屏幕保护程序认为有一些事件可能会以一种通用的方式来解决问题,但我真的不确定如何做到这一点(并且希望你不需要成为 root 来做到这一点.)
有任何想法吗?

嗯,不幸的是,至少在 Fedora core 8 上,这似乎不起作用。
xdg-screensaver 脚本在那里,并且似乎打算工作,但实际上并没有工作。
一旦您执行“xdg-screensaver 挂起窗口 ID”,窗口 ID 是从程序中通过

xwindow_id = GDK_WINDOW_XWINDOW (GTK_WIDGET (widget)->window);
或者无论是通过xprop获取窗口id,还是手动运行xdg-screensaver,都会创建两个进程:
[scameron@zuul wordwarvi]$ ps -efa | grep xdg
scameron 4218 1 0 20:12 pts/2 00:00:00 /bin/sh /usr/bin/xdg-screensaver suspend 0x3a00004
scameron 4223 1 0 20:12 pts/2 00:00:00 /bin/sh /usr/bin/xdg-screensaver suspend 0x3a00004
scameron 4313 3151 0 20:15 pts/1 00:00:00 grep xdg
[scameron@zuul wordwarvi]$
他们永远不会死,即使他们应该等待的程序死了,屏幕保护程序也永远不会重新启用。
[scameron@zuul wordwarvi]$ xdg-screensaver status
disabled
[scameron@zuul wordwarvi]$ ls -ltr /tmp | grep xdg
-rw------- 1 scameron scameron 15 2009-01-20 20:12 xdg-screensaver-scameron--0.0
[scameron@zuul wordwarvi]$
运行 xdg-screensaver resume window-id 不会恢复屏幕保护程序。
要重新启用屏幕保护程序,我必须手动杀死它们,并手动删除它留在/tmp 中的文件:
[scameron@zuul wordwarvi]$ kill 4218 4223
[scameron@zuul wordwarvi]$ rm /tmp/xdg-screensaver-scameron--0.0
[scameron@zuul wordwarvi]$ xdg-screensaver status
enabled
[scameron@zuul wordwarvi]$
所以,好意,但似乎并没有真正奏效。

不,当然不希望每帧都运行它,但不希望它在运行时引起打嗝,仅此而已。考虑到合成 X 事件,我想象它经常足以让屏幕保护程序认为有事件。
看着 xdg-screensaver (这似乎是一个 shell 脚本,最终只是为我的进程做一个“等待”——很酷),它似乎只是为了做我想做的事。我知道我不可能是唯一或第一个面临这个问题的人。

最佳答案

电影播放器​​通常禁用屏幕保护程序。你可以戳一下 mplayer -code 看看他们是如何做到的。

对于常规 X,他们使用 XScreenSaverSuspend支持的地方。

关于screensaver - 有没有一种体面的方法来抑制 linux 中的屏幕保护程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/460140/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com