Терминальные мультиплексоры

от автора

Статья будет включать в себя обзор существующих проектов для мультиплексирования ввода/вывода терминала операционной системы Linux. Для тестов будем использовать Ubuntu Server 20.04.

Описание не претендует на полноту и является обзором софта, который можно использовать для работы с терминалом. Среди рассматриваемых приложений будут следующие представители:

  • screen

  • tmux

  • dvtm

  • Byobu

  • WezTerm

screen

Достаточно старый инструмент от GNU для работы с несколькими окнами в одном терминале. Входит в стандартную установку Ubuntu Server и множества других дистрибутивов. Поэтому, чтобы его использовать, даже не придется ничего дополнительно устанавливать на систему.

Документация описывает этот инструмент как полноценный менеджер окон. Кстати, окнами здесь называются терминалы, которые можно открывать дополнительно. Изначально функционал screen заключается в том, чтобы запустить любое приложение, достаточно просто перед командой открытия приложения добавить screen.

Сама концепция, которая заложена в основу работы инструмента — создание сессий, в рамках которых можно создавать окна, которые как раз будут показывать пользователю полезную инфмормацию.

Инструмент предполагает, что будет использоваться только клавиатура, поэтому придется пользоваться сочетаниями клавиш. Но, чтобы не запоминать их все, можно просто запомнить ctrl+a ?. Это сочетание клавиш вызовет справку по назначенным сочетаниям клавиш. Попробуем поработать с этим инструментом.

Команда screen будет выглядеть вот так:

После показа информации с картинки будет создано окно, с которым можно взаимодействовать. Фактически screen без параметров просто открывает новый терминал. Справка будет выглядеть вот так:

Если набрать последовательность сочетания клавиш:

ctrl-a S ctrl-a |

Будут созданы пустые области в терминале, их можно заполнить окнами ctrl-a c, перемещаться между окнами можно через сочетание ctrl-a tab. Результат будет выглядеть так:

Для дальнейшего управления удобно пользоваться последовательностью ctrl-a X. Эта команда будет закрывать области, которые используются для создания нового окна.

tmux

BSD версия screen, использует те же функции, также есть сессии и окна с которыми можно работать и запускать в них отдельные приложения.

tmux поставляется в установке Ubuntu Server 20.04, поэтому им можно пользоваться так же как и screen. Все взаимодействия с сессиями организуются через сокеты. Сокеты можно называть, а вот сессии — только нумеровать.

Список сессий можно получать через команду tmux ls. Кстати, по аналогии в screen тоже есть такая команда, но нужно писать вот так: ls -> -ls и получается screen -ls.

Созданные 2 сессии будут выглядеть вот так (команда ctrl-b w):

На картинке представлен вывод списка сессий, которые запущены на сервере. Сверху списком сессии, а снизу их содержимое.

Как и в screen, можно разбивать терминал на области, в которых будут работать приложения. Для этих дейтствий есть 2 команды — для вертикального сплитинга ctrl-b %, для горизонтального ctrl-b ". Разбиение сразу содержит запущенный терминал. Пример:

Закрытие области или панели можно осуществить через команду ctrl-b x.

dvtm

Виртуальный менеджер для управления окнами в терминале. Очень похож на tmux, однако не установлен по умолчанию в дистрибутиве Ubuntu Server 20.04, но он всегда есть в стандартных репозиториях, поэтому чтобы его установить нужно набрать команду:

sudo apt install -y dvtm

Использование инструмента снова не сильно отличается от предыдущих, здесь для любого действия можно использовать сочетание клавиш ctrl-g и дополнение в виде отдельной буквы. Как всегда, для ознакомления с функциями инструмента можно использовать последовательность ctrl-g ?.

Здесь так же возможно разделение экрана, но, в отличии от screen и tmux, разделение происходит автоматически, однако можно использовать стандартные раскладки, которые скомпануют отдельные окна. Например, последовательность ctrl-g m выведет активное окно на весь экран. Переход между окнами осуществляется последовательность ctrl-g j. Закрытие окон аналогично предыдущим инструментам — ctrl-g x.

Разбивку окон можно производить вот так ctrl-g c:

Byobu

Оболочка для screen и tmux, может использовать их базовый функционал и предоставляет удобный интерфейс. Для запуска достаточно запустить byobu, кстати, пакет стоит по умолчанию на Ubuntu Server. Поэтому, чтобы его задействовать, достаточно просто запустить команду.

Интерфейс построен так, чтобы была похожая интеграция, которая есть в файловых менеджерах типа Far. Например, чтобы вызвать справку, то нужно набрать F1.

Если добавлять окно, его создание происходит по нажатию клавиши F2.

WezTerm

Единственный среди разобранных полноценный терминал. Согласно последним трендам в языках программирования написан на Rust. Он поддерживает из коробки мутиплексирование, работу табами и окнами, как это было в tmux и screen. Располагается проект тут. Кросплатформенность позволяет с ним работать на всех популярных платформах.

Главной особенностью wezterm является способ конфигурации — конфиг для этого терминала представлен скриптом на Lua.

Как установить терминал в систему можно найти здесь.

Вместо заключения

В статье были приведены способы кастомизации терминала операционной системы. Какой мультиплексор/терминал лучше, стоит выбирать под решаемую задачу. Например, для управления сервером может быть полезен screen и tmux, для управления Desktop машиной может подойти WezTerm.


Статья подготовлена экспертом Александром Колесниковым в преддверии старта курса «Administrator Linux. Professional».

Всех желающих приглашаем на бесплатный двухдневный интенсив «Простой роутер на Linux». Чем займемся на занятии:
— Настройка автоматической выдачи сетевых адресов (DHCP);
— Храним имена сайтов для быстрой загрузки (DNS);
— Подготовка периметра защиты от внешней сети (firewall);
— Настройка трансляции адресов на внешнем интерфейсе (NAT masquerade);
— Активация обмена пакетами с внешним миром (ip_forwarding).
Регистрация здесь.


ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/646037/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *