Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
tutorials:screen [2012/05/01 15:18] – Everything OK!! ivantutorials:screen [2012/05/08 15:08] (current) – $ID memnon
Line 1: Line 1:
 +===== GNU Screen =====
  
 +  * [[#Introduction]]
 +  * [[#Starting Screen, detaching and reattaching]]
 +  * [[#Multiple windows]]
 +  * [[#Multiple sessions]]
 +  * [[#Splitting windows]]
 +  * [[#Sharing screen sessions]]
 +  * [[#.screenrc]]
 +  * [[#Cheat sheet]]
 +  * [[#Resources]]
 +
 +==== 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</command></code>
 +
 +The //-d// flag will detach Screen, while //-r// will reattach. There
 +are various types of //detach// and //reattach// 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 rettach 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:
 +
 +  hardstatus alwayslastline
 +  hardstatus string "%{WK}%-LW %{Y.}%n%f* %t%{-}%+LW"
 +
 +(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:
 +
 +
 +        3340.pts-6.HOST        (Detached)
 +        4522.pts-8.HOST        (Attached)
 +  2 Sockets in /tmp/screens/S-YOU
 +
 +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[1] 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 detached ''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:
 +
 +  startup_message off
 +
 +=== Keybindings ===
 +
 +It's possible to bind keys so that when you type //CTRL-a KEY// 
 +Screen willl open a new window launching some
 +program. For instance, if you write in your .screenrc file
 +
 +  bind m screen -t mail 1 mutt
 +
 +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 ====
 +
 +  - http://fungi.yuggoth.org/vsp4s/
 +
 +$Id: screen.html,v 1.8 2012/05/08 14:45:50 dickey Exp $