Podczas rozwijania małej wieloplatformowej gry w C++, utknąłem z następującym problemem: kiedy gracze grają za pomocą gamepada USB bez dotykania klawiatury lub myszy, komputer śpi automatycznie podczas gry.Jak programowo zapobiegać zasypianiu komputera z systemem Linux lub włączaniu wygaszacza ekranu?
W systemie Windows można to łatwo zrobić przy użyciu funkcji SetThreadExecutionState
. W OS X, myślę, że można to zrobić z UpdateSystemActivity
, ale jeszcze nie testowane.
Ale problem polega na tym, że w Linuksie nie ma nic wspólnego z API. Odkryłem, że w Gnome możesz zatrzymać automatyczne zawieszanie, używając wywołań DBus Inhibit()
i Uninhibit()
, ale działa tylko dla Gnome.
Tak, jest istnieje programowo cross-DE drogę (lub non-DE sposób, na przykład, jeśli użytkownik korzysta z czegoś takiego
dwm
lubawesome wm
), aby zapobiec system Linux (używając Xorg i bez dostęp do katalogu głównego) z trybu uśpienia lub włączania wygaszacza ekranu bez zmiany plików konfiguracyjnych użytkownika?
PS: Nie myśl, że to zbyt skomplikowane, ale nie wiem, jak niestety.
Brzmi jak rzeczywisty problem jest to, że system operacyjny nie robi” t "gamepad" jako działanie - powinno zostać naprawione w sterownikach systemu operacyjnego. –
Mats ma rację. Nie powinieneś kontynuować i modyfikować ustawień użytkownika. Co się stanie, gdy twój program się zawiesza lub muszę go wymusić? Pamiętam, że gry psują wszystkie rodzaje ustawień, takie jak jasność/kolor pulpitu. Nawet jeśli się rozwiniesz, mogę wykonać twardy reset na maszynie. Twoim podejściem powinno być * przerywanie * zawieszenia, nie wyłączanie/włączanie go. – Etherealone
@Etherealone tak, nie zamierzam modyfikować ustawień użytkownika, ale jak zapobiec zawieszaniu? Wiem, że w 'X11' jest funkcja' XResetScreensaver', ale to tylko wygaszacz ekranu, nie śpiący, prawda? – FalconUA