diff --git a/dw-start.sh b/dw-start.sh index 48666a7..01bde87 100755 --- a/dw-start.sh +++ b/dw-start.sh @@ -10,14 +10,19 @@ # Versioning (this file, not direwolf version) #----------- -# v1.6 - KI6ZHD - Update to auto-detect binary paths and updated GUI start -# v1.3 - KI6ZHD - added variable support for direwolf binary location -# 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 +# v1.6.1 - KI6ZHD - Improved support for cron start, new checks startup method, +# added STDOUT filtering to avoid chatty cron emails or logs +# v1.6 - KI6ZHD - Update to auto-detect binary paths and updated GUI start +# v1.3 - KI6ZHD - added variable support for direwolf binary location +# 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 +#------------------------------------- +# User settable variables +#------------------------------------- #How are you running Direwolf : within a GUI (Xwindows / VNC) or CLI mode # @@ -64,8 +69,16 @@ DWCMD="$DIREWOLF -a 100 -t 0" #Where will logs go - needs to be writable by non-root users + LOGFILE=/var/tmp/dw-start.log +#Script STDOUT and logging output control +# Set this varaible to 0 if you won't want to see all STDOUT +# logging once you get everything working properly + +VERBOSE=1 + + #------------------------------------- # Main functions of the script @@ -89,30 +102,40 @@ function CLI { exit 1 fi - echo "Direwolf in CLI mode start up. All log output recorded to $LOGFILE" - echo "Direwolf in CLI mode start up. All log output recorded to $LOGFILE" >> $LOGFILE + if [ $VERBOSE -eq 1 ]; then + echo "Direwolf in CLI mode start up. All log output recorded to $LOGFILE" + echo "Direwolf in CLI mode start up. All log output recorded to $LOGFILE" >> $LOGFILE + fi # Screen commands # -d m :: starts the command in detached mode # -S :: name the session # -- - # Remove the "-d m" if you don't want screen to detach and not show direwolf" - $SCREEN -d -m -S direwolf $DWCMD >> $LOGFILE + # Options: + # 1. Remove the "-d m" parameters if you don't want screen to automatically detach + # and instead say in the foreground + # 2. Remove the " >> $LOGFILE" if you rather keep all the Direwolf running output + # in the screen session vs going to the log file + # + $SCREEN -d -m -S direwolf bash -c "echo 'All Direwolf output going to $LOGFILE. Enter control-c to terminate Direwolf'; $DWCMD >> $LOGFILE" CHKERR SUCCESS=1 - echo " " - echo " " >> $LOGFILE + if [ $VERBOSE -eq 1 ]; then + echo " " + echo " " >> $LOGFILE + fi $SCREEN -list direwolf CHKERR $SCREEN -list direwolf >> $LOGFILE - echo -e "\nYou can re-attach to the Direwolf screen with:" - echo -e " screen -dr direwolf" - echo -e "\nYou can re-attach to the Direwolf screen with:" >> $LOGFILE - echo -e " screen -dr direwolf" >> $LOGFILE - - echo "-----------------------" - echo "-----------------------" >> $LOGFILE + if [ $VERBOSE -eq 1 ]; then + echo -e "\nYou can re-attach to the Direwolf screen with the following command run via user: $USER" + echo -e " screen -dr direwolf" + echo -e "\nYou can re-attach to the Direwolf screen with the following command run via user: $USER" >> $LOGFILE + echo -e " screen -dr direwolf" >> $LOGFILE + echo -e "\n-----------------------" + echo -e "\n-----------------------" >> $LOGFILE + fi } function GUI { @@ -125,52 +148,68 @@ function GUI { # Otherwise default to :0 (the Xwindows on the HDMI display) # if [ ! $DISPLAY ]; then - echo "No Xdisplay set" - #export DISPLAY=":0" + if [ $VERBOSE -eq 1 ]; then + echo "No initial X-windows DISPLAY variable set" + #export DISPLAY=":0" + fi fi #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" + if [ $VERBOSE -eq 1 ]; then + echo -e "\nRealVNC found - defaults to connecting to the :0 root window" + fi 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" + if [ $VERBOSE -eq 1 ]; then + echo -e "\nTightVNC found - defaults to connecting to the :1 root window" + fi 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. All log output recorded to $LOGFILE" - echo "Direwolf in GUI mode start up. All log output recorded to $LOGFILE" >> $LOGFILE - echo "DISPLAY=$DISPLAY" - echo "DISPLAY=$DISPLAY" >> $LOGFILE - - # - # Auto adjust the startup for your particular environment: gnome-terminal, xterm, etc. - # - - if [ $(which lxterminal) ]; then - #echo "DEBUG: lxterminal stanza" - $(which lxterminal) -l -t "Dire Wolf" -e "$DWCMD" & - CHKERR - SUCCESS=1 - elif [ $(which xterm) ]; then - #echo "DEBUG: xterm stanza" - $(which xterm) -bg white -fg black -e "$DWCMD" & - CHKERR - SUCCESS=1 - elif [ $(which x-terminal-emulator) ]; then - #echo "DEBUG: x-xterm-emulator stanza" - $(which x-terminal-emulator) -e "$DWCMD" & - CHKERR - SUCCESS=1 - else - echo "Did not find an X terminal emulator. Reverting to CLI mode" - SUCCESS=0 + if [ $VERBOSE -eq 1 ]; then + echo -e "Direwolf in GUI mode start up. All log output recorded to $LOGFILE" + echo -e "Direwolf in GUI mode start up. All log output recorded to $LOGFILE" >> $LOGFILE + echo -e "Xwindows display to be used for all Direwolf output: $DISPLAY\n" + echo -e "Xwindows display to be used for all Direwolf output: $DISPLAY\n" >> $LOGFILE + fi + + if [ "$DISPLAY" != "" ]; then + # + # Auto adjust the startup for your particular environment: gnome-terminal, xterm, etc. + # + + if [ $(which lxterminal) ]; then + #echo "DEBUG: lxterminal stanza" + $(which lxterminal) -l -t "Dire Wolf" -e "$DWCMD" & + CHKERR + SUCCESS=1 + elif [ $(which xterm) ]; then + #echo "DEBUG: xterm stanza" + $(which xterm) -bg white -fg black -e "$DWCMD" & + CHKERR + SUCCESS=1 + elif [ $(which x-terminal-emulator) ]; then + #echo "DEBUG: x-xterm-emulator stanza" + $(which x-terminal-emulator) -e "$DWCMD" & + CHKERR + SUCCESS=1 + else + if [ $VERBOSE -eq 1 ]; then + echo "Did not find a vaild X terminal program. Reverting to CLI mode" + echo "Did not find a vaild X terminal program. Reverting to CLI mode" >> $LOGFILE + fi + SUCCESS=0 + fi + else + if [ $VERBOSE -eq 1 ]; then + echo -e "\nXwindows DISPLAY variable unable to be set. Reverting to CLI mode" + echo -e "\nXwindows DISPLAY variable unable to be set. Reverting to CLI mode" >> $LOGFILE + fi fi - echo "-----------------------" - echo "-----------------------" >> $LOGFILE } # ----------------------------------------------------------- @@ -187,18 +226,28 @@ if [ ! -x $DIREWOLF ]; then echo -e "\nError: Direwolf program not found per the DIREWOLF variable in script. Aborting.\n" >> $LOGFILE exit 1 fi +if [ ! -f direwolf.conf ]; then + echo -e "\nError: direwolf.conf config file not found in `pwd`. Aborting.\n" + echo -e "\nError: direwolf.conf config file not found in `pwd`. Aborting.\n" >> $LOGFILE + exit 1 +fi # First wait a little while in case we just rebooted # and the desktop hasn't started up yet. # -echo -e "\ndw-start.sh" -echo -e "-----------" -#Log the start of the script run and re-run -date -date >> $LOGFILE - -#echo -e "Sleeping for 30 seconds to let any boot/reboot delays conclude" -echo -e "Sleeping for 30 seconds to let any boot/reboot delays conclude" +if [ $VERBOSE -eq 1 ]; then + echo -e "\ndw-start.sh" + echo -e "\ndw-start.sh" >> $LOGFILE + echo -e "-----------" + echo -e "-----------" >> $LOGFILE + #Log the start of the script run and re-run + date + date >> $LOGFILE + echo -e "Running in verbose mode. Change the VERBOSE variable in the dw-script.sh to not see this and other text output" + echo -e "Running in verbose mode. Change the VERBOSE variable in the dw-script.sh to not see this and other text output" >> $LOGFILE + echo -e "Sleeping for 30 seconds to let any boot/reboot delays conclude" + echo -e "Sleeping for 30 seconds to let any boot/reboot delays conclude" >> $LOGFILE +fi sleep 30 @@ -207,11 +256,15 @@ sleep 30 # 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 "Direwolf already running." >> $LOGFILE - exit +if [ -n "$a" ]; then + if [ $VERBOSE -eq 1 ]; then + # Don't send this to STDOUT if running from cron or you'll geta cron email saying that + # direwolf is already running every minute! Ok to send to the log file if you turn on + # VERBOSE + #date >> /tmp/dw-start.log + echo "Direwolf already running. Not starting a new instance." >> $LOGFILE + fi + exit fi # Main execution of the script @@ -219,6 +272,10 @@ fi if [ $RUNMODE == "AUTO" ];then GUI if [ $SUCCESS -eq 0 ]; then + #if [ $VERBOSE -eq 1 ]; then + # echo "GUI mode startup failed. Reverting to CLI mode" + # echo "GUI mode startup failed. Reverting to CLI mode" >> $LOGFILE + #fi CLI fi elif [ $RUNMODE == "GUI" ];then @@ -226,7 +283,7 @@ if [ $RUNMODE == "AUTO" ];then elif [ $RUNMODE == "CLI" ];then CLI else - echo -e "ERROR: illegal run mode given. Giving up" + echo -e "ERROR: illegal dw-start run mode configured. Giving up" exit 1 fi