User Tools

Site Tools


screen

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
screen [2021/03/16 21:39] – [Multiple sessions] hc9screen [2024/09/16 07:51] (current) – er” hc9
Line 1: Line 1:
 +====== Screen ======
 +
 +===== Introduction =====
 +
 +[[http://savannah.gnu.org/projects/screen/|Screen]] is a “terminal multiplexer”, i.e., it will let you have multiple virtual terminals in a single window. You will also be able to 1) “detach” a screen session, and then detach it in a later moment; 2) share screen sessions.
 +
 +In this tutorial ''$'' indicates a terminal prompt (just for visual convenience).
 +
 +A Screen command is usually of the form **CTRL-a KEY**, i.e., you'll have to press the **CTRL** key along with “a”, followed by a generic KEY. (Screen's default escape key is **CTRL-a**.)
 +
 +You'll need to be a [[http://sdf.org/?join#meta|MetaARPA]] member in order to use Screen on SDF
 +
 +If you want a “screencast” tutorial, type:
 +
 +''$ ttyplay /ftp/pub/users/jecxjo/howto/screen''
 +
 +on a terminal connected to SDF.
 +
 +Alternatively, you can watch the screencast online at [[http://playterm.org/r/brief-screen-tutorial-1307563176|PlayTerm.]]
 +
 +===== Starting Screen, detaching and reattaching =====
 +
 +You can run screen by typing:
 +
 +''$ screen''
 +
 +When you run it, a window with some copyright and some other info will show up, with “[Press Space or Return to end.]” at the bottom. OK, as it says, you can now press “Space” or “Enter”. You will then see your shell prompt and nothing else. That's fine: you can now run your programs as usual, the difference is that they will run under a Screen session. You can detach it by typing **CTRL-a d**. Screen will keep your session running. Now if you logout, then log back in, and type:
 +
 +''$ screen -r''
 +
 +you'll see your terminal as you left it when you detached Screen!
 +
 +If you lost connection, or simply forgot to detach Screen, and want to resume your session by typing:
 +
 +''$ screen -d -r''
 +
 +The “-d” flag will detach Screen, while “-r” will reattach. There are various types of “detach” and  flags. For instance, if you type the previous command and there was no screen session to be resumed, you'll get a “There is no screen to be detached.” message. In this case you'll probably need:
 +
 +''$ screen -d -R''
 +
 +which will first create a new session (or reattach an existing one).
 +
 +===== Multiple windows =====
 +
 +You can create various windows under your Screen session, each one running their own program. When you are in a Screen session, typing:
 +
 +''$ screen''
 +
 +will create a new window, leaving the previous window untouched, though not visible. Instead of typing “screen”, you can use the shortcut **CTRL-a c**.
 +
 +You can create as many windows as you want. You can swith between windows with **CTRL-a n** (next window) and **CTRL-a p** (previous window). It's also possible to select windows by number. Typing **CTRL-a 1** will open window number 1, **CTRL-a 2**, to window 2, and so on.
 +
 +How do you know what's a window number? Well, you can type **CTRL-a “** (yeah, that's a double quote). In that case a menu with a windows list will open. You can select a number and press enter to go to that screen. An easier way is to have a “hard status line” that shows you each window number. For doing this in a permanent manner, you'll have to create a “.screenrc” (Screen's customization file) in your $HOME directory and write in it the following lines:
 +
 +<file config .screenrc>
 +
 +hardstatus alwayslastline
 +hardstatus string "%{WK}%-LW %{Y.}%n%f* %t%{-}%+LW"
 +
 +</file>
 +
 +(We will see what that crazyness means later.)
 +
 +For your .screenrc file to be read by Screen, you'll have to start a new session. BTW, a Screen session ends when the last window is closed.
 +
 +===== Multiple sessions =====
 +
 +It's possible to have various Screen sessions running, each one with their own set of windows open. If you started Screen by just typing “screen”, a new session is created. If you detach and type “screen” again, a new session will start. If you now type:
 +
 +''$ screen -ls''
 +
 +it will give you a list of Screen sessions like this:
 +
 +<code>
 +        3340.pts-6.HOST        (Detached)
 +        4522.pts-8.HOST        (Attached)
 +2 Sockets in /tmp/screens/S-YOU
 +</code>
 +
 +where HOST is the hostname and YOU is your username.
 +
 +You can reattach a screen session by name. Say for instance that you want to resume the “4522.pts-8.HOST” session. In this case you'll have to type:
 +
 +''$ screen -r 4522.pts-8.HOST''
 +
 +Obviously “4522.pts-8.HOST” is not a very userfriendly session name. You can give a meaningful name by starting screen as:
 +
 +''$ screen -S mysession''
 +
 +where “mysession” is the name you want to give to your session (e.g., “work”).
 +
 +===== Splitting windows =====
 +
 +It could be useful to split a window so that you can have two programs running on the viewport. In this case, type **CTRL-a S** and you'll see that the window will be split in two regions, with the one at the bottom blank. You can swith to it with **CTRL-a TAB** (TAB is the tab key) and then select a window by typing its number, or “p” (previous) or “n” (next), e.g., **CTRL-a 2**. You can always swith through regions with **CTRL-a TAB**.
 +
 +It's possible to split the window in more then two regions, each time by typing **CTRL-a S**
 +
 +If you want to split a window vertically, you'll have to either use a //patch(([[http://fungi.yuggoth.org/vsp4s/|Vertical Split for GNU Screen]] – provides a vertical split feature for current releases of GNU Screen))// or use a recent version of Screen.
 +
 +===== Sharing screen sessions =====
 +
 +The scenario is...
 +
 +HOSTUSER and SOMEUSER are both MetaARPA members logged into sverige.
 +
 +HOSTUSER wants to give SOMEUSER read only access to screen session of HOSTUSER.
 +
 +HOSTUSER starts a screen session as normal.
 +
 +Only three commands are needed for basic read only access to the current active window.
 +
 +HOSTUSER types the following commands beginning with **CTRL-a** : each time ( //control and 'a' followed by a colon //)
 +
 +**CTRL-a:multiuser on**
 +
 +**CTRL-a:password none**
 +
 +**CTRL-a:aclchg SOMEUSER -w “#”**
 +
 +SOMEUSER should exit screen first, then in the shell, type:
 +
 +''$ screen -r HOSTUSER/''
 +
 +SOMEUSER now has read only access to the active window in HOSTUSER's screen session at the time of attaching.
 +
 +HOSTUSER can verify SOMEUSER is attached by typing:
 +
 +**CTRL-a***
 +
 +HOSTUSER can disconnect SOMEUSER by typing:
 +
 +**CTRL-a:acldel HOSTUSER**
 +
 +HOSTUSER can verify SOMEUSER is no longer attached by typing:
 +
 +**CTRL-a***
 +
 +HOSTUSER can allow SOMEUSER access to additional commands.
 +
 +The following commands allow SOMEUSER to cycle backwards and forward through the windows and detach.
 +
 +HOSTUSER types:
 +
 +**CTRL-a:aclchg SOMEUSER +x next**
 +
 +**CTRL-a:aclchg SOMEUSER +x prev**
 +
 +**CTRL-a:aclchg SOMEUSER +x detach**
 +
 +//**Some notes:**//
 +
 +  * Screen version that was used “Screen version 4.00.03 (FAU) 23-Oct-06”
 +
 +  * At the time of writing ( Tue Apr 17 23:01:50 IST 2012 ) all attempts at achieving the above read only functionality by editing .screenrc failed, usually resulting in SOMEUSER having FULL access to HOSTUSER's screen and shell account.
 +
 +  * HOSTUSER might notice that screen resizes to fit the smaller of the two terminals.
 +
 +  * After SOMEUSER is detachs HOSTUSER might try **CTRL-aF** to resize the screen windows to fit the terminal.
 +
 +  * For convenience and to reduce typing in screen HOSTUSER might want to have “multiuser on” and “password none” in .screenrc. HOSTUSER's screen is still private until a user is permitted to attach with aclchg.
 +
 +  * HOSTUSER will hear/see lots of bells if SOMEUSER tries to type into the screen session.
 +
 +  * HOSTUSER can check what window is being view by SOMEUSER by looking at the output of **CTRL-a***
 +
 +  * HOSTUSER might notice SOMEUSER appears to have rwx access in the output of **CTRL-a*** ...this is a bug or an undocumented feature.
 +
 +  * SOMEUSER can remain attached even if HOSTUSER detachs.
 +
 +===== .screenrc =====
 +
 +As we previously saw, it is possible to customize Screen by writing settings in a file named “.screenrc” in your $HOME directory. We will now some useful Screen settings.
 +
 +=== Avoiding the startup message ===
 +
 +A full screen message with copyright and other stuff is usually displayed at startup. This can get annoying. In order to avoid it, you can put in your .screenrc the following:
 +
 +<file config .screenrc>
 +
 +startup_message off
 +
 +</file>
 +
 +=== Keybindings ===
 +
 +It's possible to bind keys so that when you type **CTRL-a KEY** Screen will open a new window launching some program. For instance, if you write in your .screenrc file
 +
 +<file config .screenrc>
 +
 +bind m screen -t mail 1 mutt
 +
 +</file>
 +
 +each time you'll type **CTRL-a m** a new window (named “mail”)with mutt will be created. Be careful: when you bind a key, you'll overwrite Screen's defaults (e.g., we just lost the “lastmsg” key).
 +
 +===== Cheat sheet =====
 +
 +TODO
 +
 +===== Resources =====
 +
 +  * http://aperiodic.net/screen/start
 +  * http://www.bangmoney.org/presentations/screen.html
 +  * SDF has some [[http://sdf.org/?tutorials/dotfiles|annotated dotfiles]].
 +
 +**Notes**
 +
 +----
 +
 +$Id: screen.html,v 1.8 2012/05/08 14:45:50 dickey Exp $ [[http://sdf.org/?tutorials/screen|Screen]] - traditional link (using [[wp>Revision_Control_System|RCS]])