Ich habe einen Touchscreen-Kiosk, auf dem ich einen Webserver betreibe. Ich möchte eine Diashow zeigen, wenn der Bildschirm für eine bestimmte Zeit nicht berührt wurde. Zu diesem Zweck habe ich das Skript unten.Das Starten eines benutzerdefinierten Bildschirmschoners beim Booten verhält sich anders als das manuelle Starten des Bildschirmschoners
#!/bin/sh
# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((15*1000))
# Sequence to execute when timeout triggers.
trigger_cmd() {
DISPLAY=:0 feh -ZXYrzFD 10 /home/pi/screensaver/img --zoom fill &
echo '"pkill -n feh; pkill -n xbindkeys"'>/home/pi/screensaver/xbindkeys.temp
echo "b:1">>/home/pi/screensaver/xbindkeys.temp
DISPLAY=:0 xbindkeys -n -f /home/pi/screensaver/xbindkeys.temp
sudo rm /home/pi/screensaver/xbindkeys.temp
}
sleep_time=$IDLE_TIME
triggered=false
# ceil() instead of floor()
while sleep $(((sleep_time+999)/1000)); do
idle=$(DISPLAY=:0 xprintidle)
if [ $idle -gt $IDLE_TIME ]; then
if ! $triggered; then
trigger_cmd
triggered=true
sleep_time=$IDLE_TIME
fi
else
triggered=false
# Give 100 ms buffer to avoid frantic loops shortly before triggers.
sleep_time=$((IDLE_TIME-idle+100))
fi
done
Ich benutze xprintidle
zu überprüfen, wie lange der Bildschirm inaktiv war. Der xbindkeys
Teil dient zum Töten feh
, wenn der Bildschirm berührt wird. Wenn ich das Skript manuell starte, kann ich die Diashow schließen, indem ich den Bildschirm einmal berühre und es nach der angegebenen Leerlaufzeit wieder öffnet. Wenn ich das Skript über ein Skript unter init.d
starte, muss ich den Bildschirm zweimal berühren, bevor die Diashow erneut geöffnet wird, und die Diashow wird nie wieder geöffnet, wenn Sie den Bildschirm nur einmal berühren. Das Skript in startet einfach das obige Skript als Benutzer pi.
Kann mir jemand helfen herauszufinden, warum das Starten des Skripts beim Booten anscheinend dazu führt, dass das Skript zwei Klicks benötigt anstatt eines, um den Leerlauftimer zu starten?
Wie viele Benutzer sind eingeloggt? – tijko
Nur der Benutzer pi ist eingeloggt – kaascroissant