Screen

From Redbrick Wiki

Basics

Screen usually does not exist; this is the committee's was a former committee's general position on screen due to the disastrous and/or hilarious situations which often result from new members' attempts to get it working. However, for the purpose of this tutorial, screen does exist, and this is how you use it. (Blame coconut for this defiance.)

Omg, what's screen?

Screen is most commonly known as "that thing that lets you stay logged in to chat when you log out of RedBrick". It's a terminal multiplexer, which allows you to log into multiple terminal sessions from one terminal window and keeps them open when you go away to bed or whatever it is you do with your time.

Opening

Type "screen" at the prompt like this:


 


This will open a new screen session. First you'll see the screen startup message, which gives a little info on the program.


 


Just hit space/return as it says and you'll be running screen. You won't notice anything immediately different once running screen, instead, you'll be back at the same old terminal. Now, however, you have access to a large variety of commands and features that you didn't before.

Screen commands

Ctrl-a commands

Nearly all of screen's commands are used via the ctrl-a key combination. First, you press the ctrl and a keys together, then release. Next, press the key you want to run a command. These commands can be a little awkward and difficult to remember at first, but you'll soon get the hang of it. In this tutorial, the commands will be shown as ctrl-a and then a letter, with the following letter being associated with a command.

Creating a new window

When you start screen, it presents you with the normal single window terminal you're used to. You can, however, create many more and run them all within the one screen session. The following command will create another window for you:

ctrl-a c

Just hit ctrl and a together, then release them and hit c. This keybinding will open a new window (window 2) inside screen. Now you'll have two windows to use, so you'll have to learn how to use the ctrl-a commands to switch between them.

Switching windows

Once you have more than one window open, you can switch between them using some of the following commands:

ctrl-a n

This command will switch you over to the next window.

ctrl-a p

This one will bring you back to the previous window.

ctrl-a a

This will switch between the last two windows that you've been using.

ctrl-a window_number

Using this command, you can specify exactly which window you want to jump to by hitting ctrl and a, then the number on the keyboard of your desired window. This is pretty useful for when you have a lot of windows open in screen.

Naming your windows

You can give each of your windows its own name too for convenience by using this command:

ctrl-a A

This one might seem confusing first as the A is a capital letter in this case, but all you need to do is hit ctrl and a together and release as before, then hold shift and press a to get the capital. After you run it, you'll see a white bar appear at the bottom of your window, where you can change the name of your screen to whatever you like. In this case, the window has just been renamed to "chat".


 


After you've named a few windows, you can try this command:

ctrl-a "

Yup, even quotation marks can be used in screen commands. So as before you do ctrl-a, then hold shift and hit the 2 key to get the " :) This will bring up a convenient list of all your windows with their names.


 


From this window you can view and go to any of your windows. The flags on the right indicate whether your window is logged in or not with $ symbol.

Detaching and reattaching screen

One of the most popular features of screen is that it can keep you logged in even when you're offline. This means you can leave programs running or even stay on IRC even when you're not online. When you "minimise" screen or make it invisible, it is called detaching it.

To do this, you just detach from screen instead of exiting it. To detach from screen without exiting, use the following command:

ctrl-a d

You'll then be returned to the prompt with a message telling you screen has been detached, like so:


 


Later, you'll come back online and want to reattach to your screen session. When you "maximise" screen or bring it back onto your terminal, this is known as attaching. To reattach a detached screen, use this command at the prompt:

screen -dr

The -d will detach any attached screens and -r will reattach your screen.

If you have more than one screen session available, you will need to specify the screen id you wish to open. You'll be given a list of the currently available screens, so then you type:

screen -r

followed by the id listed above of the screen you want to reattach to.

Start and stop signals

Quite often it happens someone may end up using the stop signal command in screen by mistake. This command is:

ctrl-a s

and you should probably avoid using it! But as the s key is beside the a key, people will occasionally run this command by accident without knowing it. As this is a stop signal, it has the unfortunate side effect of freezing up your window :( Worry not however, for to fix it, all you need to do is use the start signal again to bring it back from the dead:

ctrl-a q

This should have you back in action very shortly. However, if your screen is frozen and you can't figure out why, try asking a member of Helpdesk and they should know the answer :)

Killing screen while attached

Often enough new members (and often, experienced people) will make mistakes with screen that they can't fix. To kill screen altogether and start over, use:

ctrl-a \

Or, if you just want to kill a single window in screen, use:

ctrl-a k

or even just type "exit" at the prompt.

Killing screen while detached

Warning: using the kill command to do anything can be very dangerous if you don't know what you're doing. If you're unsure, reattach the screen you want to kill and follow the instructions above.

If you have more than one screen session and you want to kill one of them, type "screen -dr" to get a list of the available screens (from the terminal which appears when you first log in to RedBrick). Note the number (also known as a process id, or pid) at the beginning of each screen name. This is the process number. Ensure you know which screen session is which.

To terminate a session, use this command (pid is the number of the session you want to kill)

kill pid

This will send the signal SIGTERM to the process, requesting its termination.

If that fails and you want lil_cain to start complaining

kill -9 pid

This will send the signal SIGKILL to the process, terminating it immediately and with lots of blood.

Then, to then get rid of the dead screen session, type

screen -wipe

Screen Configuration

So after you've set up screen and have gotten used to it, you will probably want to configure it a little bit and the way to do this is by creating a ~/.screenrc

To do this just

nano ~/.screenrc

Here's an example of a .screenrc that you may want to use:

hardstatus alwayslastline
hardstatus string '%{= kg}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%? %?%= %{g}][%{Y}%l%{g}]%{=b C}[ %d %M %c ]%{W}'
deflogin off
startup_message off
screen -t irc 1 irssi
screen -t Email/slrn 2 mutt -Z
screen -t heys -L -l  3

Basically this only really does two things, sets a hardstatus (basically a line that contains some information) and makes it display only on the bottom line and also creates a few new windows.

The new windows created are given names and optionally a number or command (or both).

screen -t irc q irssi

This will create screen window 1, give it the title "irc" and then run irssi when you start screen.

deflogin off

This sets windows logged out by default, which means that you won't have to "mesg n" windows to not receive heys

startup_message off

This turns the startup message thats displayed when you start a new screen session off.

screen -t heys -L -l  3

Will create a logged in window specifically for heys. Handy.

All this makes it very simple to restart all your processes if Redbrick ever crashes.

With the above configuration file it will look something like this:

 

Reattaching Screen Automatically

So, you've made your screen, configured it, and you happily type screen -dr every time you login to RedBrick. But wouldn't it be nice if whenever you login your screen would reattach itself??? It can be done :D

Simply use your favorite text editor to edit your ~/.zshrc (or ~/.[name_of_shell]rc) and paste the following code into it.

if [ -z "$STY" -a $TERM != "screen" ]
then
    exec screen -dr
fi

That should do the job. However make sure to keep the spaces between the if statement, the brackets and the inside of the if statement (or it won't work).

In particular

$TERM != "screen"

is very important for that code segment to work, otherwise when connecting to another server (Carbon for instance), your shell will try to attach a screen session, fail and disconnect leaving you on the server you tried to connect from (Really quite annoying).

  • Please note, if this in fact, does not work, you can edit it out by using winSCP and editing the file using it.

Useful links

If you'd like to learn more about the program, a long list of screen commands can be found here: http://www.linuxdevcenter.com/linux/cmd/cmd.csp?path=s/screen

Help edited a screenrc: http://www.debian-administration.org/articles/560

A starting guide to screen: http://magazine.redhat.com/2007/09/27/a-guide-to-gnu-screen/

The Gentoo wiki article on screen (quite in depth) : http://www.gentoo-wiki.info/Screen