Vorwort
Wir haben in der LUG beschlossen, uns
immer mal interessante Programme vorzustellen. Das heißt, es soll kurz auf
die Bedienung und evtl. wichtige Einstellungen eingegangen werden. Da in letzter
Zeit immer mal wieder Fragen zu GNU screen aufkamen, beschloss ich, dass ich
dieses Programm vorstelle. Diese Anleitung ist das Ergebnis. Sollte euch daran
etwas unklar sein bzw. falls ihr weitere Fragen dazu habt, schreibt einfach
einen Kommentar dazu. Die Anleitung könnt ihr auch auf den Seiten der LUG
finden.
Was macht screen?
GNU screen ist ein “Fenstermanager” für Terminals. Das heißt die
Aufgaben, die ihr bislang unter mehrere Konsolen oder Terminals erledigt habt,
könnt ihr mittels screen innerhalb einer Konsole bzw. Terminal machen. Wenn
ihr eine Sitzung offen habt und den Rechner wechseln wollt, ist es mit screen
sehr einfach möglich, die laufende Sitzung von der Konsole zu lösen
und diese auf den anderen Rechner “mitzunehmen”. Dabei laufen alle Prozesse, die
innerhalb von screen gestartet wurden, weiter.
Start von GNU screen
Das Programm wird durch den Aufruf screen gestartet. Dabei
erscheint in der Regel eine Übersicht mit der Versionnummer und
Lizenzinformationen. Mit einem Druck auf die Leer- oder Entertaste wird dieses
übersprungen. Ihr könnt auch dies auch dauerhaft ausschalten. Dazu
öffnt ihr euren Lieblingseditor und bearbeitet die Datei .screenrc im
Heimverzeichnis. Dort werden alle Einstellungen für screen gespeichert. In
der Datei tragt ihr die Zeile startup_message off ein und speichert
diese ab. Beim nächsten Start von screen erscheint dann keine Meldung mehr.
Nach der esten Meldung solltet ihr nun eine Shell sehen. Hier könnt ihr
nun wie gewohnt arbeiten und die üblichen Aufgaben erledigen. Doch dies
stellt natürlich keinen Unterschied zur sonst üblichen Arbeitsweise
auf der Shell dar. Jetzt wollen wir versuchen, eine zweite Shell zo öffnen.
Dieses Anliegen muss screen mitgeteilt werden. Befehle werden dabei in Form von
Tastenkürzeln eingegeben. Bei screen wird jeder Befehl mit der Folge
Strg+a eingeleitet, d.h. ihr drückt die Taste Strg und die Taste
a gleichzeitig. Jetzt weiß screen, dass ein Befehl folgt. Um nun ein neues
Shellfenster zu öffnen, drückt also die Tasten Strg+a c,
d.h. wieder Strg und a zusammen und danach ein kleines c. Nun sollte sich ein
neues Shellfenster geöffnet haben. Auch dieses kann nun wie gewohnt benutzt
werden. Ich empfehle euch, ein paar mal zu testen, wie man ein neues Fenster
öffnet. Dadurch werdet ihr die Tastenkombinationen besser gewohnt.
Wechsel der Fenster
Wenn ihr nun etwas herumgespielt habt, werdet ihr sicher viele einzelne
Shells offen haben. Doch wie bekommt ihr diese wieder zu bzw. wie könnt ihr
zu vorherigen Fenstern zurück kommen? Der klassiche Weg, die laufende Shell
zu beenden, indem man exit, bye oder Strg+d
eingibt, funktioniert auch hier. Dadurch wird die laufende Shell beendet und
wenn man das oft genug macht, kommt man auch wieder zu der gewüschten
Shell. Natülich ist dies nicht unbedingt der richtige Weg. Denn i.d.R. will
man die Shells nicht einfach beenden. Wie also kommt man nun auf anderem Wege
weiter? Bei solchen Fragen kann zunächst die Hilfe konsultiert werden. Mit
Strg+a ? erreicht ihr eine Übersicht der bestehenden
Tastaturkürzel. Immer wenn ihr mal einen Punkt erreicht, an dem ihr nicht
wisst, wie es weitergeht, empfiehlt sich ein Blick in die Hilfe. Hier finden
sich nun diverse Hinweise auf den Fensterwechsel. Eine erste Idee wäre
mittels Strg+a w eine Ansicht der Fenster anzeigen zu lassen. Dies
veranlasst screen in der untersten Leiste alle Unterfenster mit der Nummer des
Fensters zu drucken. Das aktuelle Fenster wird dabei mit einem Stern
gekennzeichnet. In der Hilfe ist weiterhin zu sehen, dass u.a. mittels
Strg+a n auf das nächste Fenster bzw. mittels Strg+a
p zum vorhergehenden Fenster navigiert werden kann. Für den Sprung
zum nächsten Fenster bietet sich meiner Meinung auch Strg+a
Leertaste an.
Gerade bei einer großen Zahl von Fenstern kann es aber recht müsam
sein, durch alle Fenster zu rotieren. Daher existieren hier noch bessere
Varianten. In der Ansicht, die ihr mittels Strg+a w erhaltet, sind
auch die Nummern der Fenster angedruckt. Auf diese könnt ihr einfach
mittels Strg+a $FENSTERNUMMER zugreifen. Dabei steht FENSTERNUMMER
für eine Zahl zwischen 0 und 9. So springt screen schnell zwischen den
ersten zehn Fenstern hin und her. Ich empfehle euch, auch dies wieder oft zu
probieren und zu nutzen. Denn je mehr ihr das macht, desto schneller tritt der
Gewöhnungseffekt ein.
Sollte euer screen nun mehr als zehn Fenster haben, ist es nicht mehr so
einfach möglich in die hinteren Fenster zu springen. Unter Umständen
hilft euch hier die Fensterliste weiter. Diese Ansicht erhaltet ihr durch
Strg+a ". Mit den Pfeiltasten wählt ihr dann ein Fenster aus und
mittels Enter springt ihr in das gewählte Fenster. Ein spezielles Fenster
kann auch durch Strg+a ‘ und die Eingabe der jeweiligen Nummer
angesprungen werden.
Hin und wieder habe ich in einem Fenster einen vim geöffnet und schreibe
ein Programm. Daneben brauche ich ein anderes Fenster, um das Programm zu
kompilieren. Dabei liegen die Fenster nicht notwendigerweise nebeneinander. Ein
Springen zwischen diesen zwei Fenstern ist mittels Strg+a Strg+a
einfach machbar.
Fenstertitel
Wenn ihr nun viel mit screen arbeitet, werdet ihr feststellen, dass ihr bei
den oben genannten Informationen immer nur den Namen der Shell seht. Aber
vielleicht ist in Wirklichkeit ein Editor offen oder eine Shell arbeitet einen
speziellen Job ab. Da ist es sehr nützlich, dem entsprechenden Fenster auch
einen Namen zu vergeben. Mit der Tastaturkombination Strg+a A
(Beachte das große A) kann man den Namen ändern. So könnt ihr
einen Titel für setzen, der euch am besten passt.
Änderungen verfolgen
Beim Arbeiten mit diversen Prozessen treten hin und wieder Aufgaben auf,
für deren Abarbeitung die Shell lange Zeit benötigt. Mit screen kann
dies nun problemlos in einem eigenen Fenster gemacht werden und weiterhin kann
screen euch darauf aufmerksam machen, wenn sich im betreffenden Fenster etwas
ändert. Dazu müsst ihr das Programm mittels Strg+a M
anweisen, das Fenster zu überwachen. Nun werdet ihr über die
&Aaml;nderungen informiert. Standardmäßig schreibt screen in die
unterste Statuszeile dann Activity in window X
(X steht für die
Nummer des Fensters.). Diese Standardmeldung lässt sich über die
Variable activity in der .screenrc anpassen (z.B.: activity
“ACHTUNG, in Fenster %n (%t) ist etwas passiert”).
Abhängen einer Sitzung
Nach getaner Arbeit wollt ihr nun euren Platz verlassen. In der Regel
würdet ihr den Bildschirm mittels xlock o.ä. sperren. Gerade wenn der
Rechner aber von mehreren Personen benutzt wird, ist es besser, diesen
freizugeben. Wie ich schon schrieb, kann ich eine screen-Sitzung vom laufenden
Terminal abhängen. Zum Abhängen der Sitzung reicht die Kombination
Strg+a d. Jetzt seht ihr wieder einen “normalen” Shellprompt vor euch
und könntet euch nun vom System ausloggen oder hier weiterarbeiten. Wenn
ihr von vornherein wisst, dass ihr euch ausloggen wollt, steht auch eine weitere
nützliche Tastaturkombination zur Verfügung. Nämlich der so
genannte Power detach. Mittels Strg+a DD wird die screen-Sitzung vom
Terminal abgehangen und gleichzeitig erfolgt das Logout. Damit ist es
möglich zwei Schritte mit einmal zu tun.
Wenn ihr dann wieder zum Rechner zurückkehrt bzw. euch vielleicht per
SSH auf dem Rechner einloggt, wollt ihr die screen-Sitzung wieder aufnehmen.
Dazu gebt ihr auf der Konsole einfach den Befehl screen -r ein. Bei
einer eindeutigen Zuordnung öffnet screen die alte Sitzung an dem Punkt, an
dem sie von euch geschlossen wurde. Solltet ihr mehrere abgehangene Sitzungen
haben, zeigt screen euch eine Übersicht:
jens@paradise:~/ > screen -r
There are screens on:
4172.tty2.paradise (Detached)
10711.tty3.paradise (Detached)
2 Sockets in /var/run/screen/S-jens.
jens@paradise:~/ >
In dem Falle muss screen noch der Name der betreffenden screen-Sitzung
mitgegeben werden. Die obige Übersicht wird auch mittels screen
-ls angezeigt. So könnt ihr leicht erkennen, welche screen-Sitzungen
es derzeit noch gibt.
Manchmal ist es auch ganz sinnvoll, der Sitzung selbst einen Namen zu geben.
Dann erkennt ihr in der obigen Ansicht schneller, welche screen-Sitzung welche
Aufgabe hat. Mit dem Befehl Strg+a :sessionname Sitzung1 erhält
die laufende Sitzung den Namen “Sitzung1” und die Ausgabe von screen
-ls ist dann:
There are screens on:
4172.tty2.paradise (Attached)
10711.Sitzung1 (Detached)
2 Sockets in /var/run/screen/S-jens.
Jetzt wisst ihr u.U. schneller, welche der beiden Sitzungen die richtige
ist.
Mit mehreren Nutzern arbeiten
Eines der weiteren beeindruckenden Eigenschaften von screen ist, dass
verschiedene Leute in einer Sitzung arbeiten können. Falls ihr das selbst
mal testen wollt, setzt zunächst die Konfigurationsvariable
multiuser auf “on”. Damit wird der Mehrnutzerbetrieb
grundsätzlich möglich gemacht. Eine weitere Hürde ist das
SUID-Bit. Damit ein anderer Benutzer die screen-Sitzung mit benutzen kann, muss
screen das SUID-Bit tragen. Insbesondere unter Sicherheitsgesichtspunkten sollte
daher genau überlegt werden, wie und ob das überhaupt gemacht werden
soll. Ich würde die Datei /usr/bin/screen in eine neue Datei kopieren und
nur der Kopie das SUID-Bit verleihen. Ein zusätzlicher Cronjob kann dann
dafür sorgen, dass die Datei wieder gelöscht wird. Die genaue
Verfahrensweise sollte aber von euch abhängen.
Wenn ihr die obigen Schritte vollzogen habt, könnt ihr dann Nutzerrechte
innerhalb von screen vergeben. Mittels Strg+a :addacl screener
weist ihr dem Nutzer screener das Recht zu, auf eure screen-Sitzung zuzugreifen.
Der Nutzer darf dabei alles, was ihr auch dürft. Wenn ihr die Rechte
einschränken wollt, müsst ihr mit chacl bzw.
aclchg arbeiten. Eine genaue Beschreibung dieser Einstellung findet
sich in der Manpage.
Bildschirm teilen
Das Programm screen kann auch den Bildschirm horizontal teilen. Die
Tastaturkombination Strg+a S ist der Weg zum Ziel. Mittels
Strg+a TAB wechselt screen zwischen den Bildschirmhälften. Die
untere Hälfte ist zunächst leer. Wenn ihr den Cursor dort plaziert,
könnt ihr einfach ein Fenster durch Strg+a $NUMMER (bzw. einen
äquivalenten Befehl) wählen und schon wird dieses Fenster angezeigt.
Mit Strg+a TAB springt der Cursor zwischen beiden Teilen hin und her.
Wenn ihr dann beschliesst, dass doch ein großes Fenster reicht, gebt
Strg+a Q ein und die Halbierung ist verschwunden.
Bildschirminhalte kopieren
Ein weiteres sehr nützliches Merkmal von screen ist das Kopieren von
beliebigen Bildschirminhalten. Der Kopiermodus kann standardmäßig mit
Strg+a [ aktiviert werden. Danach kann der Cursor mit ähnlichen
Navigationskommandos wie im vi bewegt werden. In der Manpage zu screen findet
sich eine detaillierte Aufstellung (Suche nach Movement keys). Nachdem der
Startpunkt gefunden wurde, markiert ihr die zu kopierende Region mit der
Leertaste und bewegt den Cursor bis zum Ende der zu kopierenden Region. Danach
wieder ein Druck auf die Leertaste und der Inhalt wurde in einen Buffer kopiert.
Dieser kann dann an anderer Stelle mittels Strg+a ] eingefügt
werden.
Manchmal ist es auch vonnöten, einen Abzug des Bildschirms zu erstellen.
Dies könnt ihr durch Strg+a h erreichen. Screen legt dann eine
Datei hardcopy.0 an. Darin findet sich der Inhalt des Bildschirms und kann
weiterverwendet werden.
Konfiguration
Wie ich bereits schrieb, wird die Konfiguration in der Datei
.screenrc abgelegt. Screen ist eines der Programme, die sich durch
eine Vielzahl an verschiedenen Konfigurationen sehr individuell steuern lassen.
Aus meiner Sicht sind die einstellbaren Tastaturkombinationen recht interessant.
Da ich Dateien gern mit dem Editor vim bearbeite, habe ich folgende Zeile in
meine .screenrc aufgenommen: bind V screen -t EDIT vim. Dadurch kann
ich mittels Strg+a V den vim aufrufen. Der Parameter -t
sorgt dafür, dass das so aufgerufene Fenster noch einen entsprechenden
Titel erhält. Auf diese Weise lassen sich diverse individuelle
Tastaturkombinationen anlegen. Wer eine bereits voreingestellte wieder
abschalten will, kann einfach bind H in die .screenrc aufnehmen.
Damit verliert Strg+a H seine Bedeutung.
Wer an einer wackeligen Internetverbindung sitzt und daräber screen
nutzt, wird die Einstellung autodetach on zu schätzen wissen.
Dies sorgt dafür, dass beim Abbruch der Verbindung die screen-Sitzung
automatisch abgehangen wird.
Oben schrieb ich, dass ihr durch Strg+a w eine Übersicht der
bestehenden Fenster anzeigen lassen könnt. Diese Informationen lassen sich
auch permament einblenden. Screen kennt dazu die Einstellungen
caption und hardstatus. Beide können sehr
individuelle Werte, von den aktien Fenstern über Zeit und Systemload bis
hin zur Ausgabe von Skripten, anzeigen. Diese Ausgabe kann auch noch durch
Vorder- und Hintergrundfarben verfeinert werden. Hier solltet ihr selbst mal ein
wenig rumspielen, was alles möglich ist bzw. was euch hier am besten
gefällt.
Weiterhin existieren noch sehr viele weitere Einstellungsmöglichkeiten.
Diese würden jedoch den Umfang der Einführung sprengen. Ich empfehle
euch, mal einen Blick in die Manpage zu werfen bzw. im Netz nach verschiedenen
.screenrc-Dateien zu suchen. Gerade aus letzteren Könnt ihr euch einige
Anregungen entnehmen.
Ich hoffe, ich habe euch ein wenig Appetit auf screen gemacht und ihr
probiert das Programm bald selbst mal aus.