The Linux screen command is a very useful tool for many reasons. For one you don’t need to worry about losing your session. Sometimes long running jobs with little or no output can lead to your remote session terminating, not usually a helpful thing. Other benefits of the screen command are session logging (thing documentation) multitasking and session sharing.
The screen command is pretty darn easy to use but it does have some nice features that you may have to dig through the documentation to find. I’ll give some highlights and add to this as I find new uses or useful features. So let’s get started.
You can just issue the screen command ‘screen’ and you will immediately be in a screen session, not very useful. Of course now that you are in a session how do you get out?! To exit but leave the screen session open/active type:
To exit and terminate the screen session type:
Terminating the screen session will prompt you with the following, potentially misleading question:
Really quit and kill all your windows [y/n]
Choosing ‘y’ only kills the current session all other screen sessions that may be running are uneffected.
Once you leave a screen session you need to know how to re-enter it. You need the screen session ID to do this, you can set one (covered shortly). To list the active screen sessions issue this command:
# screen -ls
There are screens on:
The last session listed was assigned a label (see below) To reattach to a session you use the label or ID number like this:
screen -r 13986
screen -r mylabel
Now that you have the basics I am going to speed things up and give a bunch of examples with explanations where necessary. You can always refer to the screen man page.
From within a screen session using the command “Ctrl-A n“ will move you to the next screen session. “Ctrl-A p“ will move you to the previous screen session. “Ctrl-A c“ will create a new screen session.
The screen option -S allows you to assign a Session Name/Label which makes multiple screen sessions easier to manage. The screen option -L enables logging for the session.
screen -S "mylabel" -L
Cleaning up your Screen Log
The log screen produces contains a lot of special characters from typing mistakes, spaces, etc. It can make the log difficult to read. This command cleans out the majority of the cruft and make the file easier to read:
perl -ne 's/\x1b[[()=][;?0-9]*[0-9A-Za-z]?//g;s/\r//g;s/\007//g;print' < screen.0 > screen.0.readable
switch between these two tasks?
- Switching between windows is the specialty of screen utility. So to switch between pine and wget window (or session) press CTRL+a followed by n key (first hit CTRL+a, releases both keys and press n).
- To list all windows use the command CTRL+a followed by ” key (first hit CTRL+a, releases both keys and press ” ).
- To switch to window by number use the command CTRL+a followed by ‘ (first hit CTRL+a, releases both keys and press ‘ it will prompt for window number).
C-a d screen will detach from the screen session.
C-a H screen will start recording everything to a file called
screenlog.X (where X is a number starting at 0).
Using screen for shared command-line interaction:
- Set the screen binary (/usr/bin/screen) setuid root. By default, screen is installed with the setuid bit turned off, as this is a potential security hole.
- The first-user starts screen in a local xterm, for example via screen -S SessionName. The -S switch gives the session a name, which makes multiple screen sessions easier to manage.
- The second-user uses SSH to connect to the target system.
- The first-user then has to allow multiuser access in the screen session via the command Ctrl-a :multiuser on (all screen commands start with the screen escape sequence, Ctrl-a).
- Next the first-user grants permission to the second-user to access the screen session with Ctrl-a :acladd second-user where second-user is their login ID.
- The second-user can now connect to the first-user’s screen session. The syntax to connect to another user’s screen session is screen -x sessionID/name.
Common screen commands
||Create new window
||Kill the current window / session
||List all windows
||Go to a window numbered 0 9, use Ctrl+a w to see number
||Toggle / switch between the current and previous window
||Split terminal horizontally into regions and press Ctrl+a c to create new window there
||Fit screen size to new terminal size. You can also hit Ctrl+a F for the the same task
||Remove / delete region. You can also hit Ctrl+a X for the same taks
||Move to next region
|Ctrl+a D (Shift-d)
||Power detach and logout
||Detach but keep shell window open
||Display help screen i.e. display a list of commands