Bildschirm Cheatsheet
Überblick
GNU Screen ist ein Terminal Multiplexer, mit dem Sie mehrere Terminalsitzungen innerhalb eines einzigen Terminalfensters ausführen können. Es ermöglicht Sitzungsbeharrlichkeit, Ablösung und Wiederanbringung, so dass es ideal für Remote-Arbeit und Langlauf-Prozesse.
Installation
Paketmanager
# 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
```_
## Basisnutzung
### Startbildschirm
```bash
# Start new screen session
screen
# Start named session
screen -S sessionname
# Start session with command
screen -S mysession htop
# Start detached session
screen -d -m -S mysession
# Start session with specific shell
screen -S mysession bash
```_
### Sitzungsmanagement
```bash
# List sessions
screen -ls
screen -list
# Attach to session
screen -r sessionname
screen -r 12345 # Using session ID
# Attach to session (force if attached elsewhere)
screen -d -r sessionname
# Detach from session
# Inside screen: Ctrl+a d
# Kill session
screen -S sessionname -X quit
# Kill all sessions
pkill screen
```_
## Schlüsselbindungen (Standard-Präfix: Ctrl+a)
### Sitzungsbefehle
Ctrl+a d # Detach from session Ctrl+a D D # Detach and logout Ctrl+a \ # Kill all windows and terminate Ctrl+a : # Enter command mode
### Fensterbefehle
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 (Regionen)
Ctrl+a S # Split horizontally Ctrl+a|# Split vertically (if supported) Ctrl+a Tab # Switch between regions Ctrl+a Q # Close all regions except current Ctrl+a X # Close current region
### Kopiermodus
Ctrl+a [ # Enter copy mode Ctrl+a ] # Paste buffer Ctrl+a > # Write buffer to file Ctrl+a < # Read buffer from file
## Kopiermodus Navigation
### Geben Sie den Kopiermodus
Ctrl+a [ # Enter copy mode Ctrl+a Esc # Enter copy mode (alternative)
### Bewegung im Kopiermodus
h, j, k, l # Move cursor (vi-style) Arrow keys # 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
### Auswahl und Kopieren
Space # Start/end selection Enter # Copy selection and exit copy mode Esc # Exit copy mode
## Konfiguration
### Konfigurationsdatei (~/.screenrc)
```bash
# 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 support (if available)
mousetrack on
# Automatically detach on hangup
autodetach on
# Change escape key
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
```_
### Erweiterte Konfiguration
```bash
# 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
# Key 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'
# Password protection
password ODSJQf.4IJN7E # Encrypted password
# Multiuser mode
multiuser on
acladd user1,user2
```_
## Erweiterte Funktionen
### Mehrere Benutzer
```bash
# Enable multiuser mode
screen -S shared
# In screen: Ctrl+a :multiuser on
# In screen: Ctrl+a :acladd username
# Other user connects
screen -x username/shared
```_
### Sitzungsaustausch
```bash
# Start shared session
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
```_
### Protokoll
```bash
# Enable logging for window
# In screen: Ctrl+a H
# Log to specific file
# In .screenrc:
logfile /tmp/screen-%t.log
# Automatic logging
deflog on
```_
### Überwachung
```bash
# Monitor window for activity
Ctrl+a M
# Monitor for silence
Ctrl+a _
# Set silence timeout (seconds)
# In .screenrc:
silencewait 30
```_
## Kommandozeilenoptionen
### Sitzungsmanagement
```bash
# Create detached session
screen -d -m -S mysession
# Create session and run command
screen -d -m -S mysession bash -c 'cd /var/log && tail -f messages'
# Send command to session
screen -S mysession -X stuff 'ls -la\n'
# Send command to specific window
screen -S mysession -p 0 -X stuff 'htop\n'
# Capture window content
screen -S mysession -p 0 -X hardcopy /tmp/screen.dump
```_
### Window Management
```bash
# Create window with title
screen -S mysession -X screen -t "editor" vim
# Kill specific window
screen -S mysession -p 1 -X kill
# List windows
screen -S mysession -Q windows
```_
## Schrift
### Automatisierungsskripte
```bash
#!/bin/bash
# dev-setup.sh
SESSION="development"
# Check if session exists
if ! screen -list|grep -q "$SESSION"; then
# Create new session
screen -d -m -S "$SESSION"
# Setup windows
screen -S "$SESSION" -X screen -t "editor" 1 vim
screen -S "$SESSION" -X screen -t "server" 2
screen -S "$SESSION" -X screen -t "logs" 3 tail -f /var/log/messages
# Send commands to windows
screen -S "$SESSION" -p 2 -X stuff 'cd ~/project && npm start\n'
# Select first window
screen -S "$SESSION" -X select 1
fi
# Attach to session
screen -r "$SESSION"
```_
### Batch Operationen
```bash
# Kill all sessions
| screen -ls | grep Detached | cut -d. -f1 | awk '\\\\{print $1\\\\}' | xargs kill |
# Send command to all windows
for i in \\\\{0..9\\\\}; do
screen -S mysession -p $i -X stuff 'echo "Hello from window $i"\n'
done
# Create multiple sessions
for name in web api db; do
screen -d -m -S "$name"
done
```_
## Integration
### Mit SSH
```bash
# Auto-start screen on SSH login
# Add to ~/.bashrc on remote server
if [ -z "$STY" ] && [ -n "$SSH_CONNECTION" ]; then
screen -RR ssh_session
fi
# Or use a function
ssh_screen() \\\\{
ssh -t "$1" 'screen -RR'
\\\\}
```_
### Mit System Services
```bash
# Run service in screen
screen -d -m -S myservice /path/to/service
# Systemd service file
[Unit]
Description=My Service in Screen
After=network.target
[Service]
Type=forking
User=myuser
ExecStart=/usr/bin/screen -d -m -S myservice /path/to/service
ExecStop=/usr/bin/screen -S myservice -X quit
[Install]
WantedBy=multi-user.target
```_
## Vergleich mit tmux
### Bildschirm vs tmux
Screen: + Older, more stable + Simpler configuration + Better for basic use cases + Lower resource usage - Less active development - Fewer features - Limited pane support
tmux: + More active development + Better pane management + More features + Better scripting support - Steeper learning curve - More complex configuration ```_
Tipps und Tricks
Produktivität Tipps
```bash
Quick session 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 sessions
Change escape key for inner session
In .screenrc: escape ^Bb
```_
Nützliche Alias
```bash
Add to ~/.bashrc
alias sl='screen -ls' alias sr='screen -r' alias ss='screen -S' alias sk='screen -X -S'
Function for easy session management
screen_session() \\{ case "$1" in ls|list) screen -ls ;; new) screen -S "$2" ;; attach) screen -r "$2" ;; kill) screen -S "$2" -X quit ;; *) | echo "Usage: screen_session \\{ls | new | attach | kill\\} [session_name]" | ;; esac \\} ```_
Fehlerbehebung
Gemeinsame Themen
```bash
Fix "Cannot open your terminal '/dev/pts/0'" error
script /dev/null
Or use:
screen -x
Dead session cleanup
screen -wipe
Permission issues
chmod 755 /var/run/screen
Check screen version
screen -v
Debug mode
screen -d -m -L -S debug command ```_
Erholung
```bash
Recover dead sessions
screen -D -R
Force detach and reattach
screen -d sessionname screen -r sessionname
Clean up dead sessions
screen -wipe ```_
Sicherheit
Zugriffskontrolle
```bash
Set password protection
In .screenrc:
password your_encrypted_password
Generate encrypted password
screen -X password
Multiuser access control
multiuser on acladd username aclchg username +rwx "#" ```_
Best Practices
```bash
Use named sessions
screen -S descriptive_name
Regular cleanup
screen -wipe
Monitor session activity
In .screenrc:
activity "Activity in %t(%n)"
Limit scrollback buffer
defscrollback 1000 ```_
Ressourcen
- offizielle Dokumentation: [gnu.org/software/screen](__LINK_1___
- Manual*:
man screen
_ - Info*:
info screen
_ - Beispiele:
/usr/share/doc/screen/examples/
_