2016-04-02 37 views
0

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?

+0

Wie viele Benutzer sind eingeloggt? – tijko

+0

Nur der Benutzer pi ist eingeloggt – kaascroissant

Antwort

1

Das Touchscreen-Skript wird höchstwahrscheinlich von init.d ausgeführt, bevor Ihre Umgebungsvariable DISPLAY festgelegt wird (d. H. Benutzer pi ist nicht angemeldet).

Versuchen Sie, dieses von .bash_profile auszuführen. Auf diese Weise werden alle Ihre Benutzerumgebungsvariablen speziell auf $DISPLAY gesetzt und das Skript wird einmalig bei der Anmeldung ausgeführt.

+1

Das hat funktioniert, danke! – kaascroissant