1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunEVENT=${1:-short-press} 4*4882a593Smuzhiyun 5*4882a593SmuzhiyunTIMEOUT=3 # s 6*4882a593SmuzhiyunPIDFILE="/tmp/$(basename $0).pid" 7*4882a593SmuzhiyunLOCKFILE=/tmp/.power_key 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunshort_press() 10*4882a593Smuzhiyun{ 11*4882a593Smuzhiyun logger -t $(basename $0) "[$$]: Power key short press..." 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun if type pm-suspend &>/dev/null; then 14*4882a593Smuzhiyun SUSPEND_CMD="pm-suspend" 15*4882a593Smuzhiyun else 16*4882a593Smuzhiyun SUSPEND_CMD="echo -n mem > /sys/power/state" 17*4882a593Smuzhiyun fi 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun if [ ! -f $LOCKFILE ]; then 20*4882a593Smuzhiyun logger -t $(basename $0) "[$$]: Prepare to suspend..." 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun touch $LOCKFILE 23*4882a593Smuzhiyun sh -c "$SUSPEND_CMD" 24*4882a593Smuzhiyun { sleep 2 && rm $LOCKFILE; }& 25*4882a593Smuzhiyun fi 26*4882a593Smuzhiyun} 27*4882a593Smuzhiyun 28*4882a593Smuzhiyunlong_press() 29*4882a593Smuzhiyun{ 30*4882a593Smuzhiyun logger -t $(basename $0) "[$$]: Power key long press (${TIMEOUT}s)..." 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun logger -t $(basename $0) "[$$]: Prepare to power off..." 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun poweroff 35*4882a593Smuzhiyun} 36*4882a593Smuzhiyun 37*4882a593Smuzhiyunlogger -t $(basename $0) "[$$]: Received power key event: $@..." 38*4882a593Smuzhiyun 39*4882a593Smuzhiyuncase "$EVENT" in 40*4882a593Smuzhiyun press) 41*4882a593Smuzhiyun # Lock it 42*4882a593Smuzhiyun exec 3<$0 43*4882a593Smuzhiyun flock -x 3 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun start-stop-daemon -K -q -p $PIDFILE || true 46*4882a593Smuzhiyun start-stop-daemon -S -q -b -m -p $PIDFILE -x /bin/sh -- \ 47*4882a593Smuzhiyun -c "sleep $TIMEOUT; $0 long-press" 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun # Unlock 50*4882a593Smuzhiyun flock -u 3 51*4882a593Smuzhiyun ;; 52*4882a593Smuzhiyun release) 53*4882a593Smuzhiyun # Avoid race with press event 54*4882a593Smuzhiyun sleep .5 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun start-stop-daemon -K -q -p $PIDFILE && short_press 57*4882a593Smuzhiyun ;; 58*4882a593Smuzhiyun short-press) 59*4882a593Smuzhiyun short_press 60*4882a593Smuzhiyun ;; 61*4882a593Smuzhiyun long-press) 62*4882a593Smuzhiyun long_press 63*4882a593Smuzhiyun ;; 64*4882a593Smuzhiyunesac 65