Screen Tipps & Cheatsheet

von Khark am 2. Mai 2007 um 21:17 Uhr

Vorwort:
Schreibe ich mal, wenn ich Lust habe :-)

Allgemeines:
In der vi-Manpage sind die Tastenkürzel abgekürzt. “C-a a” steht so z.B. für “Ctrl+a a” bzw. “Strg+a a” (Strg und a gleichzeitig, danach wieder ein a). Die Schreibweise “C-a” für Ctrl+a ist historisch und kommt u.a. vom Editor emacs.

Zeichen in [] dienen nur zur Erklärung! (Als Gedankenstütze für die Schalter..)

Startparameter: (Beim starten von Screen angeben.)
<sessionname> ist ein Platzhalter für den Namen der Screensession. (Kann mit -S beim erstellen des Screens vergeben werden.)
screen -r[esume] <sessionname>: Verbindet sich zur angegebenen Screensession
screen -S[essionname] <sessionname>: Gibt der Screensession einen Namen, den man dann mit -r verwenden kann
screen -D -RR <sessionname>: Detache die aktuelle Screensession und versuche alles was möglich ist um sie wieder zu attachten. (Wichtig, wenn die Verbindung zusammengebrochen ist).
screen -d/-D[etach] <sessionname>: Die Screensession detachen/verlassen.
screen -r[esume] <sessionname>: Verbinde dich zur aktuellen Screensession
screen -t <title>: Setzt den Titel für das aktuelle Programm/Window (siehe: Strg+a :title “titel”)
screen -ls/-list: Zeigt alle aktuellen Screensessions mit Namen/Pfad und Status (Attached, Detached)
screen -X <command>: Sende <command> an den angegebenen Screen. Achtung! Hierüber kann man in die Screens anderer Benutzer gucken! Daher seine Screensession unbedingt mit einem Passwort schützen! (Siehe weiter unten.)
screen -x <sessionname>
screen -c </pfad/zur/datei>: Eine alternative Konfigurationsdatei für screen angeben.
* Default ist .screenrc im /home des Benutzers.

Tastenkombinationen: (Im laufenden Screen..)
Strg+a c[reate]: Erschafft ein neues Window innerhalb eines Screens und wechselt in dieses Window
Strg+a n[ext]: Springe zum nächsten Window
Strg+a p[revious]: Spring zum vorherigen Window
Strg+a 0-9: Spring zu Screen 0-9 (Nr. des Screen anzeigen durch Strg+a “)
Strg+a N (Shift+n): Nummer und Title des aktuellen Windows zeigen.
Strg+a d[etach]: Verlasse den screen (detachen)
Strg+a h[ardcopy]: Legt einen ASCII Screenshot unter dem Namen hardcopy.n im Home-Verzeichniss des Benutzers ab
Strg+a : (Shift+.): Gehe in den Kommandomodus
Strg+a ” (Shift+2): Zeige eine Liste aller Windows im aktiven Screen mit Nummer, Namen und gesetzten Flags
Strg+a A (Shift+a): Einen Namen (title) für das aktuelle Window festlegen
Strg+a * (Shift+’+’): Zeigt eine Liste aller attachten Sceens an
Strg+a ? (Shift+ß): Hilfe anzeigen

Sicherheit & Komfort:
Strg+a x: Sperre den aktuellen Screen. Wenn man den Screen wieder reattached ohne ihn verlassen zu haben muss man erst das User-Passwort und dann das Screen-Passwort angeben. Wenn man die Screensession detached hat, muss man bei reattchen nur das Screen-Passwort angeben.
Strg+a ] (AltGr+9): Inhalte der Zwischenablage in STDIN des aktuellen Window einfügen
Strg+a Esc[ape]: In Kopier-/Scrollmodus wechseln. Kopiermodus verlassen durch drücken von Esc[ape] oder Strg+C.

