# TMUX

- [TMUX](#tmux)
  - [Установка](#установка)
    - [tmux](#tmux-1)
    - [TPM (Tmux Plugin Manager)](#tpm-tmux-plugin-manager)
    - [Dracula Theme](#dracula-theme)
    - [Разделяемая сессия между 2-мя пользователями](#разделяемая-сессия-между-2-мя-пользователями)
    - [Заблокировать пользователя после завершения совместной работы](#заблокировать-пользователя-после-завершения-совместной-работы)

## Установка

### tmux

```bash
apt-get install tmux
```

### TPM (Tmux Plugin Manager)

<https://github.com/tmux-plugins/tpm>

```bash
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
```

добавить в конфиг `~/.tmux.conf`

```bash
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'github_username/plugin_name#branch'
# set -g @plugin 'git@github.com:user/plugin'
# set -g @plugin 'git@bitbucket.com:user/plugin'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
```

### Dracula Theme

<https://draculatheme.com/tmux>

***

***Конфиг*** *(пользовательский / системный)*

```bash
~/.tmux.conf
/etc/tmux.conf
```

***Включить поддержку мыши*** *(в конфиг добавить)*

```bash
set -g mouse on
```

***Запуск*** *(без параметров будет создана сессия `0`)*

```bash
tmux
```

новая сессия `session1`. Название отображается снизу-слева в квадратных скобках в статус строке. Далее идет перечисление окон. Текущее окно помечается звездочкой.

```bash
tmux new -s session1
```

***Окна***  
`Ctrl+b с` - новое окно  
`Ctrl+b w` - список окон. переключиться курсором вверх-вниз  
`Ctrl+b &` - закрыть окно, нужно подтвердить `y`  
`Ctrl+b {` - переместить активное окно влево по кругу

***Переключение***  
`Ctrl+b n` - следующее окно  
`Ctrl+b p` - предыдущее окно  
`Ctrl+b 0` - переключиться на номер окна

***Деление окна***  
`Ctrl+b "` - деление окна горизонтально или `tmux split-window -h`  
`Ctrl+b %` - деление окна вертикально или `tmux split-window -v`  
`Ctrl+b стрелки` - переход между панелей, либо режим мыши  
`Ctrl+b+стрелки` - изменение размеров панелей или `Ctrl+b Ctrl+стрелки`. Или мышью - потянуть за край панели.  
`Ctrl+b z` - zoom, выделить окно, повторное нажатие вернёт обратно
`Ctrl+b space` - смена разделения на предопределённые расположения
`Ctrl+d` - закрыть текущее окно
`Ctrl+b x` - закрытие окон, нужно подтвердить `y` или `exit`

***Сессии***  
`Ctrl+b d` - отключение от сессии или `tmux detach`  
`tmux ls` - список сессий

*Подключиться к работающей сессии*  
`tmux attach` - подключение к сессии, либо к единственной, либо последней созданной  
`tmux attach -t session1` - подключение к сессии session1  
`Ctrl+b s` - выбрать сессию  
`tmux kill-session -t session1` - завершение сессии  
`tmux kill-server` - завершить все сессии

***

`tmux list-commands` - cписок поддерживаемых команд

### Разделяемая сессия между 2-мя пользователями

Чтобы несколько пользователей могли подключиться к одной сессии tmux, можно выполнить следующие шаги:

- создать общую группу и добавить пользователей в эту группу

```bash
su -
TMUX_GROUP=tmuxgroup
groupadd $TMUX_GROUP
usermod -aG $TMUX_GROUP user1
usermod -aG $TMUX_GROUP user2
```

- создать директорию с битом `setgid`, в которой будет создаваться сокет разделяемой сессии tmux

```bash
mkdir /var/tmux
chgrp $TMUX_GROUP /var/tmux
chmod g+ws /var/tmux
```

- создать общую сессию

```bash
tmux -S /var/tmux/shared-session
```

- второй пользователь может подключиться к созданной сессии

```bash
tmux -S /var/tmux/shared-session attach
```

### Заблокировать пользователя после завершения совместной работы

После завершения совместной работы можно заблокировать учётную запись второго пользователя, чтобы не было возможности несанкционированного подключения к узлу.

```bash
usermod -L user2
```

Чтобы разблокировать пользователя, вводим:

```bash
usermod -U user2
```

Текущий статус блокировки учётной записи

```bash
da2001@bastion:~ $ sudo passwd -S tmuxuser
tmuxuser L 04/08/2024 0 99999 7 -1
da2001@bastion:~ $ sudo passwd -S da2001
da2001 P 04/04/2022 0 99999 7 -1
da2001@bastion:~ $ 
```

где

- `L` - учётная запись заблокирована
- `P` - учётная запись разблокирована