2010-12-01 44 views
3

J'ai un script écrit en bash, que j'ai besoin de prendre un chemin différent dans le cas où l'économiseur d'écran est en cours d'exécution. C'est Linux avec Xorg et KDE. Le script est appelé à partir de cron, et il se connecte à DISPLAY =: 0.Comment vérifier si l'économiseur d'écran est en cours d'exécution?

N'importe quel indice/idée comment vérifier l'état de l'économiseur d'écran?

+0

Le plus proche que je peux trouver est 'l'état de xdg-screensaver', mais il vous dira seulement s'il est activé, pas quand il fonctionne. L'économiseur d'écran de GNOME semble avoir une interface DBus instable qui l'expose, mais je ne suis pas sûr comment y accéder. KDE pourrait aussi avoir un moyen spécifique, mais quelqu'un d'autre devra le trouver. :) –

+0

Je l'ai fait en utilisant 'dcop' dans KDE 3.5 et' qdbus' KDE 4, mais je n'ai pas accès à ma machine personnelle où le script shell réside actuellement. Checkout 'kdcop' ou' qdbusviewer' pour inspecter kdesktop; quelques essais et erreurs devraient suffire à le comprendre. – meagar

Répondre

3

Apparemment, lors de l'exécution d'écran, en dehors de binaire économiseur d'écran, il y a aussi ce processus en marche:

/usr/lib/kde4/libexec/kscreenlocker 

Alors, je peux simplement faire ps uw -C kscreenlocker et vérifier les résultats.

6

Si elle est KDE4 vous utilisez, vous pouvez utiliser dbus pour vérifier si l'économiseur d'écran est en cours d'exécution:

$ qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive 

ou

$ qdbus org.kde.screensaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive 

Cela fonctionne aussi pour gnome, mais ils sont connus pour ne pas suivre les normes FreeDesktop, vous devez donc utiliser:

$ qdbus org.gnome.ScreenSaver /ScreenSaver org.gnome.ScreenSaver.GetActive 

Enfin et surtout, vous pouvez vérifier whethe r le serveur d'écran X standard est en cours d'exécution à l'aide de XScreenSaverQueryInfo() et en vérifiant le champ d'état.