====== Spass mit Screen ====== [[https://www.gnu.org/software/screen/|Screen]] ist ein hilfreiches Programm, mit dem du innerhalb einer Terminal-Sitzung mehrere virtuelle Terminals nutzen kannst. Beispielsweise musst du also nur eine ''ssh''-Sitzung eröffnen und kannst trotzdem entfernte Programme auf mehreren Konsolen gleichzeitig ausführen. Besonders angenehm ist es auch, in einer ''screen''-Sitzung auf einem entfernten Rechner ein langwieriges Programm zu starten (z.B. einen schönen neuen Kernel kompilieren), da du zwischenzeitlich die ''screen''-Konsole abhängen und die Netzwerkverbindung trennnen kannst. Später kannst du dich einfach wieder in die alte Sitzung einhängen. Es geht los: * Screen einmalig starten: screen * Ansonsten lässt sich auch direk eine Kommando mit Screen ausführen: screen vi file.txt Falls dich der Start-Info-Bildschirm stört, dann kannst du ihn per Option ''startup_message'' in der ''/etc/screenrc'' unterdrücken. Um der Sitzung einen Namen zu geben, kann der Parameter ''-S sitzungsname'' verwendet werden. Dies gilt sowohl für die Erzeugung, als auch für einen späteren Zugriff auf die Sitzung. ===== Tastenkombinationen ===== ^ Kombination ^ Bedeutung ^ | Ctrl-a | gibt dir die Macht über die Konsolen | | C-a ? | zeigt wichtige Kürzel | | C-a c | öffnet ein neues Fenster | | C-a w | zeigt alle offenen Fenster | | C-a 0 | springt zum ersten Fenster, 1 zum zweiten usw. | | C-a space | schaltet die Fenster einzeln durch | | C-a A | benennt das aktuelle Fenster um | | C-a a | schaltet zwischen zwei Fenstern hin und her | | C-a h | schreibt den aktuellen Bildschirminhalt in ''hardcopy.N''| | C-a H | beginnt/beendet das Protokollieren in die Datei ''screenlog.N'' | | C-a C-k | schließt das aktuelle Fenster < | C-a ESC | Scroll-Modus: mit den Cursortasten kannst du dich nun beliebig in der Terminal-History bewegen; zweimal ESC beendet diesen Modus | ==== Ausklinken aus einer screen-Sitzung ==== ^ Kombination ^ Bedeutung ^ | C-a d | detach, trennt dich von der Matrix (sie läuft im Hintergrund weiter) | | C-d | (EOF - gleichbedeutend mit ''exit'') - die aktuelle Shell wird geschlossen und damit auch das aktuelle Fenster - mit dem Schließen des letzten Fensters wird ''screen'' beendet | ===== Einhängen in eine alte Sitzung ===== * ''screen -r'' klappt, falls du dich per ''detach'' freiwillig aus der Sitzung ausgehängt hast * ''screen -x'' damit hängst du dich in eine laufende Sitzung (falls die Netzwerkverbindung zwischendurch unterbrochen wurde oder du gleichzeitig mit anderen Menschen im selben Fenster arbeiten willst) * ''screen -d -r'' trennt eine ''screen''-Sitzung von ihrer ursprünglichen Konsole und verbindet sie anschließend mit der aktuellen Konsole ===== Einschleusen von Tastatureingaben ===== * ''screen [-S screenname] -X readbuf [DATEI]'' liest den Inhalt von DATEI (Standard: ''/tmp/screen-exchange'') in den internen Zwischenspeicher der screen-Sitzung * ''screen [-S screenname] -X paste \.'' sendet den Inhalt dieses Zwischenspeichers in das aktuelle Fenster der screen-Sitzung (eigentlich ist es nur ''paste .'', allerdings führt die bash ohne backslash eine Substitution durch) * Das folgende Skript sendet seine Parameter als Zeichen in das screen-Sitzung (diese kann mit ''-S screenname'' gewählt werden): #!/bin/sh TMP_FILE=/tmp/screen-exchange-$$ [ "$1" = "-S" ] && shift && SC_OPTS="$SC_OPTS -S $1" && shift echo -en "$@" > "$TMP_FILE" screen $SC_OPTS -X readbuf "$TMP_FILE" screen $SC_OPTS -X paste \. rm "$TMP_FILE" ===== Automatisiertes Öffnen mehrerer Programme ===== Folgende Datei ist ausführbar und startet mehrere Fenster mit verschiedenen Programmen: #!/usr/bin/screen -c setenv FOO "bar" # Teile den Bildschirm horizontal in zwei Bereiche split screen -t "dmesg" 0 bash focus down screen -t "top" 1 top focus up