Tmux против экрана

263

Я собираюсь вернуться к использованию GNU Screen , но я слышал, как люди иногда упоминают tmux как лучшую альтернативу. Действительно ли он предлагает альтернативу всем функциям экрана , таким как мониторинг активности в разных окнах и т. Д.? Каковы плюсы и минусы каждого?

Элисон Р.
источник
7
Также обсуждается на unix.stackexchange.com/questions/549/tmux-vs-gnu-screen
Ллойд Дьюольф,
2
На экране вы можете отправлять команды в присоединенную сессию через screen -S automate_me -X stuff 'command'$(echo -ne '\015')tmux. Очень полезно, если вы тестируете ISO / образ виртуальной коробки и вам нужно быстро выполнять некоторые команды. Например, у меня есть команда Vim для быстрой отладки сценариев на экране Virtualbox. В более ранних версиях tmux я обнаружил, что экран обрабатывает больше проходящего текста, тогда как tmux дает сбой. Также экран не требует какой-либо конфигурации для обработки UTF-8 и т. Д. Tmux делает.
dezza
Правильно ли tmuxсправляется history?
Beroe

Ответы:

170

Некоторые из основных () причин я предпочитаю tmuxболее screen:

  • Строка состояния намного проще в использовании. Вы можете легко настроить различные тексты / стили для текущего окна, окон с активностью и т. Д., А также можете размещать элементы слева и справа от строки состояния, включая команды оболочки, которые можно запускать с заданным интервалом (по умолчанию 15 с).
  • Почти любая команда, которую вы можете запустить внутри, tmuxможет быть запущена из оболочки tmux command [args]. Это делает его очень простым в написании сценариев, а также облегчает выполнение сложных команд.
  • Гораздо точнее автоматическое переименование окон. Хотя screenустанавливает заголовок на основе первого слова команды и требует настройки оболочки, чтобы сделать это даже в окне оболочки, tmuxотслеживает, какие процессы фактически выполняются в каждом окне, и соответственно обновляет заголовок. Таким образом, вы получаете динамическое переименование с любой оболочкой и нулевой конфигурацией. Например: допустим, вы работаете с Z Shell; имя окна будет "zsh". Теперь предположим, что вы хотите отредактировать некоторый файл конфигурации, поэтому вы печатаете sudo emacs /etc/somefile. Пока sudo запрашивает ваш пароль, имя окна будет «sudo», но как только вы это сделаете и sudoзапустите emacs, заголовок будет «emacs». Когда вы все сделали, и вы выходитеemacsназвание изменится обратно на "zsh". Это очень полезно для отслеживания окон, а также может быть особенно полезно в определенных ситуациях, например, если у вас есть какой-то длительный процесс в другом окне, который иногда запрашивает ввод с помощью dialog; имя окна изменится на «диалог», когда это произойдет, так что вы будете знать, что вам нужно переключиться на это окно и что-то сделать.
  • Более приятная обработка сессии (ИМХО). Вы можете сделать намного больше с сессиями внутри tmuxсебя. Вы можете легко переключаться, переименовывать и т. Д., И вы можете перемещать и обмениваться окнами между сеансами. Он также имеет другую модель, где у каждого пользователя есть сервер, который контролирует его / ее сеансы и к которому клиент подключается. Недостатком этого является то, что в случае сбоя сервера вы потеряете все; У меня никогда не было сбоев сервера.
  • tmuxкажется, более активно развивается. Обновления происходят довольно часто, и вы можете подать отчет об ошибке или запрос функции в соответствии с этим FAQ и получить ответ в течение нескольких дней.

Это только основные вещи, которые сразу приходят на ум. Есть и другие мелочи, и я уверен, что забыл кое-что. tmuxХотя , безусловно, стоит попробовать.

qmega
источник
151
Разработка tmux более активна, потому что она нова . Экрану GNU почти 25 лет , поэтому они исправили большинство ошибок.
платный ботаник
8
Комментарий платного ботаника - очень важная характеристика вашего последнего замечания. И второй пункт, как указано, на самом деле не является разницей, поскольку он относится и к экрану, если вы не можете быть более конкретным.
jw013
14
@a платный ботаник: techrepublic.com/blog/opensource/is-tmux-the-gnu-screen-killer/…
sjas
11
@apaidnerd это очень богатое утверждение: savannah.gnu.org/bugs/…
Блажей Михалик
93

