{"id":840,"date":"2018-01-01T22:06:03","date_gmt":"2018-01-01T22:06:03","guid":{"rendered":"http:\/\/blog.datentraeger.li\/?p=840"},"modified":"2018-01-02T03:18:42","modified_gmt":"2018-01-02T03:18:42","slug":"gnu-screen","status":"publish","type":"post","link":"https:\/\/blog.datentraeger.li\/?p=840","title":{"rendered":"GNU Screen"},"content":{"rendered":"<p>Ich hab schon l\u00e4nger gedacht &#8220;das h\u00e4tte ich jetzt bequemer machen k\u00f6nnen mit screen&#8221;, war aber immer zu faul, mir das ganze genauer anzuschauen. Grosser Fehler&#8230;<\/p>\n<p>Eigentlich braucht man gar nicht viel von screen zu wissen, um einigermassen schlau damit zu arbeiten:<\/p>\n<h3>eine neue Session starten:<\/h3>\n<pre class=\"lang:default decode:true \">screen [-S SESSIONNAME]<\/pre>\n<p>(der Session-Name ist optional, ich w\u00fcrde es aber empfehlen, vor allem, wenn mehrere Sessions gestartet werden)<\/p>\n<h3>vorhandene Sessions auflisten<\/h3>\n<p>(auch mit -list m\u00f6glich)<\/p>\n<pre class=\"lang:default decode:true \">screen -ls<\/pre>\n<h3>auf vorhandene Session verbinden<\/h3>\n<pre class=\"lang:default decode:true \">screen -r [-S SESSIONNAME]<\/pre>\n<h3>andere Shortcuts<\/h3>\n<p><strong>C-a c<\/strong> neues Sessionfenster<\/p>\n<p><strong>C-a n<\/strong> Fensterwechsel (auch mit <strong>C-a space<\/strong> oder <strong>C-a C-n<\/strong> m\u00f6glich)<\/p>\n<p><strong>C-a d<\/strong> screen &#8220;aush\u00e4ngen&#8221; (reattach mit screen -r)<\/p>\n<p><strong>C-a A<\/strong> Fenstertitel umbenennen<kbd><\/kbd><kbd><\/kbd><\/p>\n<p><strong>C-a &#8220;<\/strong> vorhandene Fenster auflisten<\/p>\n<p><strong>C-a &#8216;<\/strong> Fensterwechsel durch Eingabe des Titels \/ Fensternummer<\/p>\n<p><strong>C-a w<\/strong> Fensterliste anzeigen (z.B. wenn man keine Statusbar hat)<\/p>\n<p><strong>C-a ?<\/strong> Hilfe anzeigen<\/p>\n<h3>Statusbar<\/h3>\n<p>Und mit <strong>echo $TERM<\/strong> findet man raus, ob man sich gerade in einer screen-Session befindet oder nicht. Falls schon, sieht man es in der Ausgabe mit &#8220;screen.xterm-&#8230;&#8221;.<\/p>\n<p>Jedoch wesentlich bequemer finde ich, wenn man eine .screenrc anlegt und dort eine <a href=\"http:\/\/aperiodic.net\/screen\/appearance\" target=\"_blank\" rel=\"noopener\">Statusbar<\/a> definiert. Ich hab jetzt einfach mal das &#8220;erstbeste&#8221; via copy-paste hier eingef\u00fcgt, muss mir meine Statusbar erst noch zurechtbasteln<\/p>\n<pre class=\"lang:default decode:true \">autodetach on\r\nstartup_message off\r\nhardstatus alwayslastline\r\nshelltitle 'bash'\r\n\r\nhardstatus alwayslastline '%{= G}[ %{G}%H %{g}][%= %{= w}%?%-Lw%?%{= R}%n*%f %t%?%{= R}(%u)%?%{= w}%+Lw%?%= %{= g}][ %{y}Load: %l %{g}][%{B}%Y-%m-%d %{W}%c:%s %{g}]'<\/pre>\n<p>Dann kriegt man in screen jeweils eine Statusbar und sieht auf Anhieb, wo man dran ist:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-864\" src=\"http:\/\/blog.datentraeger.li\/wp-content\/uploads\/2018\/01\/screen_statusbar.png\" alt=\"\" width=\"950\" height=\"29\" srcset=\"https:\/\/blog.datentraeger.li\/wp-content\/uploads\/2018\/01\/screen_statusbar.png 950w, https:\/\/blog.datentraeger.li\/wp-content\/uploads\/2018\/01\/screen_statusbar-300x9.png 300w, https:\/\/blog.datentraeger.li\/wp-content\/uploads\/2018\/01\/screen_statusbar-768x23.png 768w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/p>\n<h3>von einem zweiten Rechner in Session einklinken<\/h3>\n<p>Wenn man -r durch -x ersetzt, kann man sich auch von einem anderen Rechner in die Session einklinken. Der Output ist auf beiden Rechnern identischt, verdammt witzig&#8230;<\/p>\n<pre class=\"lang:default decode:true\">screen -x [SESSIONNAME]<\/pre>\n<h3>nicht-default config verwenden<\/h3>\n<p>Die .screenrc ist ja die Defaultconfig. Ich verbinde mich aber immer wieder zu Kunden. Hier w\u00e4re doch sch\u00f6n, eine screenrc zu haben, wo alles bereits hinterlegt ist. Mit -c kann man eine spezielle Config mitgeben, zb.<\/p>\n<pre class=\"lang:default decode:true \">screen -S customers -c screenrc_customers<\/pre>\n<p>Da steht dann einfach sowas drin:<\/p>\n<pre class=\"lang:default decode:true \">...\r\nscreen -t customer1 0 ssh user@customer1.example.org\r\nscreen -t customer2 1 ssh user@customer2.example.org\r\nscreen -t customer3 2 ssh user@customer3.example.org\r\n...<\/pre>\n<p>recht angenehm &#8211; ein command, mit allen connected&#8230;.<\/p>\n<p>&nbsp;<\/p>\n<p>So wie man liest, scheint tmux in vielen Sachen bessere Funktionalit\u00e4t mitzubringen, ich werde es mir bestimmt mal bei Gelegenheit auch noch anschauen. Derzeit gew\u00f6hne ich mir aber erst mal ein bisschen die vermehrte Verwendung von screen an (gibt&#8217;s ja erst seit 1987&#8230;). Wenn mich dann gewisse Sachen nerven, werde ich &#8220;von selbst&#8221; mal tmux anschauen&#8230; \ud83d\ude09<\/p>\n<p>Jedenfalls mal wieder was in der Art &#8220;warum hast du das nicht schon vor Jahren so gemacht ?!&#8221;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"Ich hab schon l\u00e4nger gedacht &#8220;das h\u00e4tte ich jetzt bequemer machen k\u00f6nnen mit screen&#8221;, war aber immer zu faul, mir das ganze genauer anzuschauen. Grosser Fehler&#8230; Eigentlich braucht man gar nicht viel von screen zu wissen, um einigermassen schlau damit zu arbeiten: eine neue Session starten: screen [-S SESSIONNAME] (der&hellip;\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36,4],"tags":[],"class_list":["post-840","post","type-post","status-publish","format-standard","hentry","category-cli","category-debiangnu-linux"],"_links":{"self":[{"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/posts\/840","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=840"}],"version-history":[{"count":20,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/posts\/840\/revisions"}],"predecessor-version":[{"id":853,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=\/wp\/v2\/posts\/840\/revisions\/853"}],"wp:attachment":[{"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.datentraeger.li\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}