jctosta / screen_cheatsheet.markdown
All screen commands are prefixed by an escape key, by default Ctrl-a (that’s Control-a, sometimes written ^a). To send a literal Ctrl-a to the programs in screen, use Ctrl-a a. This is useful when when working with screen within screen. For example Ctrl-a a n will move screen to a new window on the screen within screen.
Description | Command |
---|---|
detach | Ctrl-a d |
detach and logout (quick exit) | Ctrl-a D D |
exit screen | Ctrl-a : quit or exit all of the programs in screen. |
force-exit screen | Ctrl-a C-\ (not recommended) |
Description | Command |
---|---|
Create new window | Ctrl-a c |
Change to last-visited active window | Ctrl-a Ctrl-a (commonly used to flip-flop between two windows) |
Change to window by number | Ctrl-a (only for windows 0 to 9) |
Change to window by number or name | Ctrl-a ‘ |
Change to next window in list | Ctrl-a n or Ctrl-a |
Change to previous window in list | Ctrl-a p or Ctrl-a |
See window list | Ctrl-a » (allows you to select a window to change to) |
Show window bar | Ctrl-a w (if you don’t have window bar) |
Kill current window | Ctrl-a k (not recommended) |
Kill all windows | Ctrl-a \ (not recommended) |
Rename current window | Ctrl-a A |
Description | Command |
---|---|
Split display horizontally | Ctrl-a S |
Split display vertically | `Ctrl-a |
Jump to next display region | Ctrl-a tab |
Remove current region | Ctrl-a X |
Remove all regions but the current one | Ctrl-a Q |
Description | Command |
---|---|
Redraw window | Ctrl-a C-l |
Enter copy mode | Ctrl-a [ or Ctrl-a (also used for viewing scrollback buffer) |
Paste | Ctrl-a ] |
Monitor window for activity | Ctrl-a M |
Monitor window for silence | Ctrl-a _ |
Enter digraph (for producing non-ASCII characters) | Ctrl-a Ctrl-v |
Lock (password protect) display | Ctrl-a x |
Enter screen command | Ctrl-a : |
Enable logging in the screen session | Ctrl-a H |
Description | Command |
---|---|
Enter scrolling mode | Ctrl-a esc |
Scroll Up | Ctrl-u |
Scroll Down | Ctrl-d |
Exit scrolling mode | esc esc |
This section is a contribution from: @mickpbarry
is «Split display vertically» correct?
Need to escape the | (the pipe symbol) in the line:
Split display vertically
By adding a slash in front of the | character:
Ctrl-a \|
to make it look correct as code markup:
Ctrl-a |
Forked it to show proper command
Can you add how to kill a session?
screen -X -S [session # you want to kill] kill
Can you add how to kill a session?
screen -X -S [session # you want to kill] kill
Ctrl-a esc — Enter scrolling mode
Ctrl-u — scroll up
Ctrl-d — scroll down
esc esc — Exit scrolling mode
Can you add the following command to access a screen that is already attached?
screen -r -d [session name]
Can you add the following command to access a screen that is already attached?
screen -r -d [session name]
Scrolling:
Ctrl-a esc — Enter scrolling mode
Ctrl-u — scroll up
Ctrl-d — scroll down
esc esc — Exit scrolling mode
Ty man, cheatsheet updated.
how to broadcast command to all splits
screenName=$(mktemp -u screen-session-XXXXXXXX) screen -S "$screenName" -d -m # create a new screen session. dont attach screenCommand="echo \"hello world\"" screen -S "$screenName" -X stuff "$screenCommand^M" # ^M = enter sleep 0.1 screen -S "$screenName" -X stuff "read^M" # start process sleep 0.1 screen -S "$screenName" -X stuff "^C" # ^C = Ctrl+C = kill process screen -r "$screenName" # attach # detach with Ctrl-a d screen -S "$screenName" -X quit # kill the detached screen session
screenName=$(mktemp -u screen-session-XXXXXXXX) screen -S "$screenName" -d -m # create a new screen session. dont attach captureCommand="cd $(mktemp -d); npm init -y; npm install cowsay" # example screenLock=$(mktemp /tmp/screen-lock-XXXXXXXX) screenCommand="$captureCommand; rm $screenLock;" echo "start captureCommand" screen -S "$screenName" -X stuff "$screenCommand^M" # ^M = enter hardcopyFile=$(mktemp /tmp/hardcopy-XXXXXXXX) enableWatcher=true #enableWatcher=false if $enableWatcher; then echo "start watcher" ( # watcher: show live output while waiting while true #for watcherStep in $(seq 0 100) # debug do sleep 2 #echo watcher step "$watcherStep" screen -S "$screenName" -X hardcopy -h "$hardcopyFile" # take screenshot. -h = include history #cat "$hardcopyFile" tail "$hardcopyFile" done ) & watcherPid=$! echo "watcherPid = $watcherPid" fi echo "wait for captureCommand . " while true #for waiterStep in $(seq 0 100) # debug do sleep 1 #echo waiter step "$waiterStep" [ -e "$screenLock" ] || break done echo "done captureCommand" if $enableWatcher; then echo "stop watcher" kill $watcherPid fi screen -S "$screenName" -X hardcopy -h "$hardcopyFile" # take screenshot. -h = include history echo "done hardcopy $hardcopyFile"
How Do I Close a Screen Session?
Sometimes we execute multiple screen sessions in GNU Screen which necessitates cleanup. In this short guide, we will walk you through the options of closing a screen session but firstly, let’s understand some essential information about the screen.
What is a Screen?
A terminal multiplexer is referred to as screen. Multiple interactive shells of the physical terminal are multiplexed by the screen. It permits the user to perform several tasks running in each terminal. All of these independent screen sessions execute their programs. If you accidentally closed or get disconnected from any screen session, that process will run within the screen session.
For example, when upgrading an Ubuntu server via SSH, if your SSH session is terminated for any reason, the screen command will continue the upgrade process undoubtedly.
Here, we have provided you a list of important keyboard shortcuts for managing various nested sessions.
Function | Keyboard Shortcut |
Showing keybindings | Ctrl+a ? |
Ending session and terminating Screen | Ctrl+a \ |
Closing the current session | Ctrl+a X |
Closing all sessions except the current one | Ctrl+a Q |
Splitting current region vertically into two regions | Ctrl+a l |
Splitting current region horizontally into two regions | Ctrl+a S |
Switching to session number 0 | Ctrl+a ” |
Switching to the previous session | Ctrl+a p |
Switching to the next session | Ctrl+a n |
Listing all sessions | Ctrl+a 0 |
Now, we will demonstrate to you the complete procedure of closing an existing screen session. Before starting this, check out the below-given method for setting up some screen session.
Setting-up Screen Sessions
As a result of the command execution, two sessions will be initialized named “my_session_1”, and “my_session_2”.
Now, list out all screen sessions by writing out the following command:
Here, the output will also give you information about the existing screen session, other than the newly created one.
One method of ending a session is to attach it first and then end it. We will follow this method in the upcoming section. We took “my_session_1” as an example, you can choose the session which you want to end.
Utilize the following command for checking related information about the “my_session_1” screen session.
Closing a Screen Session
Note the complete id of the screen session. After that, attach this screen session using the “-r” option in the screen command.
In your terminal, type “exit” to exit this screen session.
As you can see, the output declares that the process is terminated successfully.
Another method of ending a screen session is to press “CTRL+a” combined with the “\” key while a session is attached.
Conclusion
The screen multiplexes numerous interactive shells of the physical terminal. It also allows its user to execute multiple tasks in each terminal simultaneously. There comes a case where cleanup is required and for that, you want to end a screen session. In this post, we have discussed two distinct methods for ending a screen session.
About the author
Talha Saif Malik
Talha is a contributor at Linux Hint with a vision to bring value and do useful things for the world. He loves to read, write and speak about Linux, Data, Computers and Technology.
How do I get out of ‘screen’ without typing ‘exit’?
I screen -r ‘d into a Django server that’s running and I can’t simply Ctrl + C and exit out of it. Are there any alternative ways to get out of screen ? Currently, I manually close the tab on my local PC and ssh back in, but that’s becoming tiresome.
6 Answers 6
Ctrl-a d or Ctrl-a Ctrl-d . See the screen manual # Detach.
yes, you generally do have a tl;dr moment with the man command. so when you have a tl;dr when doing man command_name , in this case man screen , you can generally access a shorter & pretty helpful version of the docs by —help option, command_name —help , this case screen —help .
@josch You should be able to use ctrl-a + k or ctrl-a + ctrl-k to kill the current screen window. Ashish — The —help output only talks about command line options, it does not talk about the key bindings
- Ctrl + A , Ctrl + \ — Exit screen and terminate all programs in this screen. It is helpful, for example, if you need to close a tty connection.
- Ctrl + D , D or — Ctrl + A , Ctrl + D — «minimize» screen and screen -r to restore it.
I’m just clarifying for future readers. That’s Ctrl-A followed by Ctrl-\, and Ctrl-A followed by Ctrl-D.
@Julian Detaching doesn’t need Ctrl on both, just on ctrl+a. Works for me and if you do «ctrl+a» and then write «:help» you can see that it says that both ctrl+d and d works.
Ctrl-A -> Ctrl-D just exits from the session for me, leaving it running in the background. Ctrl-A -> \ will exit the session completely (on Oracle Linux 6).
To quit, it’s Ctrl-a + \ , not Ctrl-a + Ctrl-\ ! The key bindings can be viewed by pressing: Ctrl-a + ?
- Ctrl + A and then Ctrl + D . Doing this will detach you from the screen session which you can later resume by doing screen -r .
- You can also do: Ctrl + A then type : . This will put you in screen command mode. Type the command detach to be detached from the running screen session.
@Kostyantyn It works (as the man pages says ‘For your convenience’) both with and without the Ctrl for the d — so «Ctrl-a» «Ctrl-d» works, and so does «Ctrl-a» «d». Take your pick.
Ctrl + a followed by k will «kill» the current screen session.
To terminate the screen session use
To detach session and restore later use
In addition to the previous answers, you can also do Ctrl + A , and then enter colon ( : ), and you will notice a little input box at the bottom left. Type ‘quit’ and Enter to leave the current screen session. Note that this will remove your screen session.
Ctrl + A and then K will only kill the current window in the current session, not the whole session. A screen session consists of windows, which can be created using subsequent Ctrl + A followed by C . These windows can be viewed in a list using Ctrl + A + » .
How to stop a screen process in linux?
I am running a script on a remote server. I ran the script in screen , however I need to stop it before it completes since I need to update the script. I can easily detach from screen , however, is there a way to kill a screen process?
Do you really want to kill screen(1) ? Or would you rather kill the process you started inside screen(1) ?
5 Answers 5
CTRL+a and then ‘k’ will kill a screen session.
Thank you! I just added a Terminal Hotkey that goes «\001ky» (Ctrl-A, k and y for «yes»). On a far note, I have a hotkey bound to the «Home» key that goes «cd ~/ Enter» 😆 There’s no place like cd ~/
There are a couple of ‘screen’ ways to kill a specific screen session from the command line (non-interactively).
screen -X -S "sessionname" quit
2) send a Ctrl-C to a screen session running a script:
screen -X -S "sessionname" stuff "^C"
In both cases, you would need to use ‘screen -ls’ to find the session name of the screen session you want to kill . if there is only one screen session running, you won’t need to specify the -S «sessionname» parameter.
I used this to quit hundreds of erroneous screen sessions created by a buggy command:
for s in $(screen -ls|grep -o -P «1\d+.tty»); do screen -X -S $s quit; done;
where: the grep -o -P «1\d+.tty» is the command to get session names with Perl-like name regex «1\d+.tty» which captures all sessions start with number 1 , has some other numbers ( \d ) and end with .tty
Warning: You should test with this command first to see you get the exact list of sessions you want before apply the above command. This is to avoid quitting unwanted sessions:
for s in $(screen -ls|grep -o -P «1\d+.tty»); do echo $s; done;
I always to this echo test whenever the list in for loop is not clear, for example, the one generated by sub-command in $() expansion.