При разработке небольшой кросс-платформенной игры на C++ я застрял в следующей проблеме: когда игроки играют с геймпадом USB, не касаясь клавиатуры или мыши, компьютер автоматически спит во время игры.Как программно предотвратить работу компьютера linux от сна или включение скринсейвера?
В Windows это можно сделать легко, используя SetThreadExecutionState
функция. В OS X, я думаю, это можно сделать с UpdateSystemActivity
, но пока не проверено.
Но проблема в том, что в Linux нет ничего похожего на общий API между DE. Я обнаружил, что в Gnome вы можете остановить автоматическое приостановку, используя вызовы DBus Inhibit()
и Uninhibit()
, но он работает только для Gnome.
Итак, существует Programatically кросс-DE путь (или не DE образом, например, если пользователь использует что-то вроде
dwm
илиawesome wm
), чтобы предотвратить Linux системы (с использованием Xorg и без root), от сна или включения скринсейвера без изменения файлов конфигурации пользователя?
PS: Не думайте, что это слишком сложно, но не знаю, как, к сожалению.
Похоже, актуальной проблемой является то, что ОС Безразлично» так как «игровой пульт» как активность - должен быть исправлен в драйверах ОС. –
Маты правы. Вы не должны продолжать и изменять настройки пользователя. Что произойдет, когда ваша программа выйдет из строя или я вынужден ее принудительно прекратить? Я помню, как игры испортили все настройки, такие как яркость/цвет рабочего стола. Даже если вы вилкой, я могу сделать жесткий сброс на машине. Ваш подход должен быть * прерыванием * приостановки, а не отключением/включением. – Etherealone
@Etherealone yep, я не буду изменять настройки пользователя, но как предотвратить его приостановку? Я знаю, что в 'X11' есть функция XResetScreensaver', но это просто экранная заставка, а не спать, не так ли? – FalconUA