在启动时启动自定义屏幕保护程序的行为与手动启动屏幕保护程序的行为不同

问题描述:

我有一台运行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

在设置DISPLAY环境变量(即用户pi未登录)之前,触摸屏脚本很可能由init.d运行。

尝试从.bash_profile运行此操作。这样,所有的用户环境变量都将被设置,尤其是$DISPLAY,脚本将在登录后运行一次。

+1

工作,谢谢! – kaascroissant