Разрабатывая небольшую кроссплатформенную игру на C ++, я застрял со следующей проблемой: когда игроки играют с USB-геймпадом, не касаясь клавиатуры или мыши, компьютер автоматически спит во время игры.
В Windows это легко сделать с помощью SetThreadExecutionState
функция. В OS X, я думаю, это можно сделать с UpdateSystemActivity
но еще не проверено.
Но проблема в том, что в Linux нет ничего похожего на общий API между DE. Я обнаружил, что в Gnome вы можете остановить авто-приостановку с помощью вызовов DBus Inhibit()
а также Uninhibit()
, но это работает только для Gnome.
Итак, существует ли программно кросс-DE-путь (или не-DE-способ, например, если пользователь использует что-то вроде
dwm
или жеawesome wm
) чтобы предотвратить Linux система (используя Xorg и без рут-доступа конечно) от сна или включения заставки без изменения пользовательских конфигурационных файлов?
PS: не думаю, что это слишком сложно, но, к сожалению, не знаю.
Беглый взгляд на то, как это делают mplayer и SDL, позволяет предотвратить запуск заставки:
XScreenSaverSuspend
org.freedesktop.ScreenSaver.Inhibit
XResetScreenSaver
org.freedesktop.ScreenSaver.SimulateUserActivity
Насколько я могу судить, вещи с xdg в названии — это путь к функциональности кросс-рабочего стола. Там, кажется, утилита командной строки под названием xdg-screensaver. Кажется, у вас есть скринсейвер с кучей заставок xset s off
/xset s default
, так что вы можете просто вызвать его, когда он установлен, или вернуться к копированию части его логики, когда это не так …