2016-04-02 94 views
0

我有一臺運行Web服務器的觸摸屏信息亭。如果屏幕在一段時間內未觸摸,我想要顯示幻燈片。爲此我有以下腳本。在啓動時啓動自定義屏幕保護程序的行爲與手動啓動屏幕保護程序的行爲不同

#!/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 

我用xprintidle查看屏幕已經閒置的時長。 xbindkeys部分用於在觸摸屏幕時查殺feh。當我手動啓動腳本時,我可以通過觸摸屏幕關閉幻燈片,並在給定的空閒時間後重新打開。當我通過init.d中的腳本啓動腳本時,我必須在屏幕再次打開幻燈片之前觸摸屏幕兩次,如果您只觸摸屏幕一次,將永不再重新打開幻燈片。
init.d中的腳本只是以用戶pi的身份啓動上面的腳本。

有人可以幫我找出爲什麼在啓動時啓動腳本顯然會導致腳本需要兩次點擊而不是一次啓動空閒計時器?

+0

有多少用戶登錄? – tijko

+0

只有pi用戶登錄 – kaascroissant

回答

1

在設置DISPLAY環境變量(即用戶pi未登錄)之前,觸摸屏腳本很可能由init.d運行。

嘗試從.bash_profile運行此操作。這樣,所有的用戶環境變量都將被設置,尤其是$DISPLAY,腳本將在登錄後運行一次。

+1

工作,謝謝! – kaascroissant

相關問題