【发布时间】:2015-07-19 04:52:34
【问题描述】:
在使用 C++ 开发小型跨平台游戏时,我遇到了以下问题:当玩家在不触摸键盘或鼠标的情况下使用 USB 游戏手柄玩游戏时,计算机会在玩游戏时自动休眠。
在 Windows 中,可以使用SetThreadExecutionState 函数轻松完成。在 OS X 中,我认为可以使用 UpdateSystemActivity 完成,但尚未经过测试。
但问题是,在 Linux 中,DE 之间没有通用 API。我发现在 Gnome 中,您可以使用 DBus 调用 Inhibit() 和 Uninhibit() 来停止自动挂起,但它仅适用于 Gnome。
那么,是否存在以编程方式跨 DE 方式(或非 DE 方式,例如,如果用户使用
dwm或awesome wm之类的东西)来防止 Linux 系统(使用 Xorg 并且当然没有 root 访问权限)从睡眠或打开屏幕保护程序而不更改用户配置文件?
PS:不要觉得太复杂,但不知道有多遗憾。
【问题讨论】:
-
听起来实际的问题是操作系统没有将“游戏手柄”视为活动 - 应该在操作系统驱动程序中修复。
-
垫子是对的。您不应继续修改用户设置。当您的程序崩溃或我必须强行终止它时会发生什么?我记得游戏搞乱了各种设置,比如桌面的亮度/颜色。即使你分叉,我也可能会对机器进行硬重置。您的方法应该是中断暂停,而不是禁用/启用它。
-
@Etherealone 是的,我不会修改用户设置,但如何防止它暂停?我知道
X11里面有一个XResetScreensaver的功能,不过只是个屏保,不是休眠,对吧? -
我正在解决同样的问题 (askubuntu.com/q/655531/171608)。是否有将游戏手柄输入转换为暂停计时器重置的应用程序?有人做了一个来防止屏幕保护程序启动 (launchpad.net/~foresto/+archive/ubuntu/toys)。但是在 Linux 上使用游戏手柄玩游戏时,我找不到任何可以避免暂停的东西。
-
这听起来像是 Caffeine 应该处理的事情,所以我提交了一个错误报告:bugs.launchpad.net/caffeine/+bug/1530544 请访问并点击“此错误影响您”。
标签: c++ linux sleep screensaver xorg