Kleines Update. Nachdem ich ein wenig im Quellcode von lightdm rumgesucht habe, weil ich mir ehrlich gesagt nicht anders zu helfen wusste, bin ich auf eine Datei in /tmp gestoßen. Für jeden Lock wird eine Datei mit dem Namen .X?-lock angelegt, wobei das ? die laufende Nummer darstellt. .X0-lock existiert immer, bei Sperrung wird eine .X1-lock angelegt.
Somit kann man darauf prüfen...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | #!/bin/bash
export DISPLAY=:0 #benötigt für xprintidle
IDLETIME=10000 #maximale idle-time einstellen
#Funktionsdefinitionsbeispiel um eine Logdatei mit Daten zu füllen
function log() {
#würde man einzelne Teile abfangen wollen, könnte man auch mit $2, etc. weiterarbeiten.
echo "$1" >> /home/BENUTZER/screenlock.logged;
}
#ACHTUNG: vereinfacht für nur einen Nutzer!
if [ -f /tmp/.X1-lock ]
then
# log "$(date) Bereits gesperrt. Beende..." #nur zu Testzwecken aktivieren!
exit 0
fi
#Auslesen der Ganzzahl von xprintidle
if [[ $(/usr/bin/xprintidle) -gt $IDLETIME ]]
then
# log "sperre Bildschirm..." #nur zu Testzwecken aktivieren
$( qdbus --system org.freedesktop.DisplayManager /org/freedesktop/DisplayManager/Seat0 org.freedesktop.DisplayManager.Seat.Lock )
fi
|
Ungetestet, da nur eben hier abgeändert. Für Unity gibt es auch noch eine Alternative zu xprintidle über dbus. Ich habe im Zuge meiner C++ Spielerei einige DE's überprüft. Unity, KDE/Plasma, LXQt brauchen kein xprintidle und bieten den wert per dbus an. Lediglich MATE hat xprintidle nötig, xfce muss ich noch testen. Ich werde das fertige Produkt dann hier verfügbar machen und natürlich auch das Script entsprechend anpassen.
Dies erstmal als Info, dass ichs nicht vergessen habe ☺
/edit: Funktioniert soweit. Man muss nur den BENUTZER ändern, wenn man ein log will 😉