Go Box using:

Nexus DR-X  by Budd Churchward WB7FHC


The script that checks for the piano switch settings and then launches the appropriate user script is /usr/local/bin/check-piano.sh.  It is run when LXDE-Pi (the Pi’s GUI) starts and is called by /etc/xdg/lxsession/LXDE-pi/autostart.

cat piano1.sh


# This an example pianoX.sh script.

# piano scripts are user defined and they run automatically at startup
# depending on the position of the levers of the piano switch
# mounted on the Nexus board.

# For example, if you want to run a particular script when the
# piano switch levers 1 and 4 are Up (off) and 2 and 3 are down (on), name youor script
# piano23.sh.  Nexus scripts must be in your home directory and must be
# executable.  You can make your script executable by running this command:

# chmod +x <script name>

# For example:
# chmod +x piano1234.sh

# EXAMPLE 1: This script will change the call sign and other parameters
# in the Fldigi and Flmsg apps.  It makes these
# changes for both the left and right radios.  Edit the variables below to
# make your desired changes.

OP_NAME="suzanne baril"
ADDR="7259 seabrook road"
CITY="saanichton, bc"

killall -q flmsg || true
DIRS=".nbems .nbems-left .nbems-right"
for D in $DIRS
    if [ -f $HOME/$D/FLMSG.prefs ]
        sed -i -e "s/^mycall:.*/mycall:$OP_CALL/" \
                 -e "s/^mytel:.*/mytel:$TEL/" \
                 -e "s/^myname:.*/myname:$OP_NAME/" \
                 -e "s/^myaddr:.*/myaddr:$ADDR/" \
                 -e "s/^mycity:.*/mycity:$CITY/" \
                 -e "s/^myemail:.*/myemail:$EMAIL/" $HOME/$D/FLMSG.prefs

killall -q fldigi || true
DIRS=".fldigi .fldigi-left .fldigi-right"
for D in $DIRS
    if [ -f $HOME/$D/fldigi_def.xml ]
        sed -i -e "s/<MYCALL>.*<\/MYCALL>/<MYCALL>$STATION_CALL<\/MYCALL>/" \
               -e "s/<MYQTH>.*<\/MYQTH>/<MYQTH>$QTH<\/MYQTH>/" \
               -e "s/<MYNAME>.*<\/MYNAME>/<MYNAME>$OP_NAME<\/MYNAME>/" \
               -e "s/<MYLOC>.*<\/MYLOC>/<MYLOC>$LOC<\/MYLOC>/" \
               -e "s/<OPERCALL>.*<\/OPERCALL>/<OPERCALL>$OP_CALL<\/OPERCALL>/" $HOME/$D/fldigi_def.xml

# EXAMPLE 2: You can manipulate the
# desktop wallpaper, background and foreground, etc.
# Those settings are stored in $HOME/.config/pcmanfm/LXDE-pi. You're on
# your own for creating that script.

# EXAMPLE 3: Automatically start one or more applications. 
# Anything that you can start from the menu
# you can autostart at boot time.  You can start any application that is
# called from a desktop file in /usr/share/applications,
# /usr/local/share/applications or $HOME/.local/share/applications. 
# Start applications by launching the desktop files using 'gtk-launch'. 
# For example, these commands will autostart
# direwolf on the right radio, play a WAV file, and start fldigi on the
# right radio:

#gtk-launch direwolf-right.desktop
#aplay /usr/lib/libreoffice/share/gallery/sounds/kongas.wav
gtk-launch fldigi-left.desktop

# Note that you do not need to background (by appending the '&' syumbol)
# each instance of gtk-launch.  All instances of gtk-launch will execute.
# You also do not need to specify the location of the *.desktop file.
# gtk-launch will look in the directories listed above for the desktop file.

  $ cat shutdown_button.py

# Version 2.0.1
# Original script by Stewart C. Russell via https://github.com/scruss/shutdown_button
# Modified by Steve Magnuson, AG7GN to control LED on different GPIO during Button
# press.
# -*- coding: utf-8 -*-
# example gpiozero code that could be used to have a reboot
#  and a shutdown function on one GPIO button
# scruss - 2017-10

use_button=26     # Button on use_button (BCM GPIO 26 by default)

from gpiozero import Button
from gpiozero import LED
from signal import pause
from subprocess import check_call

led=LED(24)            # LED on BCM GPIO 24

def rls():
        global held_for
        if (held_for > 5.0):
        elif (held_for > 2.0):
            held_for = 0.0

def hld():
        # callback for when button is held
        #  is called every hold_time seconds
        global held_for
        # need to use max() as held_time resets to zero on last callback
        held_for = max(held_for, button.held_time + button.hold_time)
        if (held_for > 5.0):
        elif (held_for > 2.0):

button=Button(use_button, hold_time=1.0, hold_repeat=True)
button.when_held = hld
button.when_released = rls

pause() # wait forever