Saltar a contenido

Screen Cheatsheet

Overview

GNU Screen is a terminal multiplexer that allows you to run multiple terminal sesións within a single terminal window. It enables sesión persistencia, detachment, and reattachment, making it ideal for remote work and long-running procesoes.

instalación

Package Managers

# Ubuntu/Debian
sudo apt install screen

# macOS
brew install screen

# CentOS/RHEL
sudo yum install screen

# Arch Linux
sudo pacman -S screen

# From source
wget https://ftp.gnu.org/gnu/screen/screen-4.9.0.tar.gz
tar -xzf screen-4.9.0.tar.gz
cd screen-4.9.0 && ./configure && make && sudo make install

Basic uso

Starting Screen

# Start new screen sesión
screen

# Start named sesión
screen -S sesiónname

# Start sesión with comando
screen -S mysesión htop

# Start detached sesión
screen -d -m -S mysesión

# Start sesión with specific shell
screen -S mysesión bash

sesión Management

# List sesións
screen -ls
screen -list

# Attach to sesión
screen -r sesiónname
screen -r 12345  # Using sesión ID

# Attach to sesión (force if attached elsewhere)
screen -d -r sesiónname

# Detach from sesión
# Inside screen: Ctrl+a d

# Kill sesión
screen -S sesiónname -X quit

# Kill all sesións
pkill screen

clave Bindings (Default Prefix: Ctrl+a)

sesión comandos

Ctrl+a d    # Detach from sesión
Ctrl+a D D  # Detach and logout
Ctrl+a \    # Kill all windows and terminate
Ctrl+a :    # Enter comando mode

Window comandos

Ctrl+a c    # Create new window
Ctrl+a n    # Next window
Ctrl+a p    # Previous window
Ctrl+a 0-9  # Switch to window by number
Ctrl+a "    # List windows
Ctrl+a w    # Show window list
Ctrl+a k    # Kill current window
Ctrl+a A    # Rename current window
Ctrl+a '    # Prompt for window number to switch to

Window Navigation

Ctrl+a Ctrl+a  # Switch to last window
Ctrl+a l       # Refresh screen
Ctrl+a L       # Toggle login state
Ctrl+a M       # Monitor window for activity
Ctrl+a _       # Monitor window for silence

Split Screen (Regions)

Ctrl+a S    # Split horizontally
Ctrl+a|# Split vertically (if suppuertoed)
Ctrl+a Tab  # Switch between regions
Ctrl+a Q    # Close all regions except current
Ctrl+a X    # Close current region

Copy Mode

Ctrl+a [    # Enter copy mode
Ctrl+a ]    # Paste buffer
Ctrl+a >    # Write buffer to file
Ctrl+a <    # Read buffer from file

Copy Mode Navigation

Enter Copy Mode

