Sysinfo auf Wallpaper automatisch erstellen

Betreut man mehrere Systeme und greift dabei auf FreeNX oder VNC zurück, kann es mit unter schwierig sein den Überblick zu behalten, auf welchem System man sich gerade befindet. Ein Überblick über die Maschine bzw. den Client-Rechner ist hierbei sehr hilfreich.

Für den Endanwender gibt es Paket Screenlets mit dem man viele ansprechende Zusatzprogramme einbinden kann. So können mit InfoPanel sehr umfangreiche Systeminformationen am Bildschirmhintergrund dargestellt werden. Das Paket zielt vermutlich, wie auch alle anderen erhältlichen Sreenlets auf den, vermutlich auf die große klicky-bunty-Welt ab. Die Programmvoraussetzungen und die im Betrieb mit einhergehenden (unnützen) Belastung/Belegung der Systemressourcen werfen natürlich Fragen auf, ob dies nicht mit einfacheren Mitteln zu bewerkstelligen ist.

Informationen

Werte

Für die ressourcenschonende Realsierung der Anforderungen im SOHO wurde daher folgender Lösungsweg eingeschlagen. Auf dem Bildschirmhintergrund werden die wichtigsten Systeminformationen angezeigt:

  • Hostname
  • CPU
  • Speicher
  • OS-Version
  • Kernel-Version
  • IP-Adresse(n)
  • Bootzeitpunkt

Beispiel

Das ganze sieht dann optisch so aus:

Bildschirmhardcopy mit eingeblendeten Systeminformationen

Software

Paket zur Bildbearbeitung

Die Texte mit Hilfe des Programmes convert aus dem RPM-Paket ImageMagic in einen vorhandenen Bildschirmhintergrund eingefügt. Sofern noch nicht bei der Erstinstallation geschehen, installieren wir uns das Programpaket zur Bildmanipulation.

 # yum install ImageMagick -y

Script zur Bilderstellung

Für die „Einblendung“ der gewünschten Systeminformationen bedienen wir uns eines einfachen bash-scrips. Dieses Script legen wir unter /usr/local/bin/ ab, bzw laden es uns direkt aus dem Dokuwiki herunter.

 # vim /usr/local/bin/sysinfo4wp
/usr/local/bin/sysinfo4wp
#!/bin/bash
 
##############################################################################
# Script-Name : sysinfo4wp                                                   # 
# Description : Script zur Erstellung eines Bildschirmhintergrundes mit      # 
#               den wichtigsten Systemparametern                             # 
#                                                                            # 
# Last update : 2012-01-05                                                   # 
# Version     : 0.02                                                         # 
##############################################################################
 
##############################################################################
#                                H I S T O R Y                               # 
##############################################################################
# Version     : 0.01                                                         # 
# Description : initial release                                              #
# -------------------------------------------------------------------------- # 
# Version     : 0.02                                                         #
# Description : Bootzeitpunktberechnung berücksichtigt, Dank an fischi       #
##############################################################################
 
# Definition der Variablen
FILE="/usr/share/backgrounds/default.jpg"        # Bildschirmhintergrund in dem die Ausgabe eingebettet werden soll
WALLPAPER="/usr/share/backgrounds/new_blue.jpg"  # Name unseres neu erstellten Bildschirmhintergrundes
TMPFILE="/tmp/sysinfo_4_WP"
PRG=/usr/bin/convert
 
# Variablen für die ermittelten Parameter
HOST=$(hostname)
RELEASE=`cat /etc/redhat-release`
KERNEL=`uname -r`
KERNELVERSION="Linux Version "$KERNEL
IPT=$(/sbin/ifconfig eth0 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)
IPADRESSET="IP Adresse (eth0): "$IPT
# ggf. weitere Netzwerkschnittstellen definieren
#IPU=$(/sbin/ifconfig ppp0 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)
#IPADRESSEU="IP Adresse (ppp0): "$IPU
UPTIME=`uptime | grep '' /proc/uptime | awk '{ print $1 }'`
UPTIME=`echo "$UPTIME" | sed 's/\(.*\)...$/\1/'`
let BOOTDATE=`date +%s`-$UPTIME
BOOTDATE="Bootzeitpunkt: "`date -d @$BOOTDATE "+%d.%m.%y - %H:%M Uhr"`
CPU_COUNT=`cat /proc/cpuinfo | grep -cA 0 processor`
CPU_MODEL=`cat /proc/cpuinfo | grep -m 1 model.name | sed 's/^model.name*.:*.//'`
CPU_SPEED=`cat /proc/cpuinfo | grep -m 1 cpu.MHz | sed 's/^cpu.MHz*.:*.//' | sed 's/^:*.//'`
CPU="$CPU_COUNT x $CPU_MODEL"
MEM=`grep MemTotal /proc/meminfo`
 
# Hintergrundbild erstellen 
$PRG -gravity southwest -fill white -pointsize 35 -draw 'text 50,320 Systemübersicht' $FILE $WALLPAPER
$PRG -gravity southwest -fill white -pointsize 30 -draw "text 50,270 '$HOST'" $WALLPAPER $WALLPAPER
$PRG -gravity southwest -fill white -pointsize 20 -draw "text 50,230 '$CPU'" $WALLPAPER $WALLPAPER
$PRG -gravity southwest -fill white -pointsize 20 -draw "text 50,200 '$MEM'" $WALLPAPER $WALLPAPER
$PRG -gravity southwest -fill white -pointsize 20 -draw "text 50,160 '$RELEASE'" $WALLPAPER $WALLPAPER
$PRG -gravity southwest -fill white -pointsize 20 -draw "text 50,135 '$KERNELVERSION'" $WALLPAPER $WALLPAPER
# ggf. weiters Netzwerkinterface anzeigen lassen
#$PRG -gravity southwest -font /usr/share/fonts/bitstream-vera/VeraBd.ttf -fill white -pointsize 20 -draw "text 50,110 '$IPADRESSEU'" $WALLPAPER $WALLPAPER
$PRG -gravity southwest -fill white -pointsize 20 -draw "text 50,85 '$IPADRESSET'" $WALLPAPER $WALLPAPER
$PRG -gravity southwest -fill white -pointsize 20 -draw "text 50,50 '$BOOTDATE'" $WALLPAPER $WALLPAPER

Anschließend statten wir das Script mit den x-Rechten aus.

 # chmod +x /usr/local/bin/sysinfo4wp

Wenn wir nun das script das erste mal von Hand starten können wir das Ergebnis ansehen und überprüfen, ob die Ausgabe unseren Wünschen entspricht.

 # sysinfo4wp
 # eog /usr/share/backgrounds/new_blue.jpg

Sofern alles passt, aktivieren wir unseren neuen Desktop-Hintergrund, mit einem rechten Mausklick auf dem Desktop-Hintergrund.

Bildschirmhardcopy Ändern des Desktophintergrundes

automatische Erstellung

Damit nun beim Booten automatisch der gewünschte Bildschirmhintergrund erstellt wird, ist es nötig unser bash-script /usr/local/bin/sysinfo4wp beim Booten der Maschine auszuführen. Hierzu ergänzen wir einfach die Datei rc.local im Verzeichnis /etc/rc.d/

 # vim /etc/rc.d/rc.local
# Django: automatisch generiertes Wallpaper mit Systeminformationen versorgen
# eingefügt am 2011-07-25
/usr/local/bin/sysinfo4wp

Links

Diskussion

fischi, 2012/01/02 13:39

Gute Idee die Infos so zu sammeln und anzuzeigen. Für die IPs der Netzwerkkarten habe ich da noch eine andere Idee (so werden alle Netzwerkkarten ethX berücksichtigt):

# IPAdressen
for eth in `/sbin/ifconfig | grep eth | cut -d " " -f 1`; do
  let Y=$Y+25
  IPT=$(/sbin/ifconfig $eth | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)
  IPADRESSET="IP Adresse ($eth): "$IPT
  $PRG -gravity southwest -fill white -pointsize 20 -draw "text 50,$Y '$IPADRESSET'" $WALLPAPER $WALLPAPER
done

$Y ist die vertikale Position der Zeile im Bild. Einfach in allen anderen Punkten die Ziffer durch die Variabel ersetzen und z.B. immer mit let Y=$Y+25 eine neue Position der Zeile festlegen.

Fischi

django, 2012/01/05 10:58

Servus Fischi,

Deinen Ansatz finde ich eine gute Ergänzung zu dem Beispielsscript von mir. Bei einem System, welches ich hier unter meine Fittiche habe, finden sich 24 Netzwerkinterfaces, da wirds dann schon relativ eng mit der Anzeige auf dem Bildschirmhintergrund. Ähnlich verhält es sich mit unterschiedlichen Netzwerk-Schnittstellen, wie z.B.:

  • eth
  • ippp
  • isdn
  • wlan

Daher bevorzuge ich persönlich hier auf den Maschinen die Auswahl von genau den Interfaces, die ich sehen möchte.

Servus Django

fischi, 2012/01/05 22:48

Hallo,

so viele Netzwerkschnittstellen sind es bei mir nicht ;-) Die Scriptzeilen stammen auch aus einer anderen Geschichte. Da sammle ich Daten über die Netzwerkauslastung und stelle diese in je einem RRD Tool dar.

Aber noch etwas anderes. Die Bootzeit wird hier einfach durch die aktuelle Zeit bei dem ausführen des Scriptes festgestellt. Solange das Script automatisch bei dem Booten ausgeführt wird ist das auch ok. Soll das aber (mehrere User oder verschiedene grafische Oberflächen) erst zu einen späteren Zeitpunkt passieren gibt es ein Problem. Wenn man von der aktuellen Zeit die uptime Zeit abzieht, kommt man immer wieder auf den Bootzeitpunkt. Mein Vorschlag daher:

# Bootzeit
let Y=$Y+25
UPTIME=`uptime | grep '' /proc/uptime | awk '{ print $1 }'`
UPTIME=`echo "$UPTIME" | sed 's/\(.*\)...$/\1/'`
let BOOTDATE=`date +%s`-$UPTIME
BOOTDATE="Bootzeitpunkt: "`date -d @$BOOTDATE "+%d.%m.%y-%H:%M"`
$PRG -gravity southwest -fill white -pointsize 20 -draw "text 50,$Y
'$BOOTDATE'" $FILE $WALLPAPER

Grüße Fischi

django, 2012/01/05 23:22

HI,

na der eine Host ist auch ein Extremfall. Dein Codeschnipsel habe ich in das Script eingebaut und die Versionsnummer um eins erhöht.

cu Django

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
Wenn Sie die Buchstaben auf dem Bild nicht lesen können, laden Sie diese .wav Datei herunter, um sie vorgelesen zu bekommen.