#!/bin/bash # Copyright (C) 2014 Julien Bonjean # Copyright (C) 2014 Alexander Keller # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . #------------------------------------------------------------------------ # Locate current default interface D_IF=$(ip route | awk '/^default/ { print $5 ; exit }') # Filter if it's one of chosen ones if [[ -n $BLOCK_INSTANCE ]]; then for INT in $BLOCK_INSTANCE; do if [ "$INT" = "$D_IF" ]; then IF="$D_IF" break fi done else IF="$D_IF" fi #------------------------------------------------------------------------ # As per #36 -- It is transparent: e.g. if the machine has no battery or wireless # connection (think desktop), the corresponding block should not be displayed. [[ ! -d /sys/class/net/${IF} ]] && exit # Note this passes if IF is empty! #------------------------------------------------------------------------ # If no IF is selected then we want se down not anything else. if [ -z "$IF" ] || [[ "$(cat /sys/class/net/$IF/operstate)" = 'down' ]]; then echo down # full text echo down # short text echo \#FF0000 # color exit fi case $1 in -4) AF=inet ;; -6) AF=inet6 ;; *) AF=inet6? ;; esac # Use the first global scope address IPADDR=$(ip addr show $IF | perl -n -e "/$AF ([^\/]+).* scope global/ && print \$1 and exit") case $BLOCK_BUTTON in 3) echo -n "$IPADDR" | xclip -q -se c ;; esac #------------------------------------------------------------------------ echo "$IPADDR" # full text echo "$IPADDR" # short text #------------------------------------------------------------------------ # Use fast ping to check if we have connection # We ping only once and wait for one second PINGV="-c 1 -w 1" # Ping nic.cz if ping $PINGV nic.cz >/dev/null 2>&1; then echo \#00FF00 # color else if ping $PINGV 217.31.205.50 >/dev/null 2>&1; then # No DNS echo \#FFFF00 # color else # No internet connection echo \#FF0000 # color fi fi