diff --git a/doc/Raspberry-Pi-APRS.pdf b/doc/Raspberry-Pi-APRS.pdf index b05c85f..f7f4599 100644 Binary files a/doc/Raspberry-Pi-APRS.pdf and b/doc/Raspberry-Pi-APRS.pdf differ diff --git a/doc/User-Guide.pdf b/doc/User-Guide.pdf index 9f7cd6b..07bc802 100644 Binary files a/doc/User-Guide.pdf and b/doc/User-Guide.pdf differ diff --git a/dw-start.sh b/dw-start.sh index 1d63acd..f47801d 100644 --- a/dw-start.sh +++ b/dw-start.sh @@ -1,100 +1,171 @@ #!/bin/bash -# # Run this from crontab periodically to start up # Dire Wolf automatically. -# -# I prefer this method instead of putting something -# in ~/.config/autostart. That would start an application -# only when the desktop first starts up. -# -# This method will restart the application if it -# crashes or stops for any other reason. -# -# This script has some specifics the Raspberry Pi. -# Some adjustments might be needed for other Linux variations. -# +# Versioning +#----------- +# v1.2 - KI6ZHD - support different versions of VNC +# v1.1 - KI6ZHD - expanded version to support running on text-only displays with +# auto support; log placement change +# v1.0 - WB2OSZ - original version for Xwindow displays only + + + +#How are you running Direwolf : within a GUI (Xwindows / VNC) or CLI mode # +# AUTO mode is design to try starting direwolf with GUI support and then +# if no GUI environment is available, it reverts to CLI support with screen +# +# GUI mode is suited for users with the machine running LXDE/Gnome/KDE or VNC +# which auto-logs on (sitting at a login prompt won't work) +# +# CLI mode is suited for say a Raspberry Pi running the Jessie LITE version +# where it will run from the CLI w/o requiring Xwindows - uses screen + +RUNMODE=AUTO + + +#Direwolf start up command :: two examples where example one is enabled +# +# 1. For normal operation as TNC, digipeater, IGate, etc. +# Print audio statistics each 100 seconds for troubleshooting. +# Change this command to however you wish to start Direwolf +DWCMD="direwolf -a 100" +#--------------------------------------------------------------- +# +# 2. Alternative for running with SDR receiver. +# Piping one application into another makes it a little more complicated. +# We need to use bash for the | to be recognized. +#DWCMD="bash -c 'rtl_fm -f 144.39M - | direwolf -c sdr.conf -r 24000 -D 1 -'" + + +#Where will logs go - needs to be writable by non-root users +LOGFILE=/var/tmp/dw-start.log + + +#------------------------------------- +# Main functions of the script +#------------------------------------- + +#Status variables +SUCCESS=0 + +function CLI { + SCREEN=`which screen` + if [ $? -ne 0 ]; then + echo -e "Error: screen is not installed but is required for CLI mode. Aborting" + exit 1 + fi + + echo "Direwolf in CLI mode start up" + echo "Direwolf in CLI mode start up" >> $LOGFILE + + # Screen commands + # -d m :: starts the command in detached mode + # -S :: name the session + $SCREEN -d -m -S direwolf $DWCMD + SUCCESS=1 + + screen -list direwolf + screen -list direwolf >> $LOGFILE + + echo "-----------------------" + echo "-----------------------" >> $LOGFILE +} + +function GUI { + # In this case + # In my case, the Raspberry Pi is not connected to a monitor. + # I access it remotely using VNC as described here: + # http://learn.adafruit.com/adafruit-raspberry-pi-lesson-7-remote-control-with-vnc + # + # If VNC server is running, use its display number. + # Otherwise default to :0 (the Xwindows on the HDMI display) + # + export DISPLAY=":0" + + #Reviewing for RealVNC sessions (stock in Raspbian Pixel) + if [ -n "`ps -ef | grep vncserver-x11-serviced | grep -v grep`" ]; then + sleep 0.1 + echo -e "\nRealVNC found - defaults to connecting to the :0 root window" + elif [ -n "`ps -ef | grep Xtightvnc | grep -v grep`" ]; then + #Reviewing for TightVNC sessions + echo -e "\nTightVNC found - defaults to connecting to the :1 root window" + v=`ps -ef | grep Xtightvnc | grep -v grep` + d=`echo "$v" | sed 's/.*tightvnc *\(:[0-9]\).*/\1/'` + export DISPLAY="$d" + fi + + echo "Direwolf in GUI mode start up" + echo "Direwolf in GUI mode start up" >> $LOGFILE + echo "DISPLAY=$DISPLAY" + echo "DISPLAY=$DISPLAY" >> $LOGFILE + + # + # Auto adjust the startup for your particular environment: gnome-terminal, xterm, etc. + # + + if [ -x /usr/bin/lxterminal ]; then + /usr/bin/lxterminal -t "Dire Wolf" -e "$DWCMD" & + SUCCESS=1 + elif [ -x /usr/bin/xterm ]; then + /usr/bin/xterm -bg white -fg black -e "$DWCMD" & + SUCCESS=1 + elif [ -x /usr/bin/x-terminal-emulator ]; then + /usr/bin/x-terminal-emulator -e "$DWCMD" & + SUCCESS=1 + else + echo "Did not find an X terminal emulator. Reverting to CLI mode" + SUCCESS=0 + fi + echo "-----------------------" + echo "-----------------------" >> $LOGFILE +} + +# ----------------------------------------------------------- +# Main Script start +# ----------------------------------------------------------- + # When running from cron, we have a very minimal environment # including PATH=/usr/bin:/bin. # - export PATH=/usr/local/bin:$PATH +#Log the start of the script run and re-run +date >> $LOGFILE + # First wait a little while in case we just rebooted # and the desktop hasn't started up yet. # - sleep 30 -LOGFILE=/tmp/dw-start.log + # -# Nothing to do if it is already running. +# Nothing to do if Direwolf is already running. # -a=`pgrep direwolf` -if [ "$a" != "" ] +a=`ps ax | grep direwolf | grep -vi -e bash -e screen -e grep | awk '{print $1}'` +if [ -n "$a" ] then #date >> /tmp/dw-start.log - #echo "Already running." >> $LOGFILE + #echo "Direwolf already running." >> $LOGFILE exit fi -# -# In my case, the Raspberry Pi is not connected to a monitor. -# I access it remotely using VNC as described here: -# http://learn.adafruit.com/adafruit-raspberry-pi-lesson-7-remote-control-with-vnc -# -# If VNC server is running, use its display number. -# Otherwise default to :0. -# +# Main execution of the script -date >> $LOGFILE - -export DISPLAY=":0" - -v=`ps -ef | grep Xtightvnc | grep -v grep` -if [ "$v" != "" ] -then - d=`echo "$v" | sed 's/.*tightvnc *\(:[0-9]\).*/\1/'` - export DISPLAY="$d" +if [ $RUNMODE == "AUTO" ];then + GUI + if [ $SUCCESS -eq 0 ]; then + CLI + fi + elif [ $RUNMODE == "GUI" ];then + GUI + elif [ $RUNMODE == "CLI" ];then + CLI + else + echo -e "ERROR: illegal run mode given. Giving up" + exit 1 fi -echo "DISPLAY=$DISPLAY" >> $LOGFILE - -echo "Start up application." >> $LOGFILE - -# -# For normal operation as TNC, digipeater, IGate, etc. -# Print audio statistics each 100 seconds for troubleshooting. -# - -DWCMD="direwolf -a 100" - -# Alternative for running with SDR receiver. -# Piping one application into another makes it a little more complicated. -# We need to use bash for the | to be recognized. - -#DWCMD="bash -c 'rtl_fm -f 144.39M - | direwolf -c sdr.conf -r 24000 -D 1 -'" - -# -# Adjust for your particular situation: gnome-terminal, xterm, etc. -# - - -if [ -x /usr/bin/lxterminal ] -then - /usr/bin/lxterminal -t "Dire Wolf" -e "$DWCMD" & -elif [ -x /usr/bin/xterm ] -then - /usr/bin/xterm -bg white -fg black -e "$DWCMD" & -elif [ -x /usr/bin/x-terminal-emulator ] -then - /usr/bin/x-terminal-emulator -e "$DWCMD" & -else - echo "Did not find an X terminal emulator." -fi - -echo "-----------------------" >> $LOGFILE -