Im Kopiermodus kann man mit Page-Up/-Down im aktuellen Window hoch- und runterscrollen, bekommt aber nur den Inhalt des aktuellen Windows. Im Scrollmodus würde man die zuletzt angezeigten Inhalte der anderen Windows sehen! Oder man bekommt ein Tilde “~” eingefügt (Man scrollt also nicht).
Die Erklärung hierfür ist, dass das Terminal wohl den alternativen screen buffer anzeigt. Um dies zu ändern, kann man folgende Zeile in seine .screenrc einfügen:

termcapinfo xterm|xterms|xs|rxvt ti@:te@

Arbeiten mit mehreren Regionen in einem Window:
Strg+a S (Shift+s): Splittet das aktuelle Window in 2 Regionen

Kleine Warnung: Strg+s sendet das Stop-Signal an die Shell (zumindest in der Bash), alle Anwendungen werden angehalten. Ein Strg+q sendet das Start-Signal. Alle Anwendungen werden wieder ausgeführt.
Diese Befehle sind Shellintern und haben nichts mit Screen zu tun!

Strg+a X (Shift+x): Zerstöre die aktuelle Region. (Auch: Strg+a :remove). Kein Effekt wenn nur eine Region vorhanden.
Strg+a Q (Shift+q): Zerstört alle Regionen bis auf die aktuell ausgewählte
Strg+a Tabulator: Zur nächsten (Eingabe-)Region wechseln

Screen-Befehle:
Strg+a :number (Shift+.): Aktuelles Window an Position n verschieben
Strg+a :source <Pfad zur konfigdatei>: Konfigurationsdatei neu einlesen, Session bleibt erhalten!
Strg+a :hstatus “titel”: Ändert den Namen des aktuellen Window in der Titelleiste
Strg+a :password <password>: Legt ein Password für den aktuellen Screen fest. Wenn die “password”-Direktive in der .screenrc leer ist, fragt screen nach dem neuen Passwort und speichert dieses im Buffer ab. (Zum einfügen siehe: Strg+a ])
Strg+a :remove : Zerstöre die aktuelle Region im Screen
Strg+a :only : Zerstöre alle Regionen bis auf die aktuelle Region

Screen und seine Session-Prozesse:
Wenn auch ein screen -D -RR <sessionname> nicht hilft um in die Screensession zu kommen, dann ist wohl etwas anderes im argen.
Wenn man nicht die Lust/Zeit und/oder Kenntnisse hat diesem nachzugehen, dann hilft meist folgendes:

Man sucht nach allen aktiven screen-Verbindungen und merkt sich die Prozess-ID (PID):
ps -ef|grep screen

Ein grep nach screen (Klein geschrieben!) listet einem dabei nur die Verbindungen auf. Nicht die Screensessions!
# In diesem Beispiel wäre die PID der Screenverbindung: 26727
# Auch erkennbar daran, das bei screen der Parameter -r verwendet wird und auf dem Terminal ttyp9 läuft,
# während bei SCREEN die Schalter -S und -c verwendet werden und diese kein Terminal hat.
#
user@hostname:~$ ps -ef |grep screen
user 8331 1 0 00:14 ? 00:00:08 SCREEN -S scr -c .screenrc
user 26727 26720 0 13:07 ttyp9 00:00:00 screen -r scr
user 27073 10855 0 13:10 ttyp7 00:00:00 grep screen

Nun sucht man nach der PID der gewünschten Verbindung und macht:
kill -9 PID

Die Screenverbindung wird beendet. Die Screensession bleibt aber aktiv und wird nicht beendet. Alle Programme im Screen laufen weiterhin!
Nun verbindet sich wieder auf die Session mit:
screen -D -RR <sessionname>

Wenn man die Screensession beenden will, tut man folgendes (SCREEN –> Groß geschrieben!):
ps -ef|grep SCREEN

Und schießt dann den entsprechenden Screen mit “kill -9 PID” ab. Auf das obige Beispiel bezogen, müsste man hier die PID 8331 einsetzen.

Teil 2: Meine .screenrc

Kommentare sind geschlossen.