Как программно запретить компьютеру Linux спать или включать заставку?

Разрабатывая небольшую кроссплатформенную игру на C ++, я застрял со следующей проблемой: когда игроки играют с USB-геймпадом, не касаясь клавиатуры или мыши, компьютер автоматически спит во время игры.

В Windows это легко сделать с помощью SetThreadExecutionState функция. В OS X, я думаю, это можно сделать с UpdateSystemActivity но еще не проверено.

Но проблема в том, что в Linux нет ничего похожего на общий API между DE. Я обнаружил, что в Gnome вы можете остановить авто-приостановку с помощью вызовов DBus Inhibit() а также Uninhibit(), но это работает только для Gnome.

Итак, существует ли программно кросс-DE-путь (или не-DE-способ, например, если пользователь использует что-то вроде dwm или же awesome wm) чтобы предотвратить Linux система (используя Xorg и без рут-доступа конечно) от сна или включения заставки без изменения пользовательских конфигурационных файлов?

PS: не думаю, что это слишком сложно, но, к сожалению, не знаю.

13

Решение

Беглый взгляд на то, как это делают mplayer и SDL, позволяет предотвратить запуск заставки:

  • Отключите его на время действия программы:
    • С помощью XScreenSaverSuspend
    • Использование DBus, вызов org.freedesktop.ScreenSaver.Inhibit
  • Пинг это периодически:
    • С помощью XResetScreenSaver
    • Использование DBus, вызов org.freedesktop.ScreenSaver.SimulateUserActivity
7

Другие решения

Насколько я могу судить, вещи с xdg в названии — это путь к функциональности кросс-рабочего стола. Там, кажется, утилита командной строки под названием xdg-screensaver. Кажется, у вас есть скринсейвер с кучей заставок xset s off/xset s default, так что вы можете просто вызвать его, когда он установлен, или вернуться к копированию части его логики, когда это не так …

2

По вопросам рекламы [email protected]