1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

GeekTool - Systemmonitoring auf dem Desktophintergrund

Dieses Thema im Forum "Magazin" wurde erstellt von Bier, 09.09.07.

  1. Bier

    Bier Pomme au Mors

    Dabei seit:
    24.08.07
    Beiträge:
    867
    Moinsen!


    Hier ein kleines Tutorial für das
    GeekTool:

    [​IMG]


    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!

    [​IMG]

    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.

    [​IMG]
    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 <kirbysdl@hotmail.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 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:
    [​IMG]
    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
     
    #1 Bier, 09.09.07
    Zuletzt bearbeitet: 10.09.07
    LenuaM, Kwoth, JuvenileNose und 2 anderen gefällt das.
  2. Hobbes_

    Hobbes_ Gast

    just geekily cool :)

    Vielen Dank!
     
    #2 Hobbes_, 09.09.07
    Zuletzt von einem Moderator bearbeitet: 09.09.07
  3. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    Cool!
    Viele Anwendungsbeispiele, schön verlinkt …
    In einem Wort:
    Mehr! :)

    Gruss
     
  4. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    Joa, Geektool rockt :D
     
  5. Bier

    Bier Pomme au Mors

    Dabei seit:
    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!
     
  6. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    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

    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
     
  7. Bier

    Bier Pomme au Mors

    Dabei seit:
    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.
     
  8. Sarah Nyn

    Sarah Nyn Kaiser Wilhelm

    Dabei seit:
    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
     
  9. Bonobo

    Bonobo Nathusius Taubenapfel

    Dabei seit:
    26.12.03
    Beiträge:
    5.482
    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.
     
  10. atomfried

    atomfried Leipziger Reinette

    Dabei seit:
    02.04.05
    Beiträge:
    1.781
    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.
     
    1 Person gefällt das.
  11. stk

    stk Grünapfel

    Dabei seit:
    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
     
  12. Bier

    Bier Pomme au Mors

    Dabei seit:
    24.08.07
    Beiträge:
    867
    Über tail, oder über die andere Funktion?
     
  13. stk

    stk Grünapfel

    Dabei seit:
    05.01.04
    Beiträge:
    7.141
    Moin,

    Über "File"

    Guß Stefan
     
  14. Bier

    Bier Pomme au Mors

    Dabei seit:
    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.)
     
  15. theneoinside

    theneoinside Salvatico di Campascio

    Dabei seit:
    19.05.06
    Beiträge:
    426
    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 ...
     
  16. tfc

    tfc Ontario

    Dabei seit:
    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.

    [​IMG]
    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.)

    [​IMG]
    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.
     
    Pongoo und Bier gefällt das.
  17. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    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 }'
     
    Pongoo gefällt das.
  18. unknown7

    unknown7 Saurer Kupferschmied

    Dabei seit:
    28.01.07
    Beiträge:
    1.699
    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?
     
  19. remur

    remur Ontario

    Dabei seit:
    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?
     
    don.chulio gefällt das.
  20. don.chulio

    don.chulio Aargauer Weinapfel

    Dabei seit:
    30.10.06
    Beiträge:
    741
    Samurize.
     
    remur gefällt das.

Diese Seite empfehlen