( Сеансы - это коллекции окон, которые можно отсоединить и подключить позже. Окна могут содержать одну или несколько панелей . Например, конфигурации, посмотрите здесь и здесь .)

tmux

  • Pros
    • Может отправлять ключи на другие панели, вроде IDE
    • Простые сочетания клавиш - с правильной конфигурацией вы будете чувствовать себя как дома с Vim или Screen
    • Встроенные привязки Vim-ish и Emacs-ish
    • Хорошее управление компоновкой, очень похоже на менеджер окон
    • Unicode, похоже, просто работает с современными терминалами
    • Некоторые проблемы с терминалом исправлены с помощью TERM=tmux
  • Cons
    • Slow - уверены , почему, но нажатия клавиш , кажется лага Нет больше проблем с медлительностью
    • Мультиплексирование приводит всю ширину и высоту сеанса к наименьшему присоединенному терминалу.
    • Несколько раз падал в Mac OS X, теряя весь сеанс
    • Сбой в Linux после обновления, когда я не смог подключиться к своей старой сессии
    • Время от времени пропускает нажатия клавиш - ^A ^[несколько раз для режима копирования
    • Невозможно переместить панель из одного окна в другое. Исправлено join-paneкомандой
    • Никакая развертка линии (или «перекомпоновка» или «перемотка») после изменения ширины терминала (изменение размера окна)

Экран GNU

  • Pros
    • Чрезвычайно стабильный (v1.0 был в 1987 году)
    • Некоторые проблемы с терминалом исправлены с помощью TERM=screen
    • Встроенные привязки Emacs-ish
    • Легко перемещать и контролировать горизонтальные панели
    • При мультиплексировании любой подключенный терминал может изменять размер панели
  • Cons
    • Нет вертикальных расколов без патча (кроме Ubuntu)
    • Расколы панели теряются при отсоединении
    • Чтобы заставить работать Unicode, нужно немного изящества и решимости
    • Сумасшедшая конфигурация строки состояния
платный ботаник
источник
Замедленные нажатия клавиш выполняются только при нажатии клавиши Esc? У tmux есть задержка, когда он ждет, чтобы увидеть, вводите ли вы последовательность xterm или просто одиночный Esc, и в сочетании с vim, это может показаться довольно медленным. Установите время выхода на более низкое значение, например, 50.
Eevee
Также забавно, что вы говорите ^A ^[, иногда не работает; У меня такая же проблема с экраном, но никогда tmux! И я верю, что вы можете перемещать панели с join-pane.
Eevee
Я считаю, что экран использует гораздо больше памяти, что может быть недостатком.
paradroid
6
Что ж, tmuxотстой vim, в некоторых случаях (в частности, у меня) ни одно решение, нигде не опубликованное, не работает, и даже люди, потратившие некоторое время на решение моей проблемы, не смогли. Это раздражает, когда вы не можете использовать <C-Left>и <C-Right>внутри vim.
лет»
3
No vertical splits without patch (except on Ubuntu)Я не думаю, что это правда. Я использую screen уже несколько лет, и у меня никогда не было проблем с разделением по горизонтали или вертикали в Debian и Fedora. Даже на Android с Termux это работает как шарм.
Форивин
12

Профи для экрана: он доступен в значительной степени из коробки на Linux и Solaris. Когда вам приходится переключаться между платформами назад и вперед, хорошо не переключать ментальный контекст.

Я уверен, что вы можете скомпилировать tmux на любой платформе, но иногда у вас достаточно доступа для использования экрана, но реальные системные администраторы не хотят добавлять программное обеспечение, которое не является абсолютно необходимым.

Джастин
источник
10

Я использую tmux уже около 2 дней, так что мой безудержный энтузиазм по поводу этого еще не умерился от попадания надоедливых вариантов использования. При прохождении обычной растущей боли перехода от одной программы к другой, я был поражен несколькими положительными особенностями, но особенность, которая заставляет меня верить, что я никогда не вернусь к экрану, - это утилита режима copy-n-paste. На экране вы не можете войти в режим копирования, прокрутить назад в буфер, а затем перейти в другое окно. В tmux у вас может быть несколько окон одновременно в режиме копирования с прокруткой буфера обратно в разные позиции. Также есть несколько буферов копирования. И вам не нужно исправлять источник, чтобы получить движение курсора FFTT.

Уильям Перселл
источник
8

Вещи, которые я получаю из tmux, я не могу легко увидеть на экране:

  1. сделать вертикальное разделение панели
  2. мультиплексирование, которое мы используем для удаленного и локального сопряжения.
Джед Шнайдер
источник
7
Разве экран-xacladd
пул
Как упоминалось в предыдущем посте, экран имеет вертикальные разбиения панели (очевидно, требуется патч без Ubuntu). Также мультиплекс работает нормально и работает уже много лет.
EntangledLoops
вертикальные расщепления были в основном screenс 4.2, выпущенной в 2014 году. Многие дистрибутивы поставляют очень старые версии, особенно Apple.
Нил Фульц
2
Обе точки неверны.
Форивин
2
Ответ неверен в 2018 году
Алек Истомин
5

Я заменял GNU Screen на tmux во всех случаях, кроме одного - когда мне нужен эквивалент HyperTerminal для подключения к последовательным портам. Как отметил Аарон Топонсе в своей статье «Подключение к последовательным нуль-модемам с экраном GNU» , часто задаваемые вопросы по tmux гласят :

экран имеет встроенный последовательный порт и поддержку telnet; это вздор и вряд ли будет добавлен в tmux.

Мой типичный пример использования tmux - создание многопанельных и многооконных сеансов разработки в сочетании с tmuxinator . Если вы хотите изучать tmux , я рекомендую приобрести книгу Брайана П. Хогана, tmux: Продуктивная разработка без мышки .

Мэтью Ранкин
источник
Знаете ли вы, cu вызвать другую систему ? Проще серийный tty чем экран , но легкий и полезный!
Ф. Хаури
2

Я долгое время активно пользовался Screen, но я использую версию, которую я изменил еще в 2002 году. Главным образом потому, что я хотел, чтобы окно навигации «следующий / предыдущий» соответствовало порядку, в котором новый были созданы окна, похожие на оконный менеджер листов, такой как i3 или Ion . Стандартное поведение экрана заключается в том, что «next» и «prev» идут по номеру окна, поэтому обычно «новое» окно (захватывая наименьшее доступное число) будет располагаться в другом месте, чем «следующее» окно - сбивая с толку, если вы не не помню цифры. С тех пор мое предпочтительное поведение было реализовано в Tmux как флаг для команды new-window в 2010 году , а опция renumber-windows - в 2012 году., Мой патч Screen, который я пытался сделать как можно более приемлемым, включая добавление документации и т. Д., Не вызвал никаких обсуждений в списке Screen в июле 2002 года (тогда «screen@informatik.uni-erlangen.de» не может найти архивы). На самом деле это даже не было признано, даже когда я отправил его через год.

С 2002 года я несколько раз «перебирал» свой патч, чтобы применить его к более новым версиям Screen. Однако, когда я добрался до версии 4.3 (2015), я заметил недокументированное изменение, которое нарушило одно из моих применений экрана - а именно, что «вещи» теперь интерполируют переменные среды . Мне не нужна была эта функция, и я не мог понять, как легко избежать аргумента для «вещи» (чтобы я мог отправлять текст, содержащий знаки доллара), поэтому я просто продолжал использовать версию 4.0 (с 2004 года).

Я использую Screen 'stuff' ('send-keys' в Tmux) в функции Emacs, которая отправляет содержимое текущей области Emacs на определенный номер окна. Таким образом, когда я пишу код на языке сценариев, я открываю интерпретатор, присваиваю окну интерпретатора специальный номер, а затем могу отправлять строки кода из окна редактора непосредственно в окно интерпретатора, используя эту привязку Emacs. Это хакерство, но мне оно нравится больше, чем в чистом Emacs-решении , поскольку я также могу взаимодействовать с интерпретатором в его окне Screen с помощью стандартных нажатий клавиш. Это немного похоже на GUI IDE, но мне не нужно использовать мышь или смотреть на мигающий курсор.

Еще одна функция, которую я реализовал в своем патче, - это возможность «пометить» окно, а затем изменить положение помеченного окна, чтобы оно было «следующим» после текущего. Для меня это гораздо более естественный способ переупорядочения окон, чем перенумерация; это похоже на парадигму копирования / вставки или «перетаскивание». ( Недавно я понял, как это сделать в i3 .)

В Tmux должно быть возможно сделать то же самое, например, с 2015 года есть возможность «пометить» панель. Или, может быть, более простое решение может быть разработано с помощью сценариев оболочки с сохранением состояния. Я реализовал короткий скрипт и привязку клавиш, чтобы попробовать метод «отмеченная панель», и он работал несколько раз, но затем Tmux потерпел крах с «[потерянный сервер]». Потом я обнаружил, что Tmux рушится, даже не пытаясь сделать что-то сложное. Видимо , это был сбой для некоторых пользователей на несколько лет , по крайней мере . Иногда происходит сбой сервера, иногда он начинает использовать 100% ЦП и перестает отвечать на запросы. Я никогда не видел, чтобы Screen делал что-либо из этого.

Теоретически, Tmux превосходит Screen по нескольким причинам. У него гораздо лучшая возможность написания сценариев, что означает, что вы можете делать такие вещи, как запрос списка окон в текущем сеансе из командной строки, что невозможно с Screen. Например, в 2015 году на экран добавлена ​​команда «Сортировать окна по заголовку» . Я не уверен, когда такая специализированная команда будет полезна, но этот и более практичные варианты (например, сортировка окон по загрузке процессора) можно относительно легко сделать из сценария оболочки в Tmux. Мне было бы трудно сделать что-то настолько креативное в Screen, по крайней мере, без изменения кода на Си.

Как упоминалось в других постерах, у Tmux есть модель с одним сервером, которую я вижу в качестве основного недостатка, особенно при сбое сервера. Это можно обойти, указав отдельный сокет для каждой «сессии». Тем не менее я предпочитаю Screen по умолчанию один сервер на сеанс, который кажется немного более элегантным.

Работа с кодом Screen в 2002 году была для меня познавательной и приятной. Как ни странно, для всех своих дополнительных функций Tmux имеет примерно на 25% меньше строк кода, чем Screen (30k против 40k). Я заметил, что Tmux использует много древовидных и списочных структур данных, которые мне было немного трудно понять. Экран, казалось, предпочел массивы.

Насколько я понимаю, поскольку интерфейс терминала Unix настолько стабилен, нет необходимости адаптировать код Screen или Tmux к изменениям в базовой операционной системе. Эти программы на самом деле не имеют обновлений безопасности, таких как веб-браузеры или веб-серверы или даже оболочка. Я не заметил проблем с запуском моей пользовательской версии Screen, последнее обновление которой было в 2004 году (за исключением необходимости добавления некоторых файлов конфигурации, чтобы предотвратить удаление сокета Systemd; в любом случае эти файлы обычно являются частью дистрибутива). Возможно, я мог бы просто обойти проблемы, с которыми я столкнулся в Tmux, запустив версию Tmux до того, как она начала падать. Конечно, если достаточное количество пользователей сделает это, это будет не очень хорошо для новых пользователей, поскольку это означает, что меньшее количество экспертов будет искать ошибки в последних официальных версиях этих программ. Однако трудно мотивировать себя перейти на продукт, который нестабилен для меня (последний Tmux) или в котором отсутствуют определенные функции, которые мне нужны (стандартный экран).

Я знаю, что это не дает простого ответа на вопрос ОП, но я надеюсь, что моя точка зрения была полезной.

Метаморфические
источник
2

Один из сопровождающих tmux, Томас Адам, также указан в качестве сопровождающего screenпроекта, хотя он касается только кода tmux. Это огромный профессионал Tmux над экраном.

ninrod
источник
1

Я бы сказал, что доступность экрана - это его сильная сторона, но его оконная система не так проста в обращении, как у . Должен сказать, что в настоящее время я использую большую часть времени, и в результате вместо окон экрана появляется множество вкладок терминала.

@ Джед Шнайдер: Вы можете получить вертикальное разделение панели с помощью Ctrl+ Aи затем |(вертикальная черта).

Taft
источник