diff options
Diffstat (limited to 'config/i3blocks/scripts/iface')
-rwxr-xr-x | config/i3blocks/scripts/iface | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/config/i3blocks/scripts/iface b/config/i3blocks/scripts/iface new file mode 100755 index 0000000..7e6ac50 --- /dev/null +++ b/config/i3blocks/scripts/iface @@ -0,0 +1,88 @@ +#!/bin/bash +# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info> +# Copyright (C) 2014 Alexander Keller <github@nycroth.com> + +# 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 <http://www.gnu.org/licenses/>. + +#------------------------------------------------------------------------ + +# 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 |