# Multiplexer

Un multiplexer, o *mux*, e' un dispositivo che consente ci collegare piu' ingressi a una singola uscita. Un multiplexer da terminale permette di passare tra diversi ingressi o sessioni. Due esempi sono `screen` e `tmux`.

Le sessioni possono essere scollegate dal terminale corrente, coi programmi che continuano ad essere eseguiti in background.

##  screen

Invocato semplicemente digitando `screen` sul terminale. Il file di configurazione e' `~/.screenrc`

Ogni comando e' preceduto dalla combinazione `CTRL + a`.

Un elenco dei comandi principali:

- `CTRL + a + w`: mostra i nomi delle finestre. Il conteggio parte da 0
- `CTRL + a + c`: crea una nuova finestra (il simbolo `*` indica la finestra corrente)
- `CTRL + a + "`: mostra una lista a elenco: delle finestre

```bash
0-$ bash 1*$ bash
```

- `CTRL + a + A`: rinominare la finestra corrente
- `screen -t anotherwindow`: crea una finestra con un nome stabilito
- `CTRL + a + n`: spostarsi alla finestra successiva
- `CTRL + a + p`: precedente
- `CTRL + a + number`: alla finestra *number*
- `CTRL + a + k`: chiude la finestra attualmente in uso
- `CTRL + a + S`: divide il terminale in due regioni orizzontali
- `CTRL + a + |`: verticalmente
- `CTRL + a + Tab`: muoversi tra le regioni
- `CTRL + a + Q`: termina tutte le regioni
- `CTRL + a + X`: termina la regione corrente
- `CTRL + a + D`: distacco dalla sessione
- `CTRL + a + :`: per entrare nella modalita' di comando
  - `quit`

Alcune opzioni di screen:

- `screen -ls`: mostra un elenco di tutte le sessioni
- `screen -S new-session`: creare una nuova sessione con nome *new-session*
- `screen -R SESSION-PID` o `screen -R SESSION-NAME`: collegarsi alla medesima sessione
- `screen -t SESSION-NAME COMMAND`: crea una sessione SESSION-NAME, nella quale sara' eseguito il comando COMMAND. Ad esempio: `screen -t top top`
- `screen -X -S SESSION_NAME quit`: chiude la sessione

### Copia e incolla: scrollback-mode

- `CTRL + a + [`: accedere alla scrollback-mode
- Spostarsi all'inizio del testo da copiare coi tasti freccia
- Premere `Space`, per segnale l'inizio della selezione del testo
- Spostarsi coi tasti freccia fino al termine del testo da copiare
- Premere `Space`, per segnale il termine della selezione del testo
- `CTRL + a + ]`: permette di incollare il testo

## tmux

- Implementa un modello client-server: il server fornisce una serie di sessioni, ciascuna delle quali puo' avere un numero di finestre ad esse collegate, che possono a loro volta essere condivise tra diversi client
- Progetto piu' recente
- Consente di gestire più sessioni contemporaneamente
- tmux ha un sistema di plugin più avanzato, con possibilità di estendere le funzionalità del programma

Puo' essere invocato digitando `tmux`:

```bash
[0] 0:bash*                                      "pc" 21:36 10-dic-24
```

La barra di stato fornisce le seguenti informazioni:

- data e ora
- Nome della sessione: `[0]`
- Numero della finestra: `0`
- Window name: `bash*`. Nome di default del programma, che tmux aggiorna in modo da riflettere il programma in esecuzione. L'asterisco indica la finestra corrente

Un elenco dei comandi principali:

- `tmux new -s "NAME_SESSION" -n "WINDOW_NAME"`: assegnare un nome alla sessione e alla finestra
- `CTRL + b`: prefisso dei comandi
- `CTRL + b + c`: per creare una nuova finestra
- `CTRL + b + w`: per visualizzare tutte le finestre
- `CTRL + b + &`: per chiudere una finestra
- `CTRL + b + $`: rinominare una sessione
- `CTRL + b + ,`: rinominare una finestra
- `CTRL + b + n`: per passare alla finestra successiva
- `CTRL + b + p`: precedente
- `CTRL + b + s` o `tmux ls`: elencare le varie sessioni
- `tmux kill-session -t SESSION_NAME`: terminare la sessione SESSION_NAME
- `tmux attach -t SESSION_NAME`: collegarsi alla sessione SESSION_NAME
- `CTRL + b + d`: detach dalla sessione
- `CTRL + b + :`: per entrare nella modalita' di comando
  - `split-window`
  - `kill-window`

### Riquadri

tmux permette di suddividere la finestra in *riquadri*. Si tratta di pseudo-terminali: terminare un riquadro terminera' anche il suo pseudo terminale e tutti i programmi ad esso associati.

- `CTRL + b + "`: per dividere la finestra orizzontalmente
- `CTRL + b + %`: per dividere la finestra verticalmente
- `CTRL + b + x`: per eliminare il riquadro corrente

I suoi file di conf si trovano in `/etc/tmux.conf` o `~/.tmux.conf`****