Tmux
tmux (terminal multiplexer) è un programma che abilita diversi terminali (o finestre), su ognuno dei quali giri un programma separato, ad essere creatim acceduti e controllati da un singolo schermo o finestra di terminale. tmux può essere staccato (detached) da uno schermo e continuare a girare in background, ed essere ricollegato nuovamente in seguito.[1] Gli utenti familiari con GNU Screen possono trovare in tmux una valida alternativa.
Users familiar with GNU Screen may find tmux as a suitable alternative.
Installazione
Flags USE
USE flags for app-misc/tmux Terminal multiplexer
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
jemalloc
|
Use dev-libs/jemalloc for memory management |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
systemd
|
Enable use of systemd-specific libraries and features like socket activation or session tracking |
utempter
|
Include libutempter support |
vim-syntax
|
Pulls in related vim syntax scripts |
Emerge
Installare app-misc/tmux:
root #
emerge --ask app-misc/tmux
Configurazione
L'installazione standard di tmux non installerà i file di configurazione globale (/etc/tmux.conf) o specifici per ciascun utente (~/.tmux.conf). Sono disponibili degli esempi nella directory /usr/share/doc/tmux-2.0/examples e possono essere copiati nella location globale o utente ed editati a piacere utilizzando un text editor.
Configuration Files
- /etc/tmux.conf — the system-wide configuration file.
- $XDG_CONFIG_HOME/tmux/tmux.conf — The user specific tmux configuration file.
- ~/.tmux.conf — The legacy single-user tmux configuration file location.
Esempio wiki
set -g default-terminal "screen-256color" # Usa 256 colori
set -g status-utf8 on # Abilita utf-8
set -g history-limit 100000 # Numero di righe nel buffer di scroll
# L'indice iniziale delle finestre parte da 1 invece che da 0
set -g base-index 1
# Setta la combinazione di prefix ed alcuni key bindings per corrispondere a GNU Screen
set -g prefix C-a
bind-key C-a last-window
# Key bindings per pannelli orizzontali e verticali
unbind %
bind | split-window -h
bind - split-window -v
# Abilita i titoli delle finestre
#set -g set-titles on
# Stringa per titolo della finestra (usa variabili della barra di stato)
set -g set-titles-string '#T'
# Barra di stato con carico ed ora
set -g status-bg '#4e4e4e'
set -g status-fg '#ffffff'
set -g status-left ' '
set -g status-right '#[bg=#bbbbbb]#[fg=#000000]#(cut -d " " -f -3 /proc/loadavg) #[bg=#4e4e4e]#[fg=#ffffff]#(
date +" %H:%M ")'
set -g window-status-format '#I #W'
set -g window-status-current-format ' #I #W '
setw -g window-status-current-bg '#55ff55'
setw -g window-status-current-fg '#000000'
# Colore del bordo pannello
set -g pane-active-border-fg '#bbbbbb'
set -g pane-border-fg '#555555'
# Scorciatoia per ricaricare la configurazione
bind r source-file ~/.tmux.conf
- Match session numbers to number row
set -g base-index 1
- Set TERM, the default is "screen", "screen-256color" can be tried if "tmux-256color" doesn't work.
set -g default-terminal "tmux-256color"
- Set prefix to 'a' with ctl-a > a to send ctrl-a to the terminal
- set -g prefix C-a
- bind-key a send-prefix
- Set prefix2 to the default 'b'
- set -g prefix2 C-b
- Enable mouse
set -g mouse on
- Disable drag action in normal mode if your pointer causes problems with
unbind -n MouseDrag1Pane
- Also disable in copy mode
- unbind -Tcopy-mode MouseDrag1Pane
- Set the bar and inactive borders to blue, highlighting current in green.
- set-option -g status-style fg=black,bg=blue
- set-window-option -g window-status-current-style bg=green
- set-option -g pane-border-style fg=blue
- set-option -g pane-active-border-style fg=green
}}
To reload the configuration file from a terminal run:
user $
tmux source-file ~/.tmux.conf
Alternatively, modifications to the file can be loaded from within tmux via:
:
source-file ~/.tmux.conf
Automatic connection
Running tmux with exec and the -ADX
options will cause tmux to replace the current shell and create a session, or if one exists connect to it and both detach and exit the other client. This provides a very consistent way of working with remote sessions, and it can be run automatically:
Bash
user $
test -n "$PS1" && test -z "$TMUX" -a -n "$SSH_TTY" && exec tmux new -ADX
Fish
user $
status is-interactive ; and test -z "$TMUX" -a -n "$SSH_TTY" ; and exec tmux new -ADX
Plugins
Alcuni plugins sono disponibili per tmux. Vedere la sezione seguente per le opzioni disponibili.
tpm
tpm is a tmux plugin manager. See the tpm sub-article for more details on the installation process.
tmux-mem-cpu-load
tmux-mem-cpu-load è un piccolo programma disegnato per monitorare l'attività di sistema nella barra di stato di tmux. Vedere l'articolo tmux-mem-cpu-load per maggiori dettagli riguardo il processo di installazione.
Tmux Resurrect
tmux-resurrect rende l'ambiente di tmux persistente tra i riavvii di sistema. Vedere l'articolo resurrect per maggiori dettagli riguardo il processo di installazione.
Utilizzo
Assegnazione dei tasti (key bindings)
tmux può essere controllato da un client collegato utilizzando delle combinazioni di tasti, composte da una "pressione della combinazione di prefisso" (di default Ctrl+b) seguita da una combinazione di "comando".
Dopo aver premuto Ctrl+B è possibile utilizzare le seguenti combinazioni:
Generale
- ? = Lista delle combinazioni/tasti assegnati.
- d = Stacca il client corrente.
- : = Entra nel prompt dei comandi di tmux.
Creare ed amministrare finestre
- c = Crea una nuova finestra
- n = Passa alla finestra seguente.
- p = Passa alla finestra precedente.
- l = Passa all'ultima finestra selezionata.
- 0-9 = Sceglie una finestra da 0 a 9.
- ' = Presenta un indice di finestre da scegliere. Inserire un numero o un titolo per passare a quella finestra.
- , = Rinomina la finestra corrente.
- w = Sceglie la finestra corrente in modo interattivo.
- :, poi digitare
list-windows
enter = Mostra la lista delle finestre.
Creare ed amministrare pannelli
- " = Divide il pannello corrente in due, alto e basso.
- % = Divide il pannello corrente in due, sinistra e destra.
- o = Passa al pannello seguente nella finestra corrente.
- ; = Passa al pannello precedentemente attivo.
- { = Scambia il pannello corrente con il precedente.
- } = Scambia il pannello corrente con il successivo.
- Ctrl+o = Ruota i pannelli nella finestra corrente in avanti.
- da Alt+1 a Alt+5 = Dispone i pannelli in uno dei cinque layout predefiniti: orizzontale, verticale, principale + orizzontale, principale + verticale o giustificato
- x = Distrugge il pannello corrente.
- ! = Getta il pannello corrente fuori dalla finestra.
Copia, incolla ed operazioni di scroll
Le chiavi disponibili dipendono se è selezionata la modalità emasc (default) o vi. L'opzione mode-keys può essere settata nel file .tmux.conf per la modalità vi.
- [ = Entra in modalità copia per copiare il testo o vedere lo storico.
- ] = Incolla il buffer di testo più recente.
- # = Lista tutti i buffer.
- - = Cancella il buffer di testo più recente copiato.
Controllo di sessione
Iniziare una sessione
Una volta avviato tmux crea un socket per la sessione in /tmp/S-<UID>/<Nome della sessione>
tmux può essere avviato con il seguente comando:
user $
tmux
Oppure, per dare alla sessione un nome all'avvio, lanciare:
user $
tmux new-session -s portage
Elencare le sessioni
Fare una lista delle sessioni di tmux per vedere le informazioni su quelle attualmente in corso:
user $
tmux ls
0: 1 windows (created Thu Apr 9 09:09:03 2015) [180x65] (attached)
Quando viene fatto l'elenco delle sessioni il nome di ciascuna dovrebbe apparire come primo oggetto nella riga delle informazioni relative. E'possibile vedere dall'output seguente che la sessione è stata creata senza un nome, e che di conseguenza è stata referenziata come 0
.
Un altro modo di fare la lista le sessioni è passare l'argomento list-sessions
al comando.
user $
tmux list-sessions
0: 1 windows (created Thu Apr 9 09:09:03 2015) [180x65] (attached)
L'output mostrato è analogo a quello del comando precedente.
Rinominare una sessione
Utilizzare semplicemente tmux per iniziare una sessione non le darà un nome comprensibile o "parlante".
Se il nome di default non fosse abbastanza descrittivo (e 0
non tende a descrivere molto), è possibile rinominare la sessione. Supponete che Larry the cow abbia avviato tmux senza un nome di sessione specifico. Inizia poi a lavorare sulla compilazione di una nuova versione di Portage, e vorrebbe cambiare il nome di sessione in modo che rifletta il suo compito attuale. Per cambiare il nome di sessione assumerà prima il controllo di tmux premendo la combinazione di tasti magica: Ctrl+b, poi : che lo passerà alla barra di controllo di tmux. Per default, la riga dovrebbe diventare gialla. Una volta atterrato qui lancerà:
:
rename-session -t 0 portage
Dove 0
è il nome di sessione attuale (default) e portage
è il nuovo nome desiderato per la sessione. Per rinominare una sessione disconnessa da tmux digitare:
user $
tmux rename-session -t 0 portage
Riprendere una sessione
Dopo che la sessione è stata staccata, tutti i terminali rimarranno attivi assieme ai comandi non ancora terminati. Per riprendere una sessione usare attach -t <nome_sessione>
.
user $
tmux a -t portage
In alternativa, usare il comando con l'argomento per attaccarsi ad una sessione esistente:
user $
tmux attach -t portage
Operazioni di tipo demone
Per lanciare un comando in una sessione tmux senza attaccarsi alla sessione (come un demone) usare new-session -d
seguita dal comando da lanciare tra virgolette:
user $
tmux new-session -d 'emerge -uDNvp @world'
Ulteriori informazioni
- Screen - Un'alternativa a tmux.
Risorse esterne
- Un'eccellente introduzione a tmux.
- The Tao of tmux, ebook di Tony Narlock, creatore di libtmux e tmuxp.