私はウェブサーバーを実行しているタッチスクリーンキオスクを持っています。画面が一定の時間触れられていない場合は、スライドショーを表示したい。その目的のために、私は以下のスクリプトを持っています。起動時にカスタムスクリーンセーバーを起動するのは、手動でスクリーンセーバーを起動する場合とは異なります
#!/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
でスクリプトを使用してスクリプトを開始すると、再度スライドショーを開く前に画面を2回タッチする必要があります。一度だけ画面に触れた場合はスライドショーを再開しません。
init.d
のスクリプトは、上記のスクリプトをユーザーpiとして開始するだけです。
ブート時にスクリプトを開始すると、スクリプトがアイドルタイマーを開始するのに2回クリックする必要があるように見えるのはなぜですか?
ログインしているユーザーの数はいくつですか? – tijko
piユーザーだけが – kaascroissant