#!/usr/bin/env perl ## Copyright © 2010 by Daniel Friesel ## License: WTFPL ## 0. You just DO WHAT THE FUCK YOU WANT TO. use strict; use warnings; use 5.010; use autodie; use GD; use Getopt::Std; use Term::ANSIColor; use LWP::UserAgent; my %opts; my $alpha; my $share = $0; my ($ext_ip, $int_ip); sub get_ext_ip { if (-d '/sys/class/net/ppp0') { return qq{-}; } my $ua = LWP::UserAgent->new( env_proxy => 0 ); my $re = $ua->get('http://derf.homelinux.org/cgi-bin/clientinfo/ip.cgi'); if ($re->is_success()) { my $text = $re->decoded_content(); chomp $text; return $text; } else { return qq{?}; } } sub get_int_ip { my $wlan = qx{ifdata -pa wlan0 2> /dev/null}; my $lan = qx{ifdata -pa lan 2> /dev/null}; chomp $wlan; chomp $lan; if (length($wlan)) { return $wlan; } else { return $lan; } } sub show_net_png { my ($w, $h) = (160, 32); my $im = GD::Image->new($w, $h); my $icon = GD::Image->newFromPng("${share}/network.png", 1); my $black = $im->colorAllocateAlpha( 0, 0, 0, $alpha); my $white = $im->colorAllocateAlpha(255, 255, 255, $alpha); my $bg = $im->colorAllocateAlpha(255, 255, 255, 127); my $ip_ext = get_ext_ip(); my $ip_int = get_int_ip(); $im->filledRectangle(0, 0, $w - 1, $h - 1, $bg); $im->string(gdMediumBoldFont, 37, 1, $ip_ext, $white); $im->string(gdMediumBoldFont, 36, 0, $ip_ext, $black); $im->string(gdMediumBoldFont, 37, 17, $ip_int, $white); $im->string(gdMediumBoldFont, 36, 16, $ip_int, $black); $im->copy($icon, 0, 0, 0, 0, 32, 32); open(my $out_fh, '>', '/tmp/vnet.png'); binmode $out_fh; print $out_fh $im->png(); close($out_fh); } sub show_net_console { printf( "int: %s\next: %s\n", get_int_ip(), get_ext_ip(), ); } if (-l $share) { my $link = readlink($share); $share =~ s{ [^/]+ $ }{}x; $link =~ s{ / bin / vnet $ }{}x; $share .= "${link}/share"; } else { $share =~ s{ / bin / vnet $ }{}x; $share .= '/share'; } getopts('a:cfg', \%opts); $alpha = $opts{'a'} // 0; if ($opts{'c'}) { show_net_console(); } elsif ($opts{'g'}) { show_net_png(); } if ($opts{'f'}) { exec('feh', '/tmp/vnet.png'); } __END__ =head1 NAME =head1 SYNOPSIS =head1 DESCRIPTION =head1 OPTIONS =head1 EXIT STATUS =head1 CONFIGURATION =head1 DEPENDENCIES =head1 BUGS AND LIMITATIONS =head1 AUTHOR Copyright (C) 2010 by Daniel Friesel Ederf@finalrewind.orgE =head1 LICENSE 0. You just DO WHAT THE FUCK YOU WANT TO.