#! /bin/bash ## ## Usage: %PROG% [OPTIONS] [PROVIDER_LIST] ## ## A simple ISP connection manager for a Debian machine with one or more ## dial-up accounts handled by pppconfig, pon, and poff. (This script is ## especially useful as a window manager menu item or a GNOME launcher.) ## ## Options: ## -f COLOUR set text foreground to COLOUR ## -b COLOUR set text background to COLOUR ## -h show this usage message, then exit ## ## PROVIDER_LIST is a comma-separated list of provider names and screen ## names. For example, if /etc/ppp/peers/ contains the files 'provider', ## 'clear', and 'telecom', you might invoke %PROG% with: ## ## %PROG% '_IHUG=provider,Clear_NET=clear,_XTRA=telecom' ## # 2003-09-25 Tim Musson <trmusson@ihug.co.nz> # I, the Copyright holder of this work, hereby release it into the Public # Domain. This applies worldwide. In case this is not legally possible, I # grant anyone the right to use this work for any purpose, without any # conditions, unless such conditions are required by law. # # 2009 Timothy Richard Musson <trmusson@gmail.com> PROG=$(basename $0) EX_USAGE=64 XMESSAGE=${XMESSAGE:-$(which gxmessage)} || XMESSAGE=xmessage TIMESTAMP=$HOME/.gxdialup.tmp PROVIDER_LIST='_default provider=provider' TIMEOUT=40 MSG_TITLE='ISP Connection Status' MSG_FONT='sans 14' MSG_FG= MSG_BG= MSG_GEOM=400x90 MSG_POS=-center [ "$XMESSAGE" = xmessage ] && MSG_FONT= showUsage () { sed -n '/^##/s/^## //p' $0 | sed -e "s#%PROG%#${PROG}#g" exit } invocationError () { echo "Try '$PROG -h'" >&2 exit $EX_USAGE } gxPon () { # Dial a named ISP /usr/bin/pon $1 } gxPoff () { # Disconnect /usr/bin/poff >/dev/null } alreadyConnected () { # Return 0 if currently connected, otherwise 1 [ -e /var/run/ppp0.pid ] } while getopts 'hf:b:' Option do case $Option in h) showUsage ;; f) MSG_FG=$OPTARG ;; b) MSG_BG=$OPTARG ;; *) invocationError ;; esac done shift $(($OPTIND - 1)) [ "$#" -gt 1 ] && invocationError [ -n "$1" ] && PROVIDER_LIST=$1 if alreadyConnected; then if [ -f "$TIMESTAMP" ]; then message=$(< "$TIMESTAMP") else message='Connected.' fi buttons='_Disconnect now:101' else message='Not connected.' buttons='' num=0 IFS_tmp=$IFS IFS=',' for provider in $PROVIDER_LIST; do [ -n "$buttons" ] && buttons="$buttons," showname[$num]=${provider%%=*} realname[$num]=${provider##*=} buttons="${buttons}Dial ${showname[$num]}:$(( 102 + num ))" (( num++ )) done IFS=$IFS_tmp fi buttons=$buttons,GTK_STOCK_CLOSE:100 $XMESSAGE $MSG_POS \ ${MSG_GEOM:+-geometry "$MSG_GEOM"} \ -title "$MSG_TITLE" \ ${MSG_FONT:+-fn "$MSG_FONT"} \ ${MSG_FG:+-fg "$MSG_FG"} \ ${MSG_BG:+-bg "$MSG_BG"} \ -buttons "$buttons" \ -default GTK_STOCK_CLOSE \ "$message" response=$? if [ "$response" -eq 101 ]; then gxPoff elif [ "$response" -ge 102 ]; then num=$(( response - 102 )) gxPon ${realname[$num]} || exit 1 echo "Connected to ${showname[num]/_/} since $(date +%T)" > "$TIMESTAMP" if [ "$TIMEOUT" -gt 0 ]; then $XMESSAGE $MSG_POS \ ${MSG_GEOM:+-geometry "$MSG_GEOM"} \ -title "$MSG_TITLE" \ ${MSG_FONT:+-fn "$MSG_FONT"} \ ${MSG_FG:+-fg "$MSG_FG"} \ ${MSG_BG:+-bg "$MSG_BG"} \ -timeout $TIMEOUT \ -buttons '' \ "Dialing ${showname[$num]/_/}, please wait..." & fi fi exit 0