在启动时启动自定义屏幕保护程序的行为与手动启动屏幕保护程序的行为不同
问题描述:
我有一台运行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的身份启动上面的脚本。
有人可以帮我找出为什么在启动时启动脚本显然会导致脚本需要两次点击而不是一次启动空闲计时器?
答
在设置DISPLAY
环境变量(即用户pi未登录)之前,触摸屏脚本很可能由init.d
运行。
尝试从.bash_profile
运行此操作。这样,所有的用户环境变量都将被设置,尤其是$DISPLAY
,脚本将在登录后运行一次。
+1
工作,谢谢! – kaascroissant
有多少用户登录? – tijko
只有pi用户登录 – kaascroissant