Skip to content

Screen

Created: 2017-02-04 11:15:39 -0800 Modified: 2021-10-02 11:08:32 -0700

  • List all available screens: screen -ls

  • Attach to a screen shown in “screen -ls”: screen -rd <name of screen>

    • Note: I believe “attached” just means that that’s where your commands will go (switching between windows in the screen, killing screens, etc.).
  • Kill all screens: killall screen

  • Kill a single screen:

    • ctrl+a, k
    • ctrl+D (this is just a logout)
    • ”$ exit” (this is just a logout)
  • To rename a screen: ctrl+a, capital A

  • Ctrl+A and then a shortcut is the way to interact with screen easily

    • I can do this flow:
      • <first time only> screen
      • Ctrl+A c - make a window
      • Ctrl+A A - title it “client”
      • <launch the client>
      • Ctrl+A c - make another window
      • Ctrl+A A - title it “server”
      • <launch the server>
      • Close Putty if I want
      • …later
      • Reconnect with Putty
      • screen -rd - reattach to the screen I had earlier
      • Ctrl+A ” - choose which window I want
      • Ctrl+D, d: detach back to the shell
  • Scrolling a screen: ctrl+a, ctrl+[

    • Then use arrows or page [up|down]
  • screen -rd: this reattaches to an existing screen, detaching first if necessary (e.g. if Putty was timed out and your bash session was still active).

    • screen -list will show any active screen.
  • To create a new screen window from inside screen, just do “screen -t name”. You may need the “-p” option.

  • To make it so that your Bash profile is automatically loaded when you launch “screen”, you’ll need to edit your ~/.screenrc file

startup_message off

shell -$SHELL

screen -t bash 0 bash -l

screen -t bldeploy 1 bash -l

select 0

Annotated Bash script for starting up commands in screen (written by HiDeoo):

WARNING #1: I’ve found that I need to add “sleep 0.1” after creating the screen or else subsequent commands don’t always work.

WARNING #2: your .screenrc file can get in the way of this sometimes. For example, if my screenrc is set to create tabs like “bash” and “htop”, then I don’t think “thingy1” below ever gets created. According to HiDeoo:

thingy1 was the first window created automatically by screen at launch which we renamed using the CLI options, but this first window, which has an id #0 (starts at 0) was also renamed in the .screenrc with screen -t bash 0 bash -l (note the id #0) which lead to the conflict and the .screenrc won in this case ^^ No idea for the sleep tho, seen this several time, never had to use it but I'm just a dev using screen, not a sysadmin or something who could give more infos / details.

Also, if you find .screenrc files more readable / usable than a script, you can specify a path for a screenrc to use to screen with the -c option like screen -c useThisScreenrcInsteadOfTheDefaultOne.

#!/bin/bash
# This script will create a new screen session named "deploy".
# To connect to the session after running the script, use 'screen -r deploy'.
# General knowledge:
# -X option will send the following command to a screen session.
# First, let's destroy the "deploy" session if it already exists using the 'quit' command.
# If the session do not exists, the message "No screen session found." will be printed.
screen -S deploy -X quit
# Let's create a new session named "deploy".
# Screen automatically create a window, we rename it to "thingy1" using the -t option.
screen -dmS deploy -t thingy1
# I, Adam, need this sleep here or else it sometimes won't find the new screen.
sleep 0.1
# We now send a command to the "deploy" session to create a new window. We'll use the screen command inside a screen
# session to do that.
# The new tab will be name "thingy2".
screen -S deploy -X screen -t "thingy2"
# We now want to run things inside our 2 new windows.
# We specify the window we want to run the command to using the -p option.
# We'll use the screen 'stuff' command to insert a string in the input buffer and r to "Enter" / run the command.
screen -S deploy -p thingy1 -X stuff $'echo Welcome to tab number 1r'
screen -S deploy -p thingy2 -X stuff $'echo Welcome to tab number 2r'

What’s nice about this screenrc is that you’ll be able to see the windows as “tabs” at the bottom of the terminal so that you can easily switch with ctrl+A, <number of tab>.

shell -$SHELL

attrcolor b “.I”

termcapinfo xterm ‘Co#256:AB=E[48;5;%dm:AF=E[38;5;%dm’

termcapinfo xterm|xterms|xs|rxvt ti@:te@

defbce “on”

term xterm-256color

defscrollback 30000

hardstatus alwayslastline

hardstatus string ’%{= Kd} %{= Kd}%-w%{= Kr}[%{= KW}%n %t%{= Kr}]%{= Kd}%+w %-= %{KG} %H%{KW}|%{KY}%101`%{KW}|%D %M %d %Y%{= Kc} %C%A%{-}‘

“Ctrl+A A” becomes your shortcut instead of just “Ctrl+A”