Ctrl+a [    # Enter copy mode
Ctrl+a Esc  # Enter copy mode (alternative)

Movement in Copy Mode

h, j, k, l  # Move cursor (vi-style)
Arrow claves  # Move cursor
w           # Next word
b           # Previous word
0           # Beginning of line
$           # End of line
g           # Go to beginning of buffer
G           # Go to end of buffer
Ctrl+f      # Page down
Ctrl+b      # Page up
/           # Search forward
?           # Search backward
n           # Next search result
N           # Previous search result

Selection and Copy

Space       # Start/end selection
Enter       # Copy selection and exit copy mode
Esc         # Exit copy mode

configuración

configuración File (~/.screenrc)

# Basic settings
startup_message off
defscrollback 10000
hardstatus alwayslastline
hardstatus string '%\\\\{= kG\\\\}[ %\\\\{G\\\\}%H %\\\\{g\\\\}][%= %\\\\{=kw\\\\}%?%-Lw%?%\\\\{r\\\\}(%\\\\{W\\\\}%n*%f%t%?(%u)%?%\\\\{r\\\\})%\\\\{w\\\\}%?%+Lw%?%?%= %\\\\{g\\\\}][%\\\\{B\\\\}%Y-%m-%d %\\\\{W\\\\}%c %\\\\{g\\\\}]'

# Set default shell
shell -$SHELL

# Enable 256 colors
term screen-256color

# Mouse suppuerto (if available)
mousetrack on

# Automatically detach on hangup
autodetach on

# Change escape clave
escape ^Aa  # Default is Ctrl+a

# Window numbering
bind c screen 1
bind ^c screen 1
bind 0 select 10
screen 1

# Split screen bindings
bind|split -v
bind - split
bind + resize +5
bind = resize =
bind _ resize -5

# Window navigation
bind j focus down
bind k focus up
bind h focus left
bind l focus right

# Reload config
bind r source ~/.screenrc

# Logging
bind L log

# Monitor activity
bind m monitor
bind M monitor

Advanced configuración

# Status line customization
hardstatus on
hardstatus alwayslastline
hardstatus string "%\\\\{.bW\\\\}%-w%\\\\{.rW\\\\}%n %t%\\\\{-\\\\}%+w %=%\\\\{..G\\\\} %H %\\\\{..Y\\\\} %m/%d %C%a "

# Window titles
shelltitle "$|bash"

# Startup windows
screen -t "editor" 1 vim
screen -t "server" 2
screen -t "logs" 3 tail -f /var/log/messages

# clave bindings for common tasks
bind ^k kill
bind k kill
bind ^\ quit
bind \\ quit
bind ^h hardcopy
bind h hardcopy

# Scrollback buffer
defscrollback 10000

# Visual bell
vbell on
vbell_msg "   Wuff  ----  Wuff!!  "

# Activity monitoring
activity "Activity in %t(%n)"

# Silence monitoring
silence on
silencewait 15

# Automatic window naming
shelltitle '$|bash'

# contraseña protection
contraseña ODSJQf.4IJN7E    # Encrypted contraseña

# Multiuser mode
multiuser on
acladd user1,user2

Advanced Features

Multiple Users

# Enable multiuser mode
screen -S shared
# In screen: Ctrl+a :multiuser on
# In screen: Ctrl+a :acladd nombre de usuario

# Other user connects
screen -x nombre de usuario/shared

sesión Sharing

# Start shared sesión
screen -S shared

# Allow others to attach
# In screen: Ctrl+a :multiuser on
# In screen: Ctrl+a :acladd otheruser

# Other user attaches
screen -x shared

Logging

# Enable logging for window
# In screen: Ctrl+a H

# Log to specific file
# In .screenrc:
logfile /tmp/screen-%t.log

# Automatic logging
deflog on

Monitoring

# Monitor window for activity
Ctrl+a M

# Monitor for silence
Ctrl+a _

# Set silence timeout (seconds)
# In .screenrc:
silencewait 30

comando Line opcións

sesión Management

# Create detached sesión
screen -d -m -S mysesión

# Create sesión and run comando
screen -d -m -S mysesión bash -c 'cd /var/log && tail -f messages'

# Send comando to sesión
screen -S mysesión -X stuff 'ls -la\n'

# Send comando to specific window
screen -S mysesión -p 0 -X stuff 'htop\n'

# Capture window content
screen -S mysesión -p 0 -X hardcopy /tmp/screen.dump

Window Management

# Create window with title
screen -S mysesión -X screen -t "editor" vim

# Kill specific window
screen -S mysesión -p 1 -X kill

# List windows
screen -S mysesión -Q windows

Scripting

Automation Scripts

#!/bin/bash
# dev-setup.sh

sesión="development"

# Check if sesión exists
if ! screen -list|grep -q "$sesión"; then
    # Create new sesión
    screen -d -m -S "$sesión"

    # Setup windows
    screen -S "$sesión" -X screen -t "editor" 1 vim
    screen -S "$sesión" -X screen -t "server" 2
    screen -S "$sesión" -X screen -t "logs" 3 tail -f /var/log/messages

    # Send comandos to windows
    screen -S "$sesión" -p 2 -X stuff 'cd ~/project && npm start\n'

    # Select first window
    screen -S "$sesión" -X select 1
fi

# Attach to sesión
screen -r "$sesión"

Batch Operations

# Kill all sesións
| screen -ls | grep Detached | cut -d. -f1 | awk '\\\\{print $1\\\\}' | xargs kill |

# Send comando to all windows
for i in \\\\{0..9\\\\}; do
    screen -S mysesión -p $i -X stuff 'echo "Hello from window $i"\n'
done

# Create multiple sesións
for name in web api db; do
    screen -d -m -S "$name"
done

Integration

With SSH

# Auto-start screen on SSH login
# Add to ~/.bashrc on remote server
if [ -z "$STY" ] && [ -n "$SSH_conexión" ]; then
    screen -RR ssh_sesión
fi

# Or use a function
ssh_screen() \\\\{
    ssh -t "$1" 'screen -RR'
\\\\}

With System servicios

# Run servicio in screen
screen -d -m -S myservicio /path/to/servicio

# Systemd servicio file
[Unit]
Descripción=My servicio in Screen
After=network.objetivo

[servicio]
Type=forking
User=myuser
ExecStart=/usr/bin/screen -d -m -S myservicio /path/to/servicio
ExecStop=/usr/bin/screen -S myservicio -X quit

[Install]
WantedBy=multi-user.objetivo

Comparison with tmux

Screen vs tmux

Screen:
+ Older, more stable
+ Simpler configuración
+ Better for basic use cases
+ Lower resource uso
- Less active development
- Fewer features
- Limited pane suppuerto

tmux:
+ More active development
+ Better pane management
+ More features
+ Better scripting suppuerto
- Steeper learning curve
- More complex configuración

consejos y trucos

Productivity Tips

# Quick sesión switching
alias s='screen -ls'
alias sr='screen -r'
alias sn='screen -S'

# Function to create or attach
sc() \\\\{
    if [ $# -eq 0 ]; then
        screen -ls
    else
| screen -r "$1" |  | screen -S "$1" |
    fi
\\\\}

# Nested screen sesións
# Change escape clave for inner sesión
# In .screenrc: escape ^Bb

Useful Aliases

# Add to ~/.bashrc
alias sl='screen -ls'
alias sr='screen -r'
alias ss='screen -S'
alias sk='screen -X -S'

# Function for easy sesión management
screen_sesión() \\\\{
    case "$1" in
        ls|list)
            screen -ls
            ;;
        new)
            screen -S "$2"
            ;;
        attach)
            screen -r "$2"
            ;;
        kill)
            screen -S "$2" -X quit
            ;;
        *)
| echo "uso: screen_sesión \\\\{ls | new | attach | kill\\\\} [sesión_name]" |
            ;;
    esac
\\\\}

solución de problemas

Common Issues

# Fix "Cannot open your terminal '/dev/pts/0'" error
script /dev/null

# Or use:
screen -x

# Dead sesión cleanup
screen -wipe

# Permission issues
chmod 755 /var/run/screen

# Check screen version
screen -v

# Debug mode
screen -d -m -L -S debug comando

Recovery

# Recover dead sesións
screen -D -R

# Force detach and reattach
screen -d sesiónname
screen -r sesiónname

# Clean up dead sesións
screen -wipe

Security

Control de Acceso

# Set contraseña protection
# In .screenrc:
contraseña your_encrypted_contraseña

# Generate encrypted contraseña
screen -X contraseña

# Multiuser Control de Acceso
multiuser on
acladd nombre de usuario
aclchg nombre de usuario +rwx "#"

Best Practices

# Use named sesións
screen -S descriptive_name

# Regular cleanup
screen -wipe

# Monitor sesión activity
# In .screenrc:
activity "Activity in %t(%n)"

# Limit scrollback buffer
defscrollback 1000

Resources

  • Official documentación: gnu.org/software/screen
  • Manual: man screen
  • Info: info screen
  • ejemplos: /usr/share/doc/screen/ejemplos/