Artikelformat

GeekTool · Tutorial zur Systemüberwachung und vieles mehr

Über das Thema GeekTool in deren dazugehörigen Geeklets haben wir hier und da schon mal ein Wort verloren.

Durch unseren Menüleisten < 2013 Artikel, vom Anfang dieser Woche, kam das Thema wieder etwas hoch, denn unser geschätzter Kritiker Fischmütze setzt dieses ein, um über den Desktop sein tägliches digitales Leben etwas zu vereinfachen.

aguDE-geektool-icon

Nachfolgend sein Gastbeitrag zum Thema:

Ich setze in der Firma einen 27″ iMac mit Mountain Lion und zu Hause ein 13″ MacBook Pro ein.

GeekTool benutze ich sowohl im Office, als auch im privaten Bereich schon ein paar Jahre um mir Informationen, die ich mehr oder weniger ständig brauche, auf dem Desktop anzeigen zu lassen. Mir gefällt an GeekTool besonders der sehr Ressourcen schonende Umgang mit dem System, da alle zu generierenden Infos in frei wählbaren Intervallen erzeugt werden und somit nicht ständig Prozesse im Hintergrund laufen. Zudem bekommt man mit GeekTool ein Werkzeug an die Hand, dass die Informationsbereitstellung und -aufbereitung nach eigenen Wünschen frei ermöglicht. Da die meisten GeekTool-Anzeigen auf Systemkommandos bzw. Scripten basieren, lässt sich eine GeekTool-Konfiguration via Dropbox auch ganz gut auf andere Systeme syncen.

Den Vorteilen von GeekTool steht ein erhöhter Einarbeitungsaufwand gegenüber, gerade für User, die bisher keine Erfahrung mit Terminal, Shell und deren Möglichkeiten haben. Es würde den Rahmen eines solchen Artikels sprengen hier auf die phantastischen Möglichkeiten der Unix-Shell-Programmierung einzugehen. Ich kann nur empfehlen sich damit zu beschäftigen, schließlich setzt ihr ein leistungsfähiges Unix-System ein; alles so gelernte lässt sich auch leicht auf andere Unix, aká Linux-Systeme, übertragen. Daher auch dieser kurze Linktipp.

Ich möchte hier an Hand meines GeekTool-Setups kurz aufzeigen, wie man damit womöglich sein digitales Leben etwas vereinfachen kann und sich nicht für jede Aufgabe seine Menüleiste mit einem Zusatzprogramm verstopft.

Abb1Sehr schön ist an GeekTool, dass man die Geeklets unterschiedlichen Gruppen zuordnen kann. So kann man zuvor definierte Info-Gruppen ausblenden, wenn man sie nicht benötigt.

Mein GeekTool-Desktop sieht zur Zeit in etwa so aus, wie im Screenshot zu sehen. Dieses Setup hat sich über einen langen Zeitraum nach und nach entwickelt und bewährt. Natürlich lebt auch mein Desktop von Veränderungen, einiges habe ich aber inzwischen, auch wenn ganz nett anzuschauen, wieder entfernt – z.B. eine Wetteranzeige. Letztlich eine Frage des persönlichen Geschmacks.

Voila_Capture35

Für einige Geeklets ist die Installation zusätzlicher Programme erforderlich. Soweit möglich habe ich das angegeben. Ganz allgemein empfehle ich MacPorts zu installieren.

Nicht alles stammt aus meiner Feder aber ich denke das ist eh klar… Die Kommandos und Scripte sind beispielhaft und müssen selbstverständlich von Euch angepasst werden. Ich hoffe das inspiriert Euch, denn natürlich könnte man vieles noch besser machen. Ich bin gespannt auf Eure Verbesserungsvorschläge. Womöglich habt Ihr aber selber großartige Lösungen für GeekTool im Einsatz, die ein wenig über das Anzeigen von Uhr und Datum hinausgehen.

(1 + 2)
Ich habe hier von Berlin zu meinem Heimatdorf am Rande Berlins einen recht langen Fahrweg über die Berliner Autobahn bzw. den Berliner Ring. Deshalb ist es ganz gut zu wissen, was auf dem Nachhauseweg so auf den Straße los ist. Ganz ordentliche aktuelle Verkehrsnachrichten bekommt man auf freiefahrt.info.

Das iPhone-Webinterface ist zudem besser von unnötigen Infos „befreibar“. Die Rohdaten hole ich mir mit curl und bereite diese dann noch etwas für die Anzeige auf.

Alle Nachrichten aus Berlin, die A115 betreffend:

curl -s http://iphone.freiefahrt.info/iphone.state.php?state=BR|sed 's/&lt;[^&gt;]*&gt;/--/g'|awk -F"--" -v OFS="\n" ' $1=$1 '|sed -e '1,3d'|grep -A1 'A115'

Alle Verkehrsnachrichten aus Brandenburg

curl -s http://iphone.freiefahrt.info/iphone.state.php?state=BB|sed 's/&lt;[^&gt;]*&gt;/--/g'|awk -F"--" -v OFS="\n" ' $1=$1 '|sed -e '1,5d'

(3)
Immer wieder benötige ich schnell ein paar Telefonnummern und andere Infos. Klar könnt ich die ins Adressbuch hacken und dann mit LaunchBar oder Alfred ;-) schnell nachschlagen aber erstens brauche ich die Daten nicht im Adressbuch und zweitens sind Öffnungszeiten etc. da auch schlecht aufgehoben.

Ich zeige hier mit more einfach eine simple Textdatei an. Gespeichert ist diese Textdatei, wie auch all meine Geeklet-Scripte, im Dropbox-Folder. Ein Zugriff auf meinen anderen Rechnern ist somit jederzeit gewährleistet. Ich bearbeite diese Datei mit nvALT, das ist bequem und spart wieder ein paar Tastenanschläge.

more /Users/DEINUSERNAME/Dropbox/Notes/Telefon-Desktop.txt

Da GeekTool auch Bilder permanent auf dem Desktop anzeigen kann, steht einem farbenfrohen Desktop mit Bildern der Freundin, Ex-Freundin, Traumfrau oder nützlichen Sachen wie einer Kommando-Übersicht nichts im Wege (Klick, Klick).

(4)
Ich bin kein Freund ständig laufender Programme, die man ggf. zur Zeit gar nicht nutzt. Deshalb habe ich mir je IMAP-Postbox mit einem Python-Script, basierend auf einem Script von G. Newman, ein Inbox-Checker gebaut. Das Python-Script erzeugt auch eine Nachrichtenzentrale-Meldung per terminal-notifier.app, die im OS X Programm-Ordner liegen muss.

Beispielhaft für einen GMAIL-Account

Die Werte MEIN_GOOGLEACCOUNTNAME, MEIN_PASSSWORT müssen natürlich durch Eure Daten ersetzt werden. Für andere IMAP-Konten müsst Ihr ebenso ‚imap.gmail.com‘ durch euren IMAP-Server ersetzen. Je E-Mail-Konto benutze ich also ein separates Script. Für Python-Neulinge sei noch vor der Veränderung der Einrückungen im Text gewarnt!

#!/usr/bin/env python
# encoding: utf-8
# Copyright (c) 2009 Greg Newman, exhancement Mac OS by Fischmuetze
 
import os
import imaplib,re
import sys

def main(argv=None):
    i=imaplib.IMAP4_SSL('imap.gmail.com')
    try:
        i.login("MEIN_GOOGLEACCOUNTNAME","MEIN_PASSSWORT")
        x,y=i.status('INBOX','(MESSAGES UNSEEN)')
        messages=int(re.search('MESSAGES\s+(\d+)',y[0]).group(1))
        unseen=int(re.search('UNSEEN\s+(\d+)',y[0]).group(1))
        if unseen == 0:
        	print "Keine neuen Nachrichten"
        	os.system("/Applications/./terminal-notifier.app/Contents/MacOS/terminal-notifier -remove GMAIL &gt;/dev/null ")
        elif unseen == 1:
        	os.system("/Applications/./terminal-notifier.app/Contents/MacOS/terminal-notifier -message '1 Neue Nachricht eingetroffen!' -title GMAIL -group GMAIL -activate com.apple.mail &gt;/dev/null ")
        	print "1 Neue Nachricht"
        elif unseen &gt; 1:
        	os.system("/Applications/./terminal-notifier.app/Contents/MacOS/terminal-notifier -message '" + str(unseen) + " Neue Nachrichten eingetroffen!' -title GMAIL -group GMAIL -activate com.apple.mail &gt;/dev/null ")
        	print unseen, " Neue Nachrichten"
        else:
			print "Offline"
    except:
		print "Offline"

if __name__ == '__main__':
    sys.exit(main())

(5)
Zeigt mir via tail Kommando ein Log mit bestimmten Systemzuständen und Nachrichten an. Ich werde darauf nicht weiter eingehen, weil das zu individuell ist.

(6)
Hier lasse ich mir via einfachem ping-alive-Shell-Script den alive-Zustand einiger ausgewählter Server anzeigt, wenn’s klemmt gibt es natürlich, davon unabhängig, das übliche Nagios und Systeminfo-Bombardement. GeekTool ruft dazu einmal in der Minute das folgende Shell-Script auf:

#!/bin/bash
PATH=${PATH}:/bin:/usr/bin:/sbin

HOSTS="hostname1 hostname2 hostname3 hostname4 hostname5"
COUNT=1

for myHost in $HOSTS
do
    count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
    if [ $count -eq 0 ]; then
        # 100% failed 
        echo -e "      $myHost"
    else
        echo -e "[OK]  $myHost"
    fi
done

(7)
Das Datum

date '+%A, %d. %B'

(8)
Mein Chef treibt sich recht viel in der Weltgeschichte rum. Da ist es immer gut zu wissen, wie spät es da ist wo er ist.

TZ=London/GMT date +"London: %l:%M %p, %d.%m."
TZ=New\ York/GMT+5 date +"New York: %l:%M %p, %d.%m."
TZ=San\ Francisco/GMT+8 date +"San Francisco: %l:%M %p, %d.%m."

(9)
Ein Kalender

cal | awk '{ print " "$0; getline; print " Mo Di Mi Do Fr Sa So"; getline; if (substr($0,1,2) == " 1") print "                    1 "; do { prevline=$0; if (getline == 0) exit; print " " substr(prevline,4,17) " " substr($0,1,2) " "; } while (1) }'

(10)
Auszüge aus meinen dienstlichen und privaten Kalendern in Apple iCal zeige ich per icalBuddy an. Einige abonnierte Kalender blende ich zudem aus, die ich auf dem Desktop nicht zur Ansicht benötige.

/usr/local/bin/icalBuddy -ss '\n_________________________________________________' -nrd -nc -sd -ps '|\n   |' -po datetime,title -ec 'O: Büro','O: Privat','O: Urlaub','O: Erinnerungen','Kalenderwochen','User Absences' eventsToday+2

(11)
Ebenfalls mit icalBuddy zeige ich die Liste unerledigter Aufgaben in Apple-Erinnerungen an 

/usr/local/bin/icalBuddy -nc -nrd -npn -sc uncompletedTasks

(12)
Mehr als ein Gimmick lasse ich mir noch einige Daten des Mac hier anzeigen.

Den aktuellen Netzwerkdurchsatz der Netzwerkkarte (Draht); ist ein Shell-Script, basierend auf netstat. Wenn ihr WiFi benutzt, müsst ihr die Zeile INTERFACE=en0; entsprechend anpassen. Das WiFi-Interface ist am Mac gemeinhin en1, d.h. es muss hier INTERFACE=en1; stehen. Der Befehl ifconfig hilft hier ggf. etwas bei der Aufklärung.

Nun via GeekTool das Script z.B. jede Sekunde aufrufen, fertig ist der Bandwith-Monitor.

#!/bin/bash
PATH=/usr/sbin:/usr/bin:/bin
INTERFACE=en0;

SAMPLE_A=(`/usr/sbin/netstat -bI "$INTERFACE" | awk "/$INTERFACE/"'{print $7" "$10; exit}'`);
sleep 1;
SAMPLE_B=(`/usr/sbin/netstat -bI "$INTERFACE" | awk "/$INTERFACE/"'{print $7" "$10; exit}'`);
BANDWIDTH_USAGE=(`echo "2k ${SAMPLE_B[0]} ${SAMPLE_A[0]} - 1024 / p" "${SAMPLE_B[1]} ${SAMPLE_A[1]} - 1024 / p" | dc`);echo -en "\033[s\033[0m";reset; echo -e "Network in: ${BANDWIDTH_USAGE[0]} kb/s out: ${BANDWIDTH_USAGE[1]} kb/s \c";

(13)
Die Uptime des Rechners

uptime

(14)
Der freie Speicher verleitet mich immer wieder mit purge rumzuspielen oder sich über das Speichermanagement des Macs beim Big-Copy-Prozessen aufzuregen.

Das erledigt ebenfalls ein kleines Shell-Script.

#!/bin/bash
top -l 1 | grep free\.

Das soweit also zu meiner GeekTool-Konfiguration.

Weiterführende Links

-> http://lifehacker.com
-> http://bc.tech.coop
-> http://eoinbailey.com

Artikel wurde nicht gefunden

Ach ja… und das Wetter?

curl --silent "http://xml.weather.yahoo.com/forecastrss?p=GMXX0007&amp;u=c" | grep -E '(Current Conditions:| C<br   \ )?><br   ?s -e ? Conditions: Current sed |>//' -e 's///' -e 's/&lt;\/b&gt;//' -e 's/<br   \>//' -e 's/<description>//' -e 's/&lt;\/description&gt;//' -e 's/Fair/heiter/g'  -e 's/Partly/teilweise/g' -e 's/Sunny/sonnig/g' -e 's/Mostly/meist/g' -e 's/Light/leichter/g' -e 's/Rain/Regen/g' -e 's/Showers/Schauer/g' -e 's/T-showers/Gewitter/g' -e 's/Mostly/meist/g' -e 's/Scattered/vereinzelt/g' -e 's/Showers Late/abends Schauer/g' -e 's/AM/vormittags/g' -e 's/PM/nachmittags/g' -e 's/Clear/klar/g' -e 's/Cloudy/bewoelkt/g' -e 's/Wind/windig/g' -e 's/Few/gelegentlich/g' -e 's/Thunderstorm/Gewittersturm/g' -e 's/Thunder/Gewitter/g' -e 's/Snow/Schnee/g' -e 's/Fog/Nebel/g' -e 's/Early/morgens/g' -e 's/Late/abends/g' -e 's/Drizzle/Niesel/g' -e 's/Isolated/isoliert/g' -e 's/Mix/wechselhaft/g' -e 's/Wintry/winterlich/g' -e 's/to/oder/g' -e 's/Mist/leichter Nebel/g'

Der Wert GMXX0007 muss durch den entsprechenden eures Wohnortes angepasst werden. Etwas tricky den herauszubekommen. Wie’s geht steht u.a. hier.

Autor: Björn

Ich bin Björn und quasi der COO von aptgetupdateDE. Ich kümmere mich um die PR und allerlei Kontaktaufnahmen zu Firmen und Softwareentwicklern. Erreichbar bin ich bei Twitter, App.net und natürlich per E-Mail.