#!/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, but use only wlp (wifi) or enp (ethernet) # TODO probably also add connection over phone IF=$(ip route | awk '/^default .* (wlp|enp)/ { print $5 ; exit }') #------------------------------------------------------------------------ # 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 see down, not anything else. if [ -z "$IF" ] || [[ "$(cat /sys/class/net/$IF/operstate)" = 'down' ]]; then 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 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 # Ping nic.cz by ip if ping $PINGV 217.31.205.50 >/dev/null 2>&1; then # No DNS echo \#FFFF00 # color else # Ping default gateway of this interface if ping $PINGV $(ip route show dev $IF | awk '/^default via/ {print $3}') >/dev/null 2>&1; then # No internet connection but gateway accessible echo \#FF0F00 # color else # No internet connection echo \#FF0000 # color fi fi fi