我有一个触摸屏自助服务终端,我正在运行一个网络服务器。如果屏幕在一段时间内没有被触摸,我想要显示幻灯片。为此目的,我有下面的脚本。
#!/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 :(得分:1)
在设置init.d
环境变量之前,触摸屏脚本最有可能由DISPLAY
运行(即用户pi未登录)。
尝试从.bash_profile
运行此操作。这样,所有用户环境变量都将被设置为$DISPLAY
,并且脚本将在登录时运行一次。