GeekTool - Systemmonitoring auf dem Desktophintergrund

Bier

Pomme au Mors
Registriert
24.08.07
Beiträge
867
Moinsen!


Hier ein kleines Tutorial für das
GeekTool:

geektool_gros.png



WTH?

Quelle des Programms: http://projects.tynsoe.org/en/geektool/

Hierbei handelt es sich um eine Applikation, die sich in die Systemeinstellungen integriert und fortan dem Macnutzer ermöglicht, Statusanzeigen überall auf dem Monitor verschiedenartig einzublenden. Dabei können Bilder, Dateiinhalte, und Shell-Outputs dargestellt werden.


Installation

Die Installation geht per dmg sehr schnell: dmg mounten, Doppelklick und auf Ja klicken.


Konfiguration

Das "was mache ich damit" ist der Fokus dieses Workshops. Ich will Euch kurz zeigen, dass die einzige Einsatzgrenze die eigene Kreativität ist. Mit den folgenden kleinen Ideen kann man sowohl die Sicherheit seines Systems erhöhen, indem man auf betimmte Statusanzeigen fortan Augenmerk lenkt, als auch den Kompfort, indem man automatische Aktualisierungen vornimmt.

Der Kalender

Das wird man kennen: beim Telefonieren nach dem Motto: "Das Prokjekt muss in 4 Tagen fertig sein, haben sie um 16 Uhr Zeit?" Ja, hmmh, was ist denn das für ein Wochentag?
Wie schön wäre es da, wenn man einen kleinen Kalender hätte:

Code:
echo `date "+%d %B %Y"` | awk \
'{ print substr("          ",1,(21-length($0))/2) $0; }'; \
cal | awk '{ getline; print " Mo Tu We Th Fr Sa Su"; 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) }' | \
awk -v cday=`date "+%d"` '{ fill=(int(cday)>9?"":" ");    \
a=$0; sub(" "fill int(cday)" ","*"fill int(cday)"*",a); print  a }'\

Resultat:

Code:
    25 June 2004
 Mo Tu We Th Fr Sa Su
     1  2  3  4  5  6 
  7  8  9 10 11 12 13 
 14 15 16 17 18 19 20 
 21 22 23 24*25*26 27 
 28 29 30

An und für sich easy. Testweise führen wir das noch mal in der Shell aus... klappt? Gut!

file1847753933.png


Wir klicken auf "New Entry", dann oben wo standardmäßig "File" steht im Popdown-Menü auf Shell, pasten den Text aus dem code-Tag da rein und modifizieren stilistisch den Output. Das heißt auf Deutsch, dass wir die Schriftart, -größe und Farbe bestimmen, und die Position.
Wenn wir während des Kreierens des Outputs das Desktophintergrundbild betrachten, stellen wir fest, sofern dieser in GeekTool unter Bearbeitung steht, dass wir die Größe justieren können und mit den GeekTool Buttons auch das Aussehen.

file2034137658.png

So sieht die Justierung mit der Mouse aus. Natürlich könnten wir das auch ganz geeky über die Zahlen unten rechts machen.


Code:
echo `date "+%d/%m/%Y"` | \
awk '{ split("Gennaio/Febbraio/Marzo/Aprile/Maggio/Giugno/Luglio/Agosto/\
Settembre/Ottobre/Novembre/Dicembre",arr,"/"); \
split($0,arg,"/"); a=" " int(arg[1]) " " arr[int(arg[2])] " " arg[3]; \
print substr("          ",1,(21-length(a))/2) a; }' ; cal | \
awk '{ getline; print " Lu Ma Me Gi Ve Sa Do"; 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) }' | awk -v cday=`date "+%d"` \
'{ fill=(int(cday)>9?"":" ");     a=$0; sub(" "fill int(cday)" ",\
"*"fill int(cday)"*",a); print  a }'

Eine sprachlch angepasste Version, die auch unseren ausländischen Freunden den Output in der Muttersprache bzw. Systemsprache anzeigt.

Quelle: Hier klicken

Uptime

Die nächste interessante Anzeige wäre doch, wie lange der Computer bereits an ist, und evt. wie viele Nuter derzeit eingeloggt sind.

Code:
uptime | awk '{printf "Uptime: " $3 " " $4 " " $5 " " }'; top -l 1 |
awk '/PhysMem/ {printf "RAM : " $8 ", " }' ; top -l 2 | awk '/CPU
usage/ && NR > 5 {print $6, $7=":", $8, $9="user", $10, $11="sys",
$12, $13}'

Auch diesen Output generieren wir durch das Einfügen per Copy & Paste.


Diskspace

Habe ich noch Speicher frei?

Code:
df -h | grep disk0s3 | awk '{print "Macintosh HD:", $2, "total,", $3, "used,", $4, "remaining"}'


External IP

