Startup script in Boot to Qt image
Well, actually this applies to (I guess) any Linux system, but I needed it for Boot to Qt image, so…
Just in case, here’s what I have:
root@b2qt-raspberrypi3:~# cat /etc/*-release
ID="b2qt"
NAME="Boot to Qt for Embedded Linux"
VERSION="2.3.2 (pyro)"
VERSION_ID="2.3.2"
PRETTY_NAME="Boot to Qt for Embedded Linux 2.3.2 (pyro)"
root@b2qt-raspberrypi3:~# uname -a
Linux b2qt-raspberrypi3 4.9.27 #1 SMP Sat Nov 18 02:35:59 EET 2017 armv7l armv7l armv7l GNU/Linux
Now, if you want to run your script instead of the Boot to Qt launcher, then simply create a symbolic link to your script:
ln -s /data/user/yourscript.sh /usr/bin/b2qt
And if you want just to run your script on startup, without messing with the standard Boot to Qt launcher, then read below.
But first some news. As you know, Qt 5.10 has just been released, and Boot to Qt images got a killer-feature there - now you can see the IP address for a Wi-Fi connection! Maybe this was added earlier, I don’t know, but it certainly was not in Qt 5.7. Anyway, what a giant leap for mankind:
Now I can finally forget about dragging a router around, because I can set-up a local access point on Mac and deploy Qt applications to my Raspberry Pi over the thin air.
But okay, that’s not the point here. Let’s connect to the device:
ssh root@10.9.71.36
Create a script that you want to run on startup:
vi /data/user/some.sh
Mine here just writes a text string to a file:
#!/bin/sh
echo "ololo" >> /data/user/some.txt
Give it execute permission:
chmod +x /data/user/some.sh
Now create another script that will be your “launcher”. This script should go to /etc/init.d
and here’s the thing - all the scripts in this folder should take at least the start
argument in order to work, and also they should have a special commented header (but this one is not really a strict requirement). Here’s how it looks like:
vi /etc/init.d/autostart
#!/bin/sh
# https://wiki.debian.org/LSBInitScripts
### BEGIN INIT INFO
# Provides: autostart
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Autostart
### END INIT INFO
# http://www.tldp.org/HOWTO/Path-4.html
#PATH=$PATH:/usr/local/bin
case "$1" in
start)
logger "Starting autostart scripts"
# your scripts here
/data/user/some.sh
logger $?
exit 0
;;
*)
echo "It's just a startup script and has no arguments or commands"
exit 1
;;
esac
Here we defined that our autostart
script takes start
argument (which is passed to it during startup by the system) and launches the /data/user/some.sh
script. All the other arguments (*
), including direct call with no arguments, are ignored.
Now we need to give it execute permission and enable it:
chmod +x /etc/init.d/autostart
update-rc.d autostart defaults
Reboot you device and check /data/user/some.txt
. You can also look for messages in the system log (because we used logger
):
cat /var/log/messages | grep "user.notice root"
If at some point you would like to disable the autostart script, execute the following:
update-rc.d -f autostart remove
And maybe remove the /etc/init.d/autostart
file.
Social networks
Zuck: Just ask
Zuck: I have over 4,000 emails, pictures, addresses, SNS
smb: What? How'd you manage that one?
Zuck: People just submitted it.
Zuck: I don't know why.
Zuck: They "trust me"
Zuck: Dumb fucks