====== tmux and byobu ======
Terminal multiplexers: run multiple shell sessions inside a single SSH connection, detach and reattach without losing work.
* **tmux** — the underlying multiplexer; powerful, scriptable, widely available
* **byobu** — a configuration layer on top of tmux (or screen); adds a status bar, function-key bindings, and sane defaults; ideal for tilde servers
===== Why This Matters for SSH =====
When your SSH connection drops — network hiccup, laptop sleep, ISP timeout — any running process dies with it. With tmux/byobu, your session keeps running on the server. Reconnect and reattach to find everything exactly as you left it.
===== byobu — Quick Start =====
On tilde servers (tilde.pink, tilde.town) byobu is usually pre-installed.
**Enable auto-launch on login:**
byobu-enable # starts byobu automatically on every SSH login
byobu-disable # undo this
**Start/attach manually:**
byobu # start or reattach to existing session
byobu-tmux # explicitly use tmux backend
===== byobu Key Bindings =====
Byobu uses F-keys as its primary interface (no prefix chord needed).
^ Key ^ Action ^
| ''F1'' | Help / keybinding reference |
| ''F2'' | New window |
| ''F3'' | Previous window |
| ''F4'' | Next window |
| ''F5'' | Refresh status bar |
| ''F6'' | Detach session (keep running on server) |
| ''F7'' | Enter scrollback/copy mode |
| ''F8'' | Rename current window |
| ''F9'' | byobu configuration menu |
| ''Shift+F2'' | Split horizontally (new pane below) |
| ''Ctrl+F2'' | Split vertically (new pane right) |
| ''Shift+F3/F4'' | Move between panes |
| ''Shift+F6'' | Detach all clients (keep session running) |
| ''Alt+PageUp/Down'' | Scroll back through terminal history |
**Reattach after reconnecting:**
byobu # reattaches to existing session automatically
===== tmux — Direct Usage =====
If byobu isn't available or you prefer direct control:
==== Sessions ====
tmux # new unnamed session
tmux new -s work # new session named "work"
tmux ls # list sessions
tmux attach -t work # attach to "work"
tmux attach # attach to most recent session
tmux kill-session -t work # kill a session
==== Prefix Key ====
All tmux commands start with the **prefix**: ''Ctrl+b'' (default). Press prefix, then the command key.
==== Windows (tabs) ====
^ Keys ^ Action ^
| ''prefix c'' | New window |
| ''prefix ,'' | Rename window |
| ''prefix n'' | Next window |
| ''prefix p'' | Previous window |
| ''prefix 0–9'' | Jump to window by number |
| ''prefix w'' | Interactive window list |
| ''prefix &'' | Kill current window |
==== Panes (splits) ====
^ Keys ^ Action ^
| ''prefix %'' | Split vertically (left/right) |
| ''prefix "'' | Split horizontally (top/bottom) |
| ''prefix arrow'' | Move between panes |
| ''prefix z'' | Zoom pane to full screen (toggle) |
| ''prefix x'' | Kill current pane |
| ''prefix {'' / ''}'' | Swap pane left/right |
| ''prefix Ctrl+arrow'' | Resize pane |
==== Sessions and Detach ====
^ Keys ^ Action ^
| ''prefix d'' | Detach (session keeps running) |
| ''prefix s'' | List and switch sessions interactively |
| ''prefix $'' | Rename session |
==== Copy Mode (Scrollback) ====
prefix [ enter copy mode
arrow keys scroll
Ctrl+s search forward
q quit copy mode
Space start selection (vi mode)
Enter copy selection
prefix ] paste
To enable vi-style keys in copy mode, add to ''~/.tmux.conf'':
setw -g mode-keys vi
===== Useful ~/.tmux.conf Settings =====
# Increase scrollback buffer
set -g history-limit 10000
# Start window numbering at 1
set -g base-index 1
# Mouse support (scroll, click to select pane)
set -g mouse on
# Vi keys in copy mode
setw -g mode-keys vi
# Reload config without restarting
bind r source-file ~/.tmux.conf \; display "Reloaded"
# More intuitive splits (same directory)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
Reload after editing:
tmux source-file ~/.tmux.conf
# or prefix r if you added the bind above
===== SSH Workflow with tmux =====
**Typical session setup on a remote server:**
ssh you@tilde.pink
tmux new -s main # or just: byobu
# inside tmux:
# window 1: shell / general work
# window 2: irssi / IRC
# window 3: neomutt / email
# window 4: editor
# when done for the day:
# prefix d (detach — everything keeps running)
**Next day:**
ssh you@tilde.pink
tmux attach -t main # or just: byobu
# back exactly where you left off
**Persistent processes** (keep running after detach): irssi, weechat, mutt/neomutt, a long compile, a server process — anything you'd otherwise need ''nohup'' or ''screen'' for.
===== mosh — Mobile Shell =====
[[https://mosh.org/|mosh]] is an alternative to SSH that handles intermittent connections gracefully — roaming between networks, laptop sleep, spotty mobile data. Uses UDP.
mosh you@tilde.pink # instead of ssh
Combine with byobu/tmux for the most resilient remote workflow: mosh handles the connection layer, tmux handles session persistence.
===== tilde.pink Specific =====
byobu-enable # auto-launch on login (run once)
byobu will start automatically every time you SSH in and reattach to your existing session if one exists. See [[tilde:pink|tilde.pink]] for other setup steps.
===== See Also =====
* [[terminal:tools:start|Terminal Tools Index]]
* [[tilde:pink|tilde.pink]]
* [[tilde:start|tilde.town]]
* [[terminal:tools:ssh_tilde|SSH — tilde.town]]
* [[terminal:tools:ssh_homelab|SSH — Homelab]]
* [[terminal:start|Return to terminal]]