Screen? “Hab i eh am Handy” oder wofür man dieses Werkzeug gebrauchen kann

Für jemanden der oder die nicht wirklich oft in einer Konsole arbeiten, mag dieses Tool namens Screen im ersten Moment eher verwirrend erscheinen: Ein Terminal-Programm das noch ein Fenster aufmacht? Der versierte Nutzer wird sich denken: kann man da nicht einfach noch ein Fenster aufmachen? Ja, kann man, aber das ist nicht der Haupttrick von Screen. Denn der Schmäh ist viel mehr, dass dieses Fenster auch im Hintergrund weiterwerkelt. Korrekt geschlossen (Strg + a und dann d) lebt die Konsolensitzung dann bis an das Betriebsende der Maschine weiter. Das heißt man kann dem Computer etwas zu tun geben, aus dem Screen rausgehen, das Terminalfenster schließen und das gewünschte Programm oder Skript läuft weiter.

Doch wofür kann man das gebrauchen? Für das Betreiben einer Kamera am Raspberry Pi zum Beispiel! Genau an so einem Projekt arbeite ich seit letztem Sommer. Die Idee dabei war ein Vogelhaus mit einer Kamera (das neueste Raspberry Pi Camera Module V3) auszustatten und dann den Raspberry Pi 4, der das Ganze steuert, über die Ferne anzuweisen einen Stream zu starten.

Im folgenden eine kleine Anleitung wie sowas im konkreten Fall zu bedienen ist.

Raspberry Pi 4, genannt “Voglberry” aufrufen mit SSH

Um die Kontrolle des Pis zu übernehmen verbindet man sich am besten mit SSH.

Zuerst mit SSH verbinden (im Terminal, Powershell, oder auch PuTTY), wenn man im selben Netzwerk ist (Wlan oder Kabel):

ssh vogl@192.168.0.7

Oder via tailscale (wie man das installieren kann beschreibe ich hier, auch wenn man für den Raspberry Pi nur das curl -fsSL https://tailscale.com/install.sh | sh Skript ausführen muss und sich den Rest sparen kann):

ssh vogl@100.87.103.34

Die IP-Adressen muss man an die jeweiligen Gegebenheiten anpassen, im Wlan kann man dazu in den Routereinstellungen nachsehen, oder einen Netzwerkscan machen, unter tailscale geht das mit dem Befehl tailscale status.

Screen starten

Einen neuen Screen startet man mit folgenden Befehl:

screen -S stream

-S steht für Starten und danach folgt ein beliebiger Screenname. Und damit erstellt man schon einen neuen Screen und dieser öffnet sich dann auch sogleich:

Bin ich jetzt in einem Screen, oder nicht?

Wie man sieht, ist kein visueller Unterschied zu erkennen. Aber mit dem folgenden Befehl…

echo $STY

… kann man sofort erkennen, ob man in einem Screen ist oder nicht:

Jetzt mit Strg + a und dann d aus dem Screen rausgehen und noch einmal den Befehl ausführen…

… und es wird nichts angezeigt. So kann man der “Screenception” ein Schnippchen schlagen.

Und wie kommt man jetzt wieder in den Screen rein?

So, jetzt sind wir aber wieder aus dem Screen draußen; wie gehts also wieder retour? Dazu verwendet man den Unix-Klassiker ls in Kombination mit dem Screen Befehl:

screen -ls

So schaut das aus wenn ein einzelner Screen da ist…

… so wenn zwei da sind…

… und der Vollständigkeit halber so wenn keiner da ist:

Um sich zu verbinden macht es einen Unterschied, ob man jetzt nur einen Screen offen hat, oder zwei, denn bei einem genügt es diesen Befehl auszuführen:

screen -r

Und er öffnet einfach den einen Screen automatisch. Wenn zwei da sind, dann muss man auswählen welchen man denn haben möchte, bei uns ist das 3169590.streamtest und das hängt man hinten noch dran:

screen -r 3169590.streamtest

Screenkiller

Hat man genug vom Screen, “killt” man ihn mit Strg + a und dann k, wo man zur Sicherheit noch einmal gefragt wird, ob man das eh auch wirklich will:

Mit y bestätigen und weg ist er.

Etwas tun im Screen: Videostream starten

Wenn man im Screen drinnen ist, dann kann man mit diesem Befehl den einen Videostream starten:

libcamera-vid -t 0 --width 1920 --height 1080 --codec h264 --inline --listen -o tcp://0.0.0.0:8888

Und jetzt kann man einfach mit Strg + a und dann d aussteigen und der Streamscreen läuft munter weiter. Wie und was man mit einem Videostream im lokalen Netz machen kann, zeige ich in einem anderen Beitrag.

Tipps

Oft ist es sinnvoll die Pfeiltaste “nach oben” zu drücken. Dann wird pro Pfeiltastendruck der jeweils der vorherige Befehl geladen. Um den gewünschten Befehl auszuführen drückt man einfach Enter.

Falls der Stream irgendwo hängt, dann kann man auch mit Strg + c den aktuellen Prozess beenden und man sollte wieder zurück in der Eingabe sein. Falls das auch nicht gehen sollte kann man den Screen auch zur Not komplett killen mit Strg + a und dann k.