Raspberry Pi grafische Terminal Programme bauen
Wolltet ihr schon immer am Raspberry Pi grafische Terminal Programme bauen? In meinem Tutorial zeige ich euch wie whiptail funktioniert und wie man lediglich mit Bash wissen ganze geführte Menüs baut und Werte ausgibt beziehungsweise Werte vom Benutzer abfragt.
Raspberry Pi grafische Terminal Programme bauen
Kennst du raspi-config? Das Standard Konfigurationsprogramm für den Raspberry Pi wurde bereits vor einiger Zeit durch ein Desktop Fensterprogramm ersetzt. Man findet es jedoch immer noch, wenn man:
sudo raspi-config
in der Konsole eingibt. Damit kann man beispielsweise einen headless (nur Terminal ohne Desktop) laufenden Raspberry Pi konfigurieren. So sieht das Programm sowohl im Terminal auf dem Linux Desktop als auch über SSH in der Windows 10 Powershell gleich aus:
Solche Konfigurationsprogramme beziehungsweise grafische Ausgaben können wir relativ einfach selber über ein BASH Script bauen. Dafür verwenden wir den Befehl whiptail.
whiptail
Ein kleines „Hello World“ Beispiel wird wie folgt direkt auf der Raspberry Pi Konsole erzeugt:
whiptail --msgbox "Hallo Developer-blog.net Leser" 7 34
Ich habe das direkt über die Power Shell mit einem über SSH verbundenen Raspberry Pi getestet. Die Ausgabe dazu sieht wie folgt aus:
Kurz und knapp erklärt: –msgbox gibt eine Dialogbox aus. So wie man sie von Windows oder Linux kennt, nur wird diese im Terminal gezeichnet. Wer früher noch mit DOS gearbeitet hat kennt diese Darstellung. Die ersten grafischen Programme mit Maussteuerung wurden so entworfen, als es noch keinen Desktop gab. Mit den beiden Zahlen neben dem auszugebenden Text definieren wir Höhe und Breite des Box. Ist die Breite beispielsweise zu kurz, dann wird der Text einfach abgeschnitten. Also testen, testen, testen!
Ein- und Ausgabe
Das Hello World Beispiel gibt nur Werte aus, es geht aber auch noch mehr. Wir können genauso Werte abfragen. Eine einfache Abfrage des Benutzernamens sieht dann wie folgt aus:
whiptail --inputbox "Benutzername" 7 30 "Username"
Wie vielleicht bereits angenommen entspricht der 4. Parameter einem Defaultwert, der im Eingabefeld steht. Diesen kann der Benutzer aber ändern. Neben diese Option sieht man auch gleich, dass der Dialog neben dem Ok Button auch einen für Abbrechen enthält, man hat also mindestens zwei Möglichkeiten die Abfrage zu beenden:
Wenn du dieses Beispiel testest fällt dir vermutlich bei der Rückkehr ins Terminal auf, dass der eingegebene Namen ausgegeben wird. Wir haben jetzt eine Ein- und eine Ausgabe kennengelernt, aber noch nicht, wie man damit ein Programm baut.
whiptail Programm bauen
Um ein komplettes Konfigurationstool zu bauen brauchen wir ein Bash Script. Dieses erlaubt durch zusätzliche Logik und Variablen, dass wir Kontext relevante Informationen ausgeben beziehungsweise nötige Daten vom Benutzer abfragen. Für nähere Details dazu empfehle ich weiterführende Literatur zu Bash Scripte, mit dem folgenden kleinen Beispiel wird die Arbeitsweise dokumentiert und der eine oder andere erfahrene Scripter unter euch kann gleich loslegen:
#! /bin/bash clear while [ 1 ] do CHOICE=$( whiptail --title "Raspberry Pi Kontrolle" --menu "Auswahl treffen:" 12 50 4 \ "1)" "Name vom Script" \ "2)" "Zeit seit letztem Bootvorgang" \ "3)" "Aktuelle CPU Temperatur" \ "9)" "End script" 3>&2 2>&1 1>&3 ) result=$(whoami) case $CHOICE in "1)") result="Name vom Script: $result." ;; "2)") OP=$(uptime | awk '{print $3;}') result="Das System läuft seit $OP Minuten." ;; "3)") OP=$(/opt/vc/bin/vcgencmd measure_temp | cut -c6-9) result="Die CPU hat aktuell $OP Grad Celsius." ;; "9)") exit ;; esac whiptail --msgbox "$result" 16 50 done exit
Kopiert dazu das angegebene Listing in einer Datei und nennt diese beispielsweise picontrol.sh. Wichtig ist, dass ihr die Ausführungrechte setzt. das geht mit:
chmod +x picontrol.sh
danach startet man das Script mit:
./picontrol.sh
oder
sh picontrol.sh
Die Ausgabe des Menüs sieht wie folgt aus:
Je nach Aktion werden nun unterschiedliche Ausgaben dem Benutzer präsentiert. Mit solchen Scripten lassen sich alle möglichen Konfigurationen zusammenbauen. Ein bekanntes Beispiel ist die Linux Installation über den Textmodus. Könnt ihr gerne zum Beispiel mit einem Ubuntu Server Image probieren.
Für weitere Informationen zu whiptail kann ich das Manual empfehlen:
man whiptail
dort findet man alle Funktionen übersichtlich und kurz beschrieben.
Fazit
Soweit mit der kurzen Einführung zu whiptail. Wenn man sich näher mit der Bash Entwicklung befasst kann man mit Hilfe dieses grafischen Systems nette Programme bauen. Grafische Terminal Programme sind für Einsteiger insbesondere am Raspberry Pi ideal. Ich finde es sollten mehr Linux Tools am Raspberry Pi durch solche grafischen Assistenten konfigurierbar sein. Das würde die Arbeit mit Konfigurationsdateien so wie jetzt vermutlich vereinfachen.
Was denkst du darüber? Wo und wie fragst du Benutzereingaben aktuell ab?