tmux vs. екран


262

Я збираюся повернутися до використання GNU Screen , але я чую, що люди періодично згадують tmux як кращу альтернативу. Чи дійсно вона пропонує альтернативу всім можливостям, що пропонуються на екрані , наприклад, моніторингу активності в різних вікнах тощо? Які плюси і мінуси у кожного?



2
На екрані ви можете відправляти команди на доданий сеанс через screen -S automate_me -X stuff 'command'$(echo -ne '\015')не в tmux. Дуже корисно, якщо ви тестуєте ISO / image virtualbox і вам потрібно швидко виконувати деякі команди. Наприклад, у мене є команда 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; Ім'я вікна зміниться на "діалогове", коли це сталося, тож ви знаєте, що вам потрібно перейти до цього вікна і щось зробити.
  • Приємніша робота з сеансами (IMHO). З сеансами всередині tmuxсебе можна зробити набагато більше . Ви можете легко перемикатися, перейменовувати тощо, а також можете переміщувати та ділитися вікнами між сеансами. Він також має іншу модель, де кожен користувач має сервер, який контролює його / її сеанси і до якого підключається клієнт. Мінус цього полягає в тому, що якщо сервер виходить з ладу, ви втрачаєте все; У мене ніколи не було збоїв на сервері.
  • tmuxздається, більш активно розвиваються. Є оновлення досить часто, і ви можете подати звіт про помилку або запит на функцію відповідно до цього FAQ і отримати відповідь протягом декількох днів.

Це лише основні речі, які негайно приходять в голову. Є й інші дрібниці, і я впевнений, що деякі речі забуваю. Це, безумовно, варто tmuxспробувати.


151
tmux розробка більш активна, тому що вона нова . Екрану GNU майже 25 років , тому вони виправили більшість помилок.
платний ботанік

8
коментар з оплаченим ботаніком - це дуже важлива кваліфікація вашого останнього пункту. І другий момент, як заявлено, насправді не є різницею, оскільки він стосується і екрана, якщо ви не можете бути більш конкретними.
jw013


11
@apaidnerd це дуже насичена заява: savannah.gnu.org/bugs/…
Błażej Michalik

93

( Сеанси - це колекції вікон, які можна від'єднати і повторно встановити пізніше. Windows може містити одну або більше панелей . Наприклад, конфігурації, перегляньте тут і тут .)

tmux

  • Плюси
    • Може надсилати ключі на інші панелі, схожі на IDE
    • Прості вкладки клавіш - за допомогою правильної конфігурації ви відчуєте себе як вдома від Vim або Screen
    • Вбудовані вкладиші Vim-ish та Emacs-ish
    • Хороше управління компонуванням, дуже схоже на менеджера плиткових вікон
    • Unicode, здається, просто працює з сучасними терміналами
    • Виправлені деякі проблеми з терміналом TERM=tmux
  • Мінуси
    • Повільний - не впевнений чому, але натискання клавіш здається млявим. Більше проблем із повільністю немає
    • Мультиплексування примушує всю ширину та висоту сеансу до найменшого приєднаного терміналу
    • Неодноразово виходив з ладу на Mac OS X, втрачаючи весь сеанс
    • Помилка в Linux після оновлення, де я не зміг підключитися до старого сеансу
    • Іноді пропускає команду натискання клавіш - ^A ^[потрібен кілька спроб режиму копіювання
    • Неможливо перемістити область з одного вікна в інше Виправлено за допомогою join-paneкоманди
    • Немає розгортання рядка (або "reflow" або "rewrap") після зміни ширини терміналу (зміна розміру вікна)

Екран GNU

  • Плюси
    • Надзвичайно стабільний (v1.0 був у 1987 році)
    • Виправлені деякі проблеми з терміналом TERM=screen
    • Вбудовані вкладиші Emacs-ish
    • Легке переміщення та керування горизонтальними панелями
    • Під час мультиплексування будь-який приєднаний термінал може змінити розмір області
  • Мінуси
    • Без вертикальних розщеплень без патча (крім Ubuntu)
    • Розщеплення панелі втрачається при від'єднанні
    • Початок роботи Unicode вимагає певної витонченості та рішучості
    • Божевільна конфігурація рядка статусу

Чи мляві натискання клавіш лише при натисканні клавіші Esc? tmux має затримку, де він чекає, якщо ви вводите xterm послідовність або просто одинокий Esc, і в поєднанні з vim's, це може здатися досить млявим. Встановіть час втечі на нижче значення, як 50.
Eevee

Також смішно, ви говорите, ^A ^[що іноді не працює; У мене така ж проблема з екраном, але ніколи не tmux! І я вірю, що ви можете переміщати панелі навколо join-pane.
Eevee

Я вважаю, що екран використовує набагато більше пам’яті, що може бути включено як недолік.
парадороїд

6
Ну, tmuxсмокче з vim, а в деяких випадках ( у мене саме), ніякого рішення ніколи не відповідало де - небудь працює, і навіть люди витрачають деякий час на вирішення питання про шахту не змогло. Це дратує, коли ви не можете використовувати <C-Left>та <C-Right>входити vim.
йо

3
No vertical splits without patch (except on Ubuntu)Я не думаю, що це правда. Я використовую екран уже кілька років, і у мене ніколи не виникало жодних проблем, що розділялися по горизонталі чи вертикалі на Debian і Fedora. Навіть на Android з Termux це працює як шарм.
Форівін

11

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

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


10

Я використовую tmux вже близько 2 днів, тож нестримний ентузіазм до цього ще не був приборканий ударами на дратівливі випадки використання. Під час переживання звичайних зростаючих болів при переході від однієї програми до іншої, мене вразило кілька позитивних особливостей, але ця функція, за якою я вважаю, що я ніколи не повернусь до екрана, - це корисність режиму копію-n-вставки. На екрані ви не можете перейти в режим копіювання, прокрутіть назад у буфері і перейдіть до іншого вікна. У tmux ви можете мати кілька вікон одночасно в режимі копіювання, коли буфер прокручується назад до різних позицій. Також є кілька буферів для копіювання. І вам не потрібно виправляти джерело, щоб отримати рух курсору fFtT.


8

Те, що у мене виходить із tmux, я не легко отримую на екрані:

  1. зробити вертикальні розбиття панелі
  2. мультиплексування, яке ми використовуємо для віддаленого та локального сполучення.


Як згадується в попередньому дописі, екран має розбиття вертикальної панелі (мабуть, потрібен патч без 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

Я довгий час був важким користувачем екрана, але використовую версію, яку я змінив ще в 2002 році. Переважно тому, що хотів мати змогу вікно "next / prev" навігаційного замовлення збігатися з тим, у якому новий були створені вікна, схожі на керуючий плиткою вікон, як i3 або Ion . Стандартна поведінка екрана полягає в тому, що "наступний" і "попередній" мають перейти за номером вікна, так що зазвичай "нове" вікно (захоплюючи найменше доступне число) буде розташоване в іншому місці, ніж "наступне" вікно - заплутане, якщо ви не будете " t запам’ятати числа. Моя бажана поведінка з тих пір була впроваджена в Tmux як прапор команди new window у 2010 році , а варіант переномери Windows - у 2012 році. Мій патч на екрані, який я намагався зробити максимально прийнятним, включаючи доповнення до документації тощо, в липні 2002 року не викликав жодної дискусії у списку екранів (тоді "screen@informatik.uni-erlangen.de", не може знайти архіви). Насправді його навіть не визнали, навіть коли я знову надіслав його через рік.

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

Я використовую "речі" екрану ("клавіші відправки" в Tmux) у функції Emacs, яка надсилає вміст поточної області Emacs на певний номер вікна. Таким чином, коли я пишу код на мові скриптів, відкриваю інтерпретатора, надаю спеціальному номеру вікна інтепретера, а потім можу надсилати рядки коду з мого вікна редактора безпосередньо у вікно інтерпретатора, використовуючи цю прив'язку Emacs. Це хакі, але мені це подобається краще, ніж чисте рішення Emacs , оскільки я також можу взаємодіяти з інтерпретатором у його вікні Screen, використовуючи стандартні натискання клавіш. Це трохи схоже на ID графічного інтерфейсу, але мені не потрібно користуватися мишею або дивитися на миготливий курсор.

Ще одна особливість, яку я реалізував у своєму патчі, - це можливість "позначити" вікно, а потім переставити позначене вікно на "наступне" після поточного. Для мене це набагато природніший спосіб упорядкування вікон, ніж перенумерування; це як парадигма копіювання / вставки або "перетягування". ( Нещодавно я зрозумів, як це зробити в i3 .)

У Tmux має бути можливість зробити те саме, наприклад, станом на 2015 рік є програма для "маркування" панелі. Або, можливо, більш елементарне рішення могло б бути розроблено зі стаціонарними скриптами оболонки. Я реалізував короткий сценарій та прив'язки клавіш, щоб спробувати метод "позначеної панелі", і він працював кілька разів, але потім Tmux зазнав аварії з "[загубленим сервером]". Тоді я виявив, що Tmux розбився, навіть не намагаючись зробити щось складне. Мабуть , це був збій для деяких користувачів на кілька років , по крайней мере . Іноді сервер виходить з ладу, іноді він починає використовувати 100% процесора і стає безвідповідальним. Я ніколи не бачив, щоб Screen робив щось із цього.

Теоретично Tmux перевершує Екран кількома способами. Він має набагато кращу можливість написання, це означає, що ви можете робити такі запити, як запит на список вікон у поточному сеансі з командного рядка, що неможливо з Screen. Наприклад, у 2015 році Екран додав команду "сортувати вікна за назвою" . Я не впевнений, коли така спеціалізована команда була б корисною, але це та більш практичні варіанти (наприклад, сортування вікон за використанням процесора) можна було відносно легко зробити із скрипту оболонки в Tmux. Мені здається складно зробити щось так креативне в Screen, принаймні, не змінюючи код C.

Як згадували інші афіші, Tmux має односерверну модель, яку я бачу як основний недолік, особливо коли сервер виходить з ладу. Можна обійти це, вказавши окремий розетку для кожного "сеансу". Тим не менш, я віддаю перевагу екрану за замовчуванням на один сервер на сеанс, який здається трохи більш елегантним.

Робота з екранним кодом ще в 2002 році була для мене навчальною і приємною. Як не дивно, за всіма своїми додатковими функціями Tmux має приблизно на 25% менше рядків коду, ніж Екран (30 к проти 40 к). Я помітив, що Tmux використовує багато структур даних про дерева та списки, які мені було трохи важко зрозуміти. Екран, здавалося, віддав перевагу масивам.

Як я розумію, оскільки термінальний інтерфейс Unix є настільки стабільним, для екранного або Tmux-коду мало потреби адаптуватись до змін базової операційної системи. Ці програми насправді не мають оновлень безпеки, таких як веб-браузери чи веб-сервери чи навіть оболонка. Я не помічав жодних проблем із застосуванням власної користувальницької версії екрана, востаннє оновленої у 2004 році (за винятком того, що потрібно додати деякі файли конфігурації, щоб Systemd не видаляв сокет; ці файли, як правило, є частиною пакету розповсюдження). Можливо, я міг би просто подолати проблеми, з якими стикався в Tmux, запустивши версію Tmux, перш ніж вона почала виходити з ладу. Звичайно, якщо для цього достатньо користувачів, це не буде дуже добре для нових користувачів, оскільки це означає, що в останніх офіційних версіях цих програм менше експертів шукатиме помилки. Однак важко мотивувати себе перейти на нестабільний для мене продукт (останній Tmux) або який не має певних функцій, які я хочу (стандартний екран).

Я знаю, що це не дає простої відповіді на питання ОП, але я сподіваюся, що моя точка зору була корисною.


2

Один із підтримуючих tmux, Томас Адам, також вказаний в якості підтримуючого screenпроекту, хоча він торкається лише коду tmux. Це величезна професійна програма tmux через екран.


1

Я б сказав, що доступність екрана - це його сила, але система його вікон не така проста в обробці, як . Треба сказати, що я зараз користуюся і в результаті маю безліч термінальних вкладок замість екрану Windows.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.