Skip to content

Keeping Linuxdeploy responsive by constant pings from the inside

michager edited this page Apr 2, 2024 · 5 revisions

I wanted to keep my Linuxdeploy instance's wifi on all the time, so that it is responsive to network requests. Based on the discussion here, I created an init script to place in my Linux installation that will ping the local gateway every half a second.


Thank you Gazihan Alankus for the initial write up. On my HTC One Mini 2 the whole system froze after a while. I figured out it's the deep-sleep engergy save mode of Android. It can be disabled by doing unchroot echo "Debian" > /sys/power/wake_lock . Probably a overkill to do this every 500ms, from docu I think only once would be sufficient. But hey it works... so I'll leave it here hoping it helps someone.


Create /etc/init.d/pingwoke and place the following in it:

#!/bin/sh
# Start/stop the cron daemon.
#
### BEGIN INIT INFO
# Provides:          pingwoke
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Keeps linuxdeploy awake
# Description:       Keeps linuxdeploy awake
### END INIT INFO

PIDFILE=/var/run/pingwoke.pid

test -f $DAEMON || exit 0

. /lib/lsb/init-functions

start() {
    # code to start app comes here
    # example: daemon program_name &
    #/sbin/runuser android -s /bin/bash -c "/home/android/pinger" &

    log_daemon_msg "Starting pingwoke"

    #start-stop-daemon --start --chuid android --background \
    # --make-pidfile --pidfile $PIDFILE --exec $DAEMON

    start-stop-daemon --start --chuid android --background --make-pidfile \
     --pidfile $PIDFILE --startas /bin/bash -- -c "exec ping -i 0.5 192.168.1.1 > /home/android/pinger.log 2>&1"

    echo "hello"
   # Prevent Android Device from going into deep sleep mode, making the whole system unresponsive. Background here https://elinux.org/Android_Power_Management
   unchroot echo "Debian" > /sys/power/wake_lock

    log_end_msg $?
}

stop() {
    # code to stop app comes here
    # example: killproc program_name
    log_daemon_msg "Stopping pingwoke"

    #killall pinger
    #killproc -p $PIDFILE $DAEMON
    start-stop-daemon --stop --pidfile $PIDFILE

    RETVAL=$?
    [ $RETVAL -eq 0 ] && [ -e "$PIDFILE" ] && rm -f $PIDFILE
    log_end_msg $RETVAL
}

case "$1" in
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0

Replace 192.168.1.1 with your own gateway. I guess we could get it from the system as an improvement but I was too lazy to do that.

Give it execute permission:

chmod ugo+x /etc/init.d/pingwoke

Then, we need to register this service to be executed when Linux starts:

sudo update-rc.d pingwoke defaults

Now check whether /etc/rc2.d/ has a S01pingwoke kind of entry. If so, reboot and see if ping is running with:

root@localhost:/etc/init.d# ps -aux | grep ping
android   2687  0.0  0.1   4152   628 ?        S    15:07   0:03 ping -i 0.5 192.168.1.1
root      3345  0.0  0.1   2108   620 pts/0    S+   16:28   0:00 grep ping
root@localhost:/etc/init.d#

Together with Using ext4 in sd and unmounting it from Android at boot, I'm making an old Android phone be the center of my home automation system.

http://your_computer:3142/XXXX where XXXX is one of armdebian, armubuntu, or armkali

Clone this wiki locally