Screen terminal multiplexer: Difference between revisions
No edit summary |
m (→Where to find more examples: fixed list formatting) |
||
(12 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{pkg|screen}} is a terminal multiplexer. It's a good tool for e.g. remote support. It can also be used to start a command you want to keep running after you close your console session (you can later on attach to your running session). When you enter a {{pkg|screen}} session you will not notice too much.<BR> | |||
To know if you are inside a | To know if you are inside a {{pkg|screen}} session, use the notes in '[[#Get_help|get help]]' section mentioned below. | ||
= Install = | = Install = | ||
In order to use {{pkg|screen}} you will have to install it: | |||
{{cmd|apk add screen}} | {{cmd|apk add screen}} | ||
= | = Usage = | ||
== Start a new session == | == Start a new session == | ||
To enter a {{pkg|screen}} session you just enter: | |||
{{cmd|screen}} | {{cmd|screen}} | ||
== List existing sessions == | == List existing sessions == | ||
When you have started some session(s) you can list them: | |||
{{cmd|screen -list}} | {{cmd|screen -list}} | ||
You might get a list that looks like this: | You might get a list that looks like this: | ||
Line 20: | Line 24: | ||
== Attach to a existing session == | == Attach to a existing session == | ||
Lets say you want to attach to a existing session (e.g. the above | Lets say you want to attach to a existing session (e.g. the above <code>11131.pts-3.mhlab01</code> session). | ||
{{cmd|screen -x 11131}} | {{cmd|screen -x 11131}} | ||
or | or | ||
{{cmd|screen -x pts-3}} | {{cmd|screen -x pts-3}} | ||
{{tip|If you see <code>Attaching from inside of screen?</code>, you are already inside a screen session.}} | |||
== Controlling a screen session == | |||
While inside a {{pkg|screen}} session, you can control it using keyboard shortcuts. We will only describe some of those alternatives. | |||
{{tip|To enter a keyboard shortcut that controls the current {{pkg|screen}} session, you should click {{key|A}} while holding down {{key|CTRL}}<br>In the below examples this procedure is described as <code>^A</code>}} | |||
=== Get help === | |||
One of the most useful commands is the one that gives you 'help'.<br> | |||
While in your {{pkg|screen}} session, click: | |||
{{cmd|^A ?}} | |||
''(Do not press/hold {{key|CTRL}} when clicking {{key|?}})'' | |||
== | === Detach from a session === | ||
Sometimes it's useful to just detach from a session without killing it.<br> | |||
{{cmd| | {{cmd|^A d}} | ||
{{tip|Try starting <code>ping 127.0.0.1</code> while inside a screen session and then detach from the session.<br>After some while re-connect to the session using <code>screen -x</code>.<br>Note that the "seq" value indicates that ping had continued running while you where detached from the session.}} | |||
=== Close or kill a session === | |||
To 'kill' a session: | |||
{{cmd|^A k}} | |||
Confirm by clicking {{key|y}} when prompted. | |||
You can also 'kill' your session by entering: | |||
{{cmd|exit}} | {{cmd|exit}} | ||
== | = Extra = | ||
' | == Connect to serial console == | ||
{{pkg|screen}} is a good tool when you need to connect to a serial console ''(e.g. if you want to configure a switch using it's serial port)''. Connecting to a serial console could look like this: | |||
{{cmd| | {{cmd|screen /dev/ttyS0 9600}} | ||
== Force console users into a screen session == | == Force console users into a screen session == | ||
In some cases you might want to force only console users into a screen session.<BR> | In some cases you might want to force only console users into a screen session.<BR> | ||
Note that the this configuration will not force SSH-users into a screen.<BR> | Note that the this configuration will not force SSH-users into a screen.<BR> | ||
Edit | Edit {{path|/etc/profile}} and add the following code to it: | ||
<pre> | <pre> | ||
if [ -n "$PS1" ] && [ -z "$STARTED_SCREEN" ] && [ -z "$SSH_TTY" ]; then | if [ -n "$PS1" ] && [ -z "$STARTED_SCREEN" ] && [ -z "$SSH_TTY" ]; then | ||
STARTED_SCREEN=1 ; export STARTED_SCREEN | STARTED_SCREEN=1 ; export STARTED_SCREEN | ||
screen -RR && exit 0 | screen -RR && exit 0 | ||
echo "Screen failed! continuing with normal | echo "Screen failed! continuing with normal startup" | ||
fi | fi | ||
</pre> | </pre> | ||
Line 55: | Line 75: | ||
Remove this part from above configuration to force SSH sessions into a screen session.<BR> | Remove this part from above configuration to force SSH sessions into a screen session.<BR> | ||
{{Note|Console users will also be forced into a screen session when folowing these instructions}} | {{Note|Console users will also be forced into a screen session when folowing these instructions}} | ||
= Other terminal multiplexers = | |||
A similar tool is {{pkg|tmux}} which is documented [[tmux|here]]. | |||
= Configuring .screenrc (example) = | |||
<pre> | |||
#hardstatus off | |||
hardstatus alwayslastline '%{= kG}[ %{y}%H%? %1`%?%{g} ][%= %{= kw}%-w%{+b yk} %n*%t%?(%u)%? %{-}%+w %=%{g}][ %{y}%l %{g}][%{W}%c:%s %{g}]' | |||
msgwait 1 | |||
vbell off | |||
# Huge scrollback buffer | |||
defscrollback 5000 | |||
# No welcome message | |||
startup_message off | |||
# Clear the screen after closing some programs | |||
altscreen on | |||
# Get rid of the vertical bars | |||
rendition so =00 | |||
caption string "%{03} " | |||
# 256 colors | |||
term screen-256color | |||
terminfo rxvt-unicode 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' | |||
termcapinfo xterm* ti@:te@ | |||
attrcolor b ".I" | |||
# UTF-8 | |||
#defutf8 on | |||
#utf8 on | |||
# Default Windows | |||
# Switch windows with F3 (prev) and F4 (next) | |||
bindkey "^[OR" prev | |||
bindkey "^[OS" next | |||
# Get rid of silly xoff stuff | |||
bind s split | |||
bind c screen 1 | |||
bind ^c screen 1 | |||
bind 0 select 10 | |||
screen 1 | |||
# remove some stupid / dangerous key bindings | |||
bind k | |||
bind ^k | |||
bind . | |||
bind ^\ | |||
bind \\ | |||
bind ^h | |||
bind h hardcopy | |||
bind 'K' kill | |||
bind '}' history | |||
bind L screen -t dmesg 10 watch "dmesg | tail -n $((LINES-42))" | |||
bind T screen -t htop 11 htop | |||
bind A screen -t atop 12 atop | |||
bind N screen -t nethogs 15 nethogs | |||
bind V screen -t vnstat 16 vnstat | |||
bind S screen -t ss 17 ss -s | |||
</pre> | |||
== Where to find more examples == | |||
* Archlinux forums (https://bbs.archlinux.org/viewtopic.php?id=55618) | |||
* GithubGist (https://gist.github.com/search?utf8=%E2%9C%93&q=screenrc) | |||
* Github (https://github.com/search?utf8=%E2%9C%93&q=screenrc) | |||
[[Category:Shell]] |
Latest revision as of 05:18, 9 November 2024
screen is a terminal multiplexer. It's a good tool for e.g. remote support. It can also be used to start a command you want to keep running after you close your console session (you can later on attach to your running session). When you enter a screen session you will not notice too much.
To know if you are inside a screen session, use the notes in 'get help' section mentioned below.
Install
In order to use screen you will have to install it:
apk add screen
Usage
Start a new session
To enter a screen session you just enter:
screen
List existing sessions
When you have started some session(s) you can list them:
screen -list
You might get a list that looks like this:
There are screens on: 11151.pts-1.mhlab01 (Attached) 11131.pts-3.mhlab01 (Attached) 2 Sockets in /var/run/screen/S-root.
Attach to a existing session
Lets say you want to attach to a existing session (e.g. the above 11131.pts-3.mhlab01
session).
screen -x 11131
or
screen -x pts-3
Attaching from inside of screen?
, you are already inside a screen session.Controlling a screen session
While inside a screen session, you can control it using keyboard shortcuts. We will only describe some of those alternatives.
In the below examples this procedure is described as
^A
Get help
One of the most useful commands is the one that gives you 'help'.
While in your screen session, click:
^A ?
(Do not press/hold CTRL when clicking ?)
Detach from a session
Sometimes it's useful to just detach from a session without killing it.
^A d
ping 127.0.0.1
while inside a screen session and then detach from the session.After some while re-connect to the session using
screen -x
.Note that the "seq" value indicates that ping had continued running while you where detached from the session.
Close or kill a session
To 'kill' a session:
^A k
Confirm by clicking y when prompted.
You can also 'kill' your session by entering:
exit
Extra
Connect to serial console
screen is a good tool when you need to connect to a serial console (e.g. if you want to configure a switch using it's serial port). Connecting to a serial console could look like this:
screen /dev/ttyS0 9600
Force console users into a screen session
In some cases you might want to force only console users into a screen session.
Note that the this configuration will not force SSH-users into a screen.
Edit /etc/profile and add the following code to it:
if [ -n "$PS1" ] && [ -z "$STARTED_SCREEN" ] && [ -z "$SSH_TTY" ]; then STARTED_SCREEN=1 ; export STARTED_SCREEN screen -RR && exit 0 echo "Screen failed! continuing with normal startup" fi
Force console and SSH users into a screen session
The above example holds the if-statement:
&& [ -z "$SSH_TTY" ]
Remove this part from above configuration to force SSH sessions into a screen session.
Other terminal multiplexers
A similar tool is tmux which is documented here.
Configuring .screenrc (example)
#hardstatus off hardstatus alwayslastline '%{= kG}[ %{y}%H%? %1`%?%{g} ][%= %{= kw}%-w%{+b yk} %n*%t%?(%u)%? %{-}%+w %=%{g}][ %{y}%l %{g}][%{W}%c:%s %{g}]' msgwait 1 vbell off # Huge scrollback buffer defscrollback 5000 # No welcome message startup_message off # Clear the screen after closing some programs altscreen on # Get rid of the vertical bars rendition so =00 caption string "%{03} " # 256 colors term screen-256color terminfo rxvt-unicode 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' termcapinfo xterm* ti@:te@ attrcolor b ".I" # UTF-8 #defutf8 on #utf8 on # Default Windows # Switch windows with F3 (prev) and F4 (next) bindkey "^[OR" prev bindkey "^[OS" next # Get rid of silly xoff stuff bind s split bind c screen 1 bind ^c screen 1 bind 0 select 10 screen 1 # remove some stupid / dangerous key bindings bind k bind ^k bind . bind ^\ bind \\ bind ^h bind h hardcopy bind 'K' kill bind '}' history bind L screen -t dmesg 10 watch "dmesg | tail -n $((LINES-42))" bind T screen -t htop 11 htop bind A screen -t atop 12 atop bind N screen -t nethogs 15 nethogs bind V screen -t vnstat 16 vnstat bind S screen -t ss 17 ss -s
Where to find more examples
- Archlinux forums (https://bbs.archlinux.org/viewtopic.php?id=55618)
- GithubGist (https://gist.github.com/search?utf8=%E2%9C%93&q=screenrc)
- Github (https://github.com/search?utf8=%E2%9C%93&q=screenrc)