Wie lautet meine externe IP?

Code:
echo External IP: `curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'`


Logfiles

Was passiert auf meinem System?

Hierzu lassen wir einfach folgende Datei anzeigen:

Code:
tail /private/var/log/system.log


Prozesse

Welche Prozesse laufen derzeit? Warum ist das MacBook so laut... oh, da ist was abgestürzt... und schnell sehe ich die PID# und kille den Prozess:

Code:
top -n 60 -l 2 | tail -61

Das geht auch noch ein bisschen anders:

Code:
#!/bin/bash

### Curby's GeekTool process listing script (ps+top version)
### by Michael 'Curby' Lee
### v1.00.00, 2007-02-17

###   Description
#
#  Outputs a list of processes using the most CPU time recently,
#  processes having used the most CPU time since they started, and
#  processes using the most memory (largest resident memory size).
#
#  Compared to geektool-ps and geektool-top, this runs the slowest
#  but displays the heftiest programs sorted in three ways and has
#  the slimmest output (horizonally).
#

###   Suggested use
#
#  This script can be executed from the OS X commandline without
#  administrative priveleges, but is intended for use with GeekTool
#  with a refresh time of 10 seconds.  The number of processes 
#  displayed can be customized below.  This script was tested on
#  OS X v10.4.8 with GeekTool v2.1.2(112).  The script may fail with
#  other versions of ps and top.
#

###   License
#
#  Copyright (C) 2007  Michael Lee <[email protected]>
#
#  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 2
#  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, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#



#-------------------------------------------------------------------------------
#  Configuration
#-------------------------------------------------------------------------------
cpu_rows=15
time_rows=15
mem_rows=15



#-------------------------------------------------------------------------------
#  Output
#-------------------------------------------------------------------------------
echo "COMMAND      PID %CPU"
ps -c -r -ax -o command,pid,pcpu | sed 's/^\(.\{10\}\).\{6\}\(.\{6\}\)..\(.\{4\}\)$/\1\2 \3/' | head -n $(($cpu_rows+1)) | tail -n $cpu_rows
echo
top -l1 -otime -n $time_rows -F -R | tail -n $(($time_rows+1)) | sed 's/\(.\{5\}\) \(.\{10\}\).\{8\}\(.\{8\}\).*/\2 \1 \3/'
echo
ps -c -m -ax -o command,pid,pmem | sed 's/^\(.\{10\}\).\{6\}\(.\{6\}\).\(.\{4\}\)$/\1\2 \3/' | head -n $(($mem_rows+1))

Quelle: Hierher klicken
Na, da sagen wir doch mal Danke für!

Das sieht dann so aus:
file1305568010.png

Einfach copypasten...



Wer nutzt das?

[ironie]
Geeks!
[/ironie]

Ich hoffe viele.
Vielleicht sammeln wir nen paar andere Outputs, andere Ideen, Möglichkiten. Denn GeekTool bietet eigentlich das, was die Aktivitätsanzeige oder das Terminal auch bietet. Aber es ist eine sets verfügbarere, schnellere Darstellungsart.
Und es ist geeky!

Es existiert auch die Möglichkeit Anzeigen über allen Fenstern stattfinden zu lassen, aber das fand ich ziemlich hässlich. Jedoch auf den Schreibtischhintergrund projeziert find ich das gut. Aber es soll am besten mal jeder damit rumspielen und die Effekte, auch die unerwünschten hier schildern.

Prost,
Bier
 
Zuletzt bearbeitet:

Hobbes_

Gast
just geekily cool :)

Vielen Dank!
 
Zuletzt bearbeitet von einem Moderator:

space

Neuer Berner Rosenapfel
Registriert
02.12.05
Beiträge
1.949
Cool!
Viele Anwendungsbeispiele, schön verlinkt …
In einem Wort:
Mehr! :)

Gruss
 

Bier

Pomme au Mors
Registriert
24.08.07
Beiträge
867
Joahr, nen bissel mehr geht wohl noch:

Code:
lsof -i

Hiermit kann man anzeigen lassen welche Prozesse aufs Netzwerk zugreifen. Also das ist ein Port to Process Mapper. Wenn schädliche Prozesse, unerwünschte Prozesse, vergessene Downloads/Uploads (noch) stattfinden, tauchen sie da auf und man kann sie sehen.
Auch netstat -r liefert interessante Ergebnisse.
Ding ist: bei jenen beiden Tools würde ich eine längere Refreshing Periode einsetzen, eventuell 60 Sekunden oder mehr.

Interessante ist auch was Banaleres:

Code:
date

Tja, damit gibts due Uhrzeit, Wochentag etc.

Also wie gesagt: ich dachte der Thread kann dann der Ideensammlung dienen, wenn wer anders noch was mit GeekTool macht (Bilder anziegen, sonstewas).

