screen ist ein nettes Tool, um mit mehreren Personen gemeinsam auf einem Bildschirm (engl. "screen") zu arbeiten, genauergesagt in einem Terminal(xterm oder Konsole spielt keine Rolle). Man kann so z.B. jemand beim Konfigurieren zuschauen (oder jemand zuschauen lassen, wie man etwas konfiguriert).
Auch sehr praktisch ist screen für unzuverlässige Verbindungen, z.B. per Interneteinwahl oder Wireless-LAN: bricht die Verbindung zum ferngewarteten Server ab, dann wählt man sich einfach wieder neu ein und schaltet sich erneut auf screen auf - die Bildschirminhalte sind dann genauso wie vor dem Abbruch!
Siehe auch: twin
Inhaltsverzeichnis
- Vorgehensweise
- Die wichtigsten Screen-Kommandos
-
Fragen & Antworten
- Gibt es ein einfaches screen-Frontend?
- Wie kann man screen so konfigurieren, dass man im Bildschirmpuffer mit Shift + !BildHoch/-Runter blättern kann?
- Hat jemand ein Beispiel für eine (gute) .screenrc ?
- Bei einem Resize wird die Darstellung zerstört. Was kann man machen?
- Wie Kann man mit screen über ein Nullmodem-Kabel auf einen anderen Rechner connecten. (screen bringt bei "screen /dev/ttyS0" immer einen dunklen Bildschirm) ?
- Kann ich von einem Screen aus einem anderen Screen einen Befehl Keystroke senden?
- Wie kann man mittels screen eine multisession auf einem Terminal machen?
- Wie kann man mittels screen mehrere Benutzer auf eine Sitzung zugreifen lassen?
- Ich suche eine Seite, die sich mit "digraph" befasst (Strg-A Strg-V) Speziell geht es mir um das EUR Symbol
- Ist es möglich Screen automatisch als Daemon zu starten, und in dem dann 2 Session mit jeweils einen Programm zu starten?
- Wie kann man Screen automatisch beim Login starten?
- Beispiel für Remote-Batchbetrieb
- Weblinks
Vorgehensweise
Verbindung zum Zielrechner aufbauen, z.B. mit OpenSSH.
Starten tut man es einfach mit screen, ab dann arbeitet man auf einem von screen verwalteten screen
Eine Liste von laufenden screens erzeugt screen -ls
Multi-User-Mode: Wenn schon ein screen läuft, kann man sich einfach mit screen -rx <pid> draufschalten.
Wenn man sich nicht sicher ist, ob schon ein anderer screen läuft: screen -R erstellt bei Bedarf einen neuen.
Wenn man fertig ist, einfach Verbindung abbrechen (ggf. vorher Strg-a d = detach).
Die wichtigsten Screen-Kommandos
Kombination |
Kommando |
Beschreibung |
Strg-a ? |
help |
Zeigt den eingebauten Hilfebildschirm |
Strg-a 0 |
select |
Schaltet zum Bildschirm 0 |
... |
select |
... |
Strg-a 9 |
select |
Schaltet um auf Bildschirm 9 |
Strg-a A |
title |
Erlaubt dem User, dem aktuellen Bildschirm einen Namen zu geben. |
Strg-a c |
create |
erzeugt einen neuen von Screen verwalteten Bildschirm |
Strg-a d |
detach |
Beendet den screen prozess, der die Session und das Terminal verbindet |
Strg-a n |
next |
Schaltet zum Bildschirm mit der nächsthöheren Nummer |
Strg-a p |
previous |
Schaltet zum Bildschirm mit der nächstniedrigeren Nummer |
Strg-a x |
lockscreen |
Sperrt die Konsole, bis das Passwort des Benutzers eingegeben wurde |
Strg-a <Leertaste> |
next |
Alternative zu n; u.U. handlicher zu bedienen |
Strg-a " |
windowlist -b |
Listet alle Fenster der aktuellen Session |
Fragen & Antworten
Gibt es ein einfaches screen-Frontend?
Antwort: Ja es gibt einen screen session handler unter http://freshmeat.net/projects/screenie
Wie kann man screen so konfigurieren, dass man im Bildschirmpuffer mit Shift + !BildHoch/-Runter blättern kann?
Mit dem Eintrag termcapinfo xterm|xterms|xs|rxvt ti@:te@ kann man in einem xterm die Scrollfunktionen einigermaßen sinnvoll benutzen.
Mit Shift + !BildHoch/-Runter geht das meines Wissens nach nicht. Man kann aber den scrollback-Puffer benutzen, der durch Strg-a Esc aktiviert wird. Dann hat man u.a. folgende Möglichkeiten:
Strg-b/-f für backwards (rückwärts) bzw. forwards (vorwärts), jeweils ganze Seiten
Strg-u/-d für up (hoch) bzw. down (runter), jeweils halbe Seiten
- die vi-Tasten h, j, k, l wie gewohnt
wie immer hilft ein Blick in die ManPage, am besten mit /copy<enter> gleich den gewünschten Bereich anvisieren.
Mit Strg-a [ (wechseln in den copy-mode) und dann mir den Pfeiltasten geht's auch. Zurück geht's mit Strg-a ]
Hat jemand ein Beispiel für eine (gute) .screenrc ?
Die folgende Konfiguration gleicht die Bedienung von screen ein bisschen an gängige Terminalprogramme an (Tabs, Strg-Shift-T für neuen Tab, Strg-BildHoch/Runter / Alt-BildHoch/Runter / Alt-links/rechts zum Wechseln)
# Tabs caption always "%{kw}%-w%{ky}%n %t%{-}%+w %=%{bw}@%H%{kw} %D %Y-%m-%d %c" hardstatus string "[%H]" # Ctrl-PageUp/Down or Alt-PageUp/Down or Alt-left/right bindkey ^[[5;5~ prev bindkey ^[[6;5~ next bindkey ^[[5;3~ prev bindkey ^[[6;3~ next bindkey ^[[1;3D prev bindkey ^[[1;3C next # putty uses Ctrl-PageUp/Down by itself # so only Alt-PageUp/Down and Alt-left/right bindkey ^[^[[5~ prev bindkey ^[^[[6~ next bindkey ^[^[OD prev bindkey ^[^[OC next # Ctrl-Shift-T bindkey ^T screen # Scrollen im xterm termcapinfo xterm|xterms|xs|rxvt ti@:te@ # Detach mit logout bind d bind d pow_detach bind ^d pow_detach
Vorschlag: http://www.benedikt-wildenhain.de/.screenrc
Läuft screen bei irgendwem problemlos, d.h. mit Umlauten und Meta-Characters. Ich habe mit Emacs und CenterICQ Probleme.
Unter welchem xterm(-Clone) denn? Beim mir hat's gerade Eterm zerschossen, als CenterICQ innerhalb screen lief.gnome-terminal taugt überhaupt nicht, das versteht nicht alle escape sequenzen. -- JanKorger Was sagt $TERM? Vielleicht geht's mit 'export TERM=vt100' Eventuell hilft es, screen als "screen -a -O" zu starten. screen ist standardmäßig etwas vorsichtig, was "erweiterte" Terminalfähigkeiten angeht, mit -a ("Force all capabilities into each window's termcap") und -O (Oh, nicht Null: "Choose optimal output rather than exact vt100 emulation") kann man es häufig zur Zusammenarbeit überreden.
Im Screen-Paket gibt es die Dateien
- screeninfo.src
- screencap
Die Datei screeninfo.src muß mit tic kompiliert werden: "tic screeninfo.src". Dadurch wird eine Datei ~/.terminfo/s/screen erzeugt. Die Datei screencap muß mit "cat screencap >> /etc/termcap" der terminal capability data base hinzugefügt werden. Danach kann man im screen "export TERM=screen" verwenden und alles ist super. -- JojoLechelt
Bei einem Resize wird die Darstellung zerstört. Was kann man machen?
Antwort: Du kannst Strg+L drücken, dann wird das aktuelle Programm neu "gezeichnet", vielleicht kann screen oder xterm das auch irgendwie automatisieren.
Wie Kann man mit screen über ein Nullmodem-Kabel auf einen anderen Rechner connecten. (screen bringt bei "screen /dev/ttyS0" immer einen dunklen Bildschirm) ?
Man kann screen nicht einfach ein Device als Parameter übergeben. Lösung wäre z.B., mit Minicom eine Verbindung zu dem entfernten Rechner herzustellen und dort screen zu starten. Wenn man auch lokale Screen-"Fenster" haben will, kann man entweder innerhalb von Screen ein Minicom starten - wenn man mehrere entfernte Shells haben will, muss man halt ppp oder slip nehmen und dann ssh (u.U. mit -C fuer Komprimierung) über die Verbindung machen.
- Doch man kann:
o If a tty (character special device) name (e.g. "/dev/ttya") is specified as the first parameter, then the window is directly connected to this device. This window type is similar to "screen cu -l /dev/ttya". Read and write access is required on the device node, an exclusive open is attempted on the node to mark the connection line as busy. An optional parameter is allowed consisting of a comma separated list of flags in the notation used by stty(1):
-- Dooku 2003-07-07 07:41:02 Als ich das aber mal ausprobiert habe, ging das nur mit 9600 Baud und auch nur der erste screen hing daran - man musste also auf dem anderen Rechner noch einen screen aufmachen, um dort mehrere shells zu haben (siehe dazu auch nächste Antwort).
Ja, das kann auch gar nicht anders funktionieren. Zu der Baudrate siehe manpage. (Ziemlich am Anfang des Abschnitts: "WINDOW TYPES") -- DanijelTasov 2004-07-04 19:41:56
Kann ich von einem Screen aus einem anderen Screen einen Befehl Keystroke senden?
Antwort: Das ganze funktioniert mit Strg-A a (das sendet Strg-a) an den 2. Screen. Zu der Unübersichtlichkeit: das stimmt, aber es ist leider ab und zu mal notwendig, in einem Screen einen weiteren Screen zu starten - z.B. auf einem Remoterechner ein schon laufender...
Man kann den zweiten screen auch mit "-e" starten, damit er eine andere Tastenkombination als Strg-A als Hotkey verwendet. Ich benutze für so etwas gerne "screen -e ^yy", damit ist Strg-Y der Hotkey, und Strg-Y y sendet ein Strg-Y. (Würde man das zweite y weglassen, müßte man Strg-Y a tippen, um ein Strg-Y zu bekommen, was ich eher unlogisch finde.)
Wie kann man mittels screen eine multisession auf einem Terminal machen?
Antwort: screen -x <window> erlaubt es einem User, auf ein anderes Terminals (screen), das er selbst gestartet hat, zuzugreifen. Beide Terminals zeigen immer das gleiche, das heißt, der Benutzer sieht auf dem einen Terminal, wenn er auf dem anderen Terminal etwas schreibt und umgekehrt.
Es ist ohne aktivierten Mehrbenutzerbetrieb nicht möglich, mit screen -x an einer Sitzung eines anderen Benutzers teilzunehmen.
Wie kann man mittels screen mehrere Benutzer auf eine Sitzung zugreifen lassen?
Antwort: Ein Benutzer <nutzername1> startet "screen" und gelangt mit Strg-A in den Kommandomodus und mit ":" in die Befehlszeile. Er aktiviert den Mehrbenutzerbetrieb mit "multiuser on". Danach kann er mit Strg-A : acladd <nutzername2> beliebig viele Benutzer berechtigen, den screen zu sehen.
Der zweite Nutzer kann an der Sitzung mit "screen -x <nutzername1>/" teilnehmen.
Ich suche eine Seite, die sich mit "digraph" befasst (Strg-A Strg-V) Speziell geht es mir um das EUR Symbol
Antwort: Strg-A Strg-V Eu (/DiGraph)
Ist es möglich Screen automatisch als Daemon zu starten, und in dem dann 2 Session mit jeweils einen Programm zu starten?
Antwort: "screen -dmS screenname befehl" erzeugt eine Screensitzung mit einem beliebigen Befehl im Hintergrund. Nun kann man jederzeit mit "screen -r screenname" auf die erstellte Sitzung zugreifen. "screen -ls" zeigt dabei eine Liste von bereits erstellten Sitzungen.
Wie kann man Screen automatisch beim Login starten?
z.B. mit diesem Eintrag in der .bashrc
if [[ $TERM != 'screen' && $TERM != 'dumb' ]] ; then if [[ `screen -list | grep -v "No" | awk '$2 { print }' | wc -l` == 0 ]] ; then screen else screen -rx fi fi
Beispiel für Remote-Batchbetrieb
Es soll auf einem Server ein lange laufendes Programm gestartet werden. Es soll aber nicht die ganze Zeit eine SSH-Verbindung offen bleiben.
# In einem Boot-Script: screen -dmS long-runner
Damit ist die Screen-Session gestartet, jedoch noch keinem Terminal zugeordnet.
Öffnen einer SSH-Sitzung. Dort wird auf screen aufgeschaltet:
screen -S long-runner -x
Jetzt ist man in der screen-Sitzung und kann den Dauerläufer starten. Mit C-ad gibt man die Session wieder ab und kann die SSH-Verbindung trennen. Das kann man beliebig wiederholen, um die Ausgaben in screen zu beobachten.
Will man nur ein Kommando in der screen-Sitzung absetzen und ist an der Ausgabe nicht interessiert, so geht folgendes Kommando:
screen -S long-runner -X exec /usr/local/bin/my_batch
Dies kann z.B. mittels rexec, ssh <server> CMD oder ähnlichem abgesetzt werden. Eine weitere Variante ist, dies mittels PHP/Perl/Ruby... von Webseiten aus zu aktivieren.
Weblinks
http://www.tutorials.de/forum/linux-tutorials/151906-einfuehrung-screen.html