From ab542210cfd129c623e922dd906784d438698cf0 Mon Sep 17 00:00:00 2001 From: Darren 'Tadgy' Austin Date: Fri, 22 May 2026 10:09:49 +0100 Subject: [PATCH] Add bwbar binary and initscript. --- bwbar | Bin 0 -> 35904 bytes initscript-bwbar | 126 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100755 bwbar create mode 100755 initscript-bwbar diff --git a/bwbar b/bwbar new file mode 100755 index 0000000000000000000000000000000000000000..27c24a4a3dec3cf9117d6a3839072a05d74d1f31 GIT binary patch literal 35904 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 +# Licensed under the terms of the GNU General Public License version 3. + +# shellcheck disable=SC2016,SC1090 + +BWBAR_EXEC="/opt/sbin/bwbar" +DAEMON_EXEC="/usr/bin/daemon" +BWBAR_ARGS=('-f' '/run/bwbar.txt' '-l' '/run/bwbar-light.png' '-d' '/run/bwbar-dark.png' '${MONINTERFACE:-eth0}' '$(ethtool "${MONINTERFACE:-eth0}" | sed -nre "/Speed:/ s/[^[:digit:]]*([[:digit:]]+).*/\1/ p")' '--Gbps') +DAEMON_ARGS=('-N' '-n' "${0##*rc.}" '-r' '-a' '60' '-A' '5' '-L' '3600' '-M' '3' '-l' 'daemon.err' '-b' 'daemon.debug' '-o' 'daemon.info' '--') +RUNUSER="$(whoami)" + +# Allow configuration in /etc/default to override. +# Additional available variables: +# DAEMON_ENVIRONMENT=() # Extra environment passed to $DAEMON_EXEC. Must be an array. +# RUNUSER="" # Username to run the daemon as. Default: User who starts the script. +# MONINTERFACE="" # The interface to monitor for bandwidth usage. Default: eth0. +# SLAY_DELAY="" # Delay between the SIGTERM and SIGKILL on a 'stop'. Default: 2s. +# RESTART_DELAY="" # Delay between stopping and starting on a 'restart'. Default: 2s. +[[ -e "/etc/default/${0##*rc.}" ]] && { source "/etc/default/${0##*rc.}" || return 1 2>/dev/null || exit 1; } + +error() { + printf "%s: %s: %s\\n" "${BASH_SOURCE[0]##*/}" "${BWBAR_EXEC##*/}" "$*" >&2 +} + +checkconfigured() { + # This function can be used to perform any pre-start tests; hopfully to insure the daemon + # can start correctly, before actually trying to start it. A return value of 0 means the + # tests were passed and the daemon should be started. Any other value prevents the + # daemon from being started, and an error message will be emitted. + id "${RUNUSER:-$(whoami)}" >/dev/null 2>&1 || return 1 + ip link show "${MONINTERFACE:-eth0}" >/dev/null 2>&1 || return 1 + return 0 +} + +checkstatus() { + local RET + if su - "${RUNUSER:-$(whoami)}" -c "\"$DAEMON_EXEC\" --running -n \"${0##*rc.}\""; then + printf "%s: %s: %s\\n" "${BASH_SOURCE[0]##*/}" "${BWBAR_EXEC##*/}" "running" + RET=0 + else + printf "%s: %s: %s\\n" "${BASH_SOURCE[0]##*/}" "${BWBAR_EXEC##*/}" "stopped" + RET=1 + fi + return $RET +} + +startdaemon() { + checkconfigured || { + error "not started - pre-start checks failed" + return 2 + } + su - "${RUNUSER:-$(whoami)}" -c "${DAEMON_ENVIRONMENT:+declare ${DAEMON_ENVIRONMENT[*]};} \"$DAEMON_EXEC\" ${DAEMON_ARGS[*]} \"$BWBAR_EXEC\" ${BWBAR_ARGS[*]}" + # shellcheck disable=SC2181 + if (( $? != 0 )); then + error "error starting 'daemon'" + return 2 + else + return 0 + fi +} + +stopdaemon() { + su - "${RUNUSER:-$(whoami)}" -c "\"$DAEMON_EXEC\" -n \"${0##*rc.}\" --stop 2>/dev/null" + sleep "${SLAY_DELAY:-2}" + checkstatus >/dev/null && { + error "failed to stop gracefully - slaying" + su - "${RUNUSER:-$(whoami)}" -c "\"$DAEMON_EXEC\" -n \"${0##*rc.}\" --signal=kill 2>/dev/null" + } + return 0 +} + +for EXEC in "$BWBAR_EXEC" "$DAEMON_EXEC"; do + [[ ! -e "$EXEC" ]] && { + error "$EXEC:" "not found" + return 1 2>/dev/null || exit 1 + } + [[ ! -x "$EXEC" ]] && { + error "$EXEC:" "not executable" + return 1 2>/dev/null || exit 1 + } +done + +case "$1" in + 'start') + if checkstatus >/dev/null; then + error "already running" + printf " %s\\n" "Try: ${BASH_SOURCE[0]} status" >&2 + RET=1 + else + startdaemon + RET=$? + fi + ;; + 'stop') + if ! checkstatus >/dev/null; then + error "not running" + printf " %s\\n" "Try: ${BASH_SOURCE[0]} status" >&2 + RET=1 + else + stopdaemon + RET=$? + fi + ;; + 'restart') + checkstatus >/dev/null + (( $? != 3 )) && { + stopdaemon >/dev/null 2>&1 + sleep "${RESTART_DELAY:-2}" + } + startdaemon + RET=$? + ;; + 'status') + checkstatus + RET=$? + ;; + *) + printf "%s\\n" "Usage: ${BASH_SOURCE[0]} " >&2 + RET=1 + ;; +esac + +return $RET 2>/dev/null || exit $RET