Які ще способи поділитися сеансом tmux між двома користувачами?


106

Я шукаю чистий і простий спосіб поділитися сеансом tmux з іншим користувачем на тій же машині. Я випробував цю -S socket-pathопцію, але вона потребує відкриття всіх дозволів шляху socket, перш ніж хтось інший зможе підключитися до сеансу. Це працює, але це трохи громіздко. Наприклад:

# Me
$ tmux -S /tmp/pair
$ chmod 777 /tmp/pair

# Another user
$ tmux -S /tmp/pair attach

Це працює, але зараз обидва користувачі мають однакову конфігурацію tmux (конфігурація користувача, який ініціював сеанс). Чи є спосіб дозволити двом користувачам використовувати власний конфігурацію tmux та свої власні індивідуальні прив’язки ключів tmux?

Що стосується бонусних очок, в ідеалі також було б непогано надати доступ до сеансу tmux для читання лише іншим користувачам.


10
Я занадто ледачий, я просто використовую ваше запитання як свою відповідь: D
phunehehe

Відповіді:


46

З https://github.com/zolrath/wemux :

wemux розширює tmux, щоб зробити мультиплексування багатокористувацького терміналу простішим та потужнішим. Це дозволяє користувачам розміщувати сервер wemux і приєднувати клієнтів до будь-якого:

Дзеркальний режим надає клієнтам (іншому користувачеві SSH на вашій машині) доступ лише до читання до сеансу, дозволяючи їм бачити вашу роботу, або

Парний режим дозволяє клієнту і вам працювати в одному терміналі (спільний курсор)

Режим Rogue дозволяє клієнтові пари або працювати самостійно в іншому вікні (окремі курсори) в рамках того ж сеансу tmux.

Він має підтримку з декількома серверами, а також список користувачів та сповіщення, коли користувачі додають / відключають.

Це оболонка оболонки над tmux - компілювання не потрібно.


16

Я спробував це на Ubuntu, але не розумію, чому він не працюватиме на інших версіях unix.

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

Замість того, щоб змінювати дозволи доріжки socket щоразу, коли ви створюєте один, ви можете створити певний каталог для сокетів (я використовував / var / tmux).

Спочатку додайте групу для користувачів tmux

$ addgroup $TMUX_GROUP

Створіть каталог із групою, встановленою на $ TMUX_GROUP, і використовуйте встановлений біт, щоб у файлах, створених у каталозі, автоматично було встановлено групу $ TMUX_GROUP.

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

Далі переконайтеся, що користувачі, які хочуть поділитися сеансом, є членами $ TMUX_GROUP

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2

2
Якщо у вас є файлова система, яка підтримує ACL , вам не потрібно використовувати групу (і, зокрема, вам не потрібна коренева інтервенція). Але це не вирішує питання спільного використання конфігурації tmux , чи не так?
Жиль

3
Щоб створити розділяється Sesion: tmux -S $TMUX_GROUP/shared-session. Щоб прикріпити його до іншого облікового запису:tmux -S $TMUX_GROUP/shared-session attach
jfs

Коментар вище (автор @JFSebastian) повинен бути частиною відповіді. Запропонована установка в порядку, але відповідь не відповідає, коли пояснюється, як реально її використовувати. І на всі відповіді на цій сторінці ця відповідь найкраще вирішує проблему.
Д-р Беко

12

Наскільки мені відомо, не можна ділитися сесіями з іншими користувачами «чисто».

Також доступ не доступний лише для читання, якщо клієнт не використовує -rкомутатор.

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

Рішення для екрана :

Ведуча сесії:

  • Необхідно встановити біт екрану SUID : - /
  • Відкрийте сеанс за допомогою screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Приєднуйтесь до сесії:

  • screen -x username/sessionname

Ви можете встановити біти дозволу для користувача (* для всіх) за допомогою :aclchgабо :chacl. # додане вплине на вікна,? додані вплинуть на команди.

Приклади:

  • :aclchg * -wx "#,?" встановить дозволи сеансу читати лише для всіх користувачів
  • :aclchg foo +w 2 надасть доступ до запису для користувача foo у вікні 2
  • :aclchg bar +x detach надасть дозвіл на від'єднання сеансу до панелі користувача

Зважаючи на те, що це варто, я вважаю, що рішення tmux (хоча трохи більш багатослівне) насправді "чистіше", оскільки воно не передбачає залишення встановлених бінарних файлів, що плавають навколо файлової системи.
Гліф

На жаль, tmux, який використовується цим способом, має проблеми із безпекою: ті, кому ви надаєте доступ, можуть легко створювати нові сеанси і робити в них речі, які ви не бачите.
Керт Дж. Сампсон

9

Це не виключно для tmux, але зараз це те, що я використовую:

Ви можете використовувати script -f /path/to/some/fileдля запису термінального сеансу у файл. -fОпція оновлює файл при введенні.

Хтось інший (якщо ви хочете лише дозволити читання файлу, якщо ви хочете) може зробити tail -fцей файл, ваш термінальний сеанс. Цей -fпараметр дозволяє tailвиводити все, що додається.

Поєднання двох "синхронізує" подання терміналу. Якщо використовується з tmux, він також має перевагу уникнути зміни розміру, що відбувається, коли обоє користувачів мають різну роздільну здатність. Ще одна особливість полягає в тому, що кожен користувач може працювати в іншому приватному вікні або сеансі.

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

Це не дозволяє записувати на термінал один одного (можливо, для цього можна додати якесь інше рішення).

Мені подобається мати вікно з двома панелями: одна панель працює script -fдля мого однолітка, а інша біля неї, де я tail -fтермінал.

Він також працює в ttys (і розетки або названі труби також можуть використовуватися для файлу)


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