Utente tempo di inattività essere ripristinato a 0 dopo 30 secondi su Linux
-
12-10-2019 - |
Domanda
Sto cercando di rilevare il tempo dal momento dell'ingresso dell'ultimo utente utilizzando la libreria client di estensione Saver X11 schermo. Faccio le chiamate periodiche XScreenSaverQueryInfo
per ottenere il tempo di inattività. Il problema che sto affrontando è che dopo ogni 20-30 secondi, il tempo di inattività, come riportato da questa chiamata, viene reimpostato a 0. Questo accade anche se non v'è stato alcun input da parte dell'utente reale in quel momento. Sono assolutamente sconcertato da questo. L'unica portare che ho è che il problema scompare se disinstallo gnome-screensaver
. La mia domanda è, fa gli input dell'utente Simulare gnome-screensaver
per qualche motivo? So che può sembrare improbabile, e se lo fa, sarà sicuramente essere un bug con gnome-screensaver
, ma non riesco a pensare ad altro momento. Qualcuno sa dove posso trovare maggiori informazioni su come funziona gnome-screensaver
e come influenza la chiamata XScreenSaverQueryInfo
senza la necessità di passare attraverso il codice. Ho passato con informazioni a gnome-screensaver
casa ma non ho trovato nulla di rilevante per il mio problema.
Aggiorna : Ho ottenuto il seguente output da dbus-monitor. Come interpreto in questo modo:
method call sender=:1.97538 -> dest=org.gnome.ScreenSaver serial=3 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=SimulateUserActivity
Credo che qualche processo sta chiedendo gnome-screensaver per SimulateUserActivity. Oppure, è gnome-screensaver invio di un segnale SimulateUserActivity a dbus? Se è la prima, come posso scoprire quale processo sta chiedendo gnome-screensaver per farlo?
Soluzione
Una volta che hai il mittente dbus (come illustrato a dbus-monitor di lì) si può fare:
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetConnectionUnixProcessID string:':1.97538'
collegare il mittente effettivo. Che ti dà il PID che è l'invio del messaggio.
Poi dicono che il pid è 2144, faresti:
cat /proc/2144/cmdline
come un modo per vedere ciò che il programma è.
Altri suggerimenti
Un programma (lettori video fa questo durante la riproduzione di video) potrebbe essere l'invio di un comando gnome-screensaver-command --poke
che invierà un evento SimulateUserActivity
per azzerare il tempo di inattività che impedirà screensaver diventare attivo.