====== 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