Na haut mal rein!
 

space

Neuer Berner Rosenapfel
Registriert
02.12.05
Beiträge
1.949
Gute Idee!

Man sollte aber davon ausgehen, dass es hier einige User gibt, die nichts mit UNIX am Hut haben (oder zumindest noch weniger als ich).

Wer - nur als Beispiel- z.B. Bootcamp und Windows installiert hat, wird sich natürlich bei

Code:
df -h | grep disk0s3 | awk '{print "Macintosh HD:", $2, "total,", $3, "used,", $4, "remaining"}'
wundern.
Also hier und da ein kleiner Tipp oder Verweis, wie :
Code:
df
im Terminal eingeben und return drücken, um die Bezeichnung des/der gewünschten Volumes zu ermitteln …

… fände ich toll

Gruss
 

Bier

Pomme au Mors
Registriert
24.08.07
Beiträge
867
Was ich ja noch suche ist eine Anzeige der RAM- und CPU Auslastung.

Am besten soartig, nicht unbedingt nur in Zahlen:
Code:
===                            CPU, 2,4  %
=======                     RAM 18,2 %

also die Auslastungswerte. Aber ich hab keine Ahnung wie man das macht, hab mehrmals schon was versucht.
 

Sarah Nyn

Kaiser Wilhelm
Registriert
02.06.07
Beiträge
177
Hi,

In Zusammenarbeit mit Remind könnte das vielleicht auch sehr nützlich sein. Remind ist ein Kalender, der per Terminal funktioniert.

"rem" gibt Einträge aus.

Grüsse,
Sarah
 

Bonobo

Nathusius Taubenapfel
Registriert
26.12.03
Beiträge
5.475
Ich hab' Geektool eine ganze Zeitlang gerne fuer die Anzeige von Satelliten- und Radarbildern benutzt ... das macht mir jetzt aber das Dashboard schoener, inkl. Wettervorhersagen.
 

atomfried

Leipziger Reinette
Registriert
02.04.05
Beiträge
1.804
cool, danke. ich habe natürlich geek-like nur den source code runtergeladen und selber kompiliert und peinlichst darauf geachtet nicht die maus zu benutzen.
 
  • Like
Reaktionen: 1 Person

stk

Grünapfel
Registriert
05.01.04
Beiträge
7.141
Moin,

ich hab's um mir system.log und console.log anzeigen zu lassen. Das Problem: wenn die Dateien mal mit Einträgen geflutet werden kackt Geektool ab. Hat irgendjemand eine Lösung dazu?

Gruß Stefan
 

Bier

Pomme au Mors
Registriert
24.08.07
Beiträge
867
Über tail, oder über die andere Funktion?
 

stk

Grünapfel
Registriert
05.01.04
Beiträge
7.141
Moin,

Über "File"

Guß Stefan
 

Bier

Pomme au Mors
Registriert
24.08.07
Beiträge
867
Dann versuchs am besten mal über tail. So hab ich das gemacht und GeekTool kackt nie ab, sofern die Aktualisierungszeit unter 30 Sekunden bleibt (schneller hab ichs noch nie getestet.)
 

theneoinside

Doppelter Prinzenapfel
Registriert
19.05.06
Beiträge
444
acuh unter 30 sekunden kackt da nix ab ... habe seit ewigkeiten ein paar kleine scripte damit laufen, aktualisierungszeiten zwischen 1 und 10 sekunden. läuft super ...
 

tfc

Ontario
Registriert
21.07.07
Beiträge
348
Hammer Tool.

Habe ein paar Scripts geschrieben. Vielleicht findet sie sonst noch wer praktisch.
Um sie zu nutzen, wie ich es tue, muss man den kompletten Inhalt aus den CODE-Feldern in eine Textdatei schmeißen. Jene sollte dann mittels "chmod +x Scriptdatei.sh" ausführbar gemacht und irgendwo hingepackt werden.

Bei mir liegen die Scripts alle unter ~/.geekscripts/scriptdateien.sh
Im Geektools-Dialog stellt man das dann eben als ausführbares Programm rein.

Natürlich kann man auch den kompletten Code unter Geektools reinkopieren, aber ich persönlich finde das sehr unübersichtlich, wenn man den Kram mal eben verändern will.

desktop-20071004-002840.jpg

stats.sh
Code:
#!/bin/bash

# Status in Adium
if [ "$(ps -Ac | grep Adium)" != "" ]; then
	adiumMsg=$(/usr/bin/osascript << sendMsg
               tell application "Adium"
                 get my status message
               end tell
sendMsg);
	if [ "$adiumMsg" = "" ]; then
		adiumMsg="available";
	fi
else
	adiumMsg="not running";
fi
echo "Adium  : $adiumMsg";

# Song in iTunes
if [ "$(ps -Ac | grep ' iTunes$')" != "" ]; then
	if [ "$(/usr/bin/osascript << sendMsg
            tell application "iTunes"
              get player state
            end tell
sendMsg
)" = "playing" ] ; then
    	iArtist=$(/usr/bin/osascript << sendMsg
                  tell application "iTunes"
                    get artist of current track
                  end tell
sendMsg);
		iSong=$(/usr/bin/osascript << sendMsg
                tell application "iTunes"
                  get name of current track
                end tell
sendMsg);
		iTunesMsg="$iArtist - $iSong";
	else
    		iTunesMsg="not playing music";
	fi
else
	iTunesMsg="not running";
fi
echo "iTunes : $iTunesMsg";

# Uptime
uptime | sed -e 's/,//g' | awk '{printf "Uptime : " $3 " " $4 " " $5 " " }';

#Memory
top -l 1 | awk '/PhysMem/ {printf "\nRAM    : " $10 "B free \n" }' ; 

# CPU
top -l 2 | awk '/CPU usage/ && NR > 5 {print "CPU    :", $8, $9="user", $10, $11="sys",$12, $13}'
(Vorsicht, das Script funktioniert nicht mehr richtig, wenn die Zeilen, die "sendMsg)" enthalten, davor noch Leerzeichen enthalten.)

desktop-20071004-002857.jpg

ip.sh
Code:
#!/bin/bash

# Server stuff
service --test-if-configured-on ssh &> /dev/null;
if [ $? = 0 ]; then sshServ="running";
else sshServ="offline"; fi
if [ "$(ps -Ac | grep mysqld)" != "" ]; then sqlServ="running";
else sqlServ="offline"; fi

echo "SSH : $sshServ";
echo "SQL : $sqlServ";

# IP stuff
lanIp=$(ifconfig en0 | grep 'inet ' | awk '{print $2}')
if [ "$lanIp" = "" ]; then lanIp="offline"; fi

wLanIp=$(ifconfig en1 | grep 'inet ' | awk '{print $2}')
if [ "$wLanIp" = "" ]; then wLanIp="offline"; fi

inetIp=$(curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g')
if [ "$inetIp" = "" ]; then inetIp="offline"; fi

echo "LAN IP      : $lanIp";
echo "WLAN IP     : $wLanIp";
echo "External IP : $inetIp";

Ja, ich habe Code bei dem RAM und CPU-Kram kopiert. Keine Ahnung mehr, von wem, aber es entstammte diesem Thread. Ich habe die Scripts dann erweitert.
 
  • Like
Reaktionen: Pongoo und Bier

zeno

Lane's Prinz Albert
Registriert
05.11.05
Beiträge
4.894
Wer zu Faul ist den Kalender selbst deutsch beizubringen und weil ichs eh grad selbst gemacht hab ;)

Code:
echo `date "+%d/%m/%Y"` | \
awk '{ split("Januar/Februar/Maerz/April/Main/Juni/Juli/August/\
September/Oktober/November/Dezember",arr,"/"); \
split($0,arg,"/"); a=" " int(arg[1]) " " arr[int(arg[2])] " " arg[3]; \
print substr("          ",1,(21-length(a))/2) a; }' ; cal | \
awk '{ 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) }' | awk -v cday=`date "+%d"` \
'{ fill=(int(cday)>9?"":" ");     a=$0; sub(" "fill int(cday)" ",\
" :: ",a); print  a }'
 
  • Like
Reaktionen: Pongoo

unknown7

Kaiserapfel
Registriert
28.01.07
Beiträge
1.716
Wer zu Faul ist den Kalender selbst deutsch beizubringen und weil ichs eh grad selbst gemacht hab ;)

Code:
echo `date "+%d/%m/%Y"` | \
awk '{ split("Januar/Februar/Maerz/April/Main/Juni/Juli/August/\
September/Oktober/November/Dezember",arr,"/"); \
split($0,arg,"/"); a=" " int(arg[1]) " " arr[int(arg[2])] " " arg[3]; \
print substr("          ",1,(21-length(a))/2) a; }' ; cal | \
awk '{ 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) }' | awk -v cday=`date "+%d"` \
'{ fill=(int(cday)>9?"":" ");     a=$0; sub(" "fill int(cday)" ",\
" :: ",a); print  a }'

funzt bei mir leider nicht, zeigt nur den leeren Rahmen an :(
Der Kalender mit dem einzeiligen Coder funktioniert, die uptime auch. Bilder aber z.B. auch nicht.

Woran kann denn das liegen?
 

remur

Ontario
Registriert
09.07.07
Beiträge
344
total geniales tool, kann zwar keine codes, aber bin gut im suchen und klauen, grade nem Kumpel gezeigt...

Der lässt fragen ob jemand weiß, obs etwas vergleichbares für Windows gibt?
 
  • Like
Reaktionen: don.chulio