Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Screen Cheatsheet

Screen Quick Reference

Basic

Description Command
Start a new session with session name screen -S <session_name>
List running sessions / screens screen -ls
Attach to a running session screen -x
Attach to a running session with name screen -r <session_name>
Detach a running session screen -d <session_name>
Kill a running session screen -X -S [session # you want to kill] kill
Accessing a screen that is already attached screen -r -d [session name]

Escape Key

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.

Getting Out

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)

Help

Description Command
See help Ctrl-a ? (Lists keybindings)

Window Management

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 <number> (only for windows 0 to 9)
Change to window by number or name Ctrl-a ' <number or title>
Change to next window in list Ctrl-a n or Ctrl-a <space>
Change to previous window in list Ctrl-a p or Ctrl-a <backspace>
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

Split screen

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

Misc

Description Command
Redraw window Ctrl-a C-l
Enter copy mode Ctrl-a [ or Ctrl-a <esc> (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

Scrolling

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

@jctosta
Copy link
Author

jctosta commented Aug 2, 2021

Can you add the following command to access a screen that is already attached?
screen -r -d [session name]

Done

@jctosta
Copy link
Author

jctosta commented Aug 2, 2021

Scrolling:

Ctrl-a esc - Enter scrolling mode
Ctrl-u - scroll up
Ctrl-d - scroll down
esc esc - Exit scrolling mode

Ty man, cheatsheet updated!!!

@Vaibhav-Nf
Copy link

how to broadcast command to all splits

@milahu
Copy link

milahu commented Apr 3, 2022

Send commands or input to a detached screen session

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

capture all *visible* output of a process (text screenshot)

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"

@jollymike
Copy link

jollymike commented Apr 25, 2022

Rename Session:

ctrl+a :sessionname <desired session name>

*be sure to include the ':' before typing 'sessionname ...'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment