it-swarm-ru.tech

Каковы другие способы разделения сеанса tmux между двумя пользователями?

Я ищу простой и понятный способ поделиться сеансом tmux с другим пользователем на той же машине. Я пробовал -S socket-path, но для этого требуется открыть все разрешения пути сокета, прежде чем кто-либо еще сможет подключиться к сеансу. Это работает, но это немного громоздко. Например:

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

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

Это работает, но оба пользователя теперь используют одну и ту же конфигурацию tmux (конфигурацию пользователя, инициировавшего сеанс). Есть ли способ позволить двум пользователям использовать их собственную конфигурацию tmux и их собственные индивидуальные привязки ключей tmux?

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

112
Ryan McGeary

От https://github.com/zolrath/wemux :

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

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

Парный режим позволяет клиенту и вам работать в одном терминале (общий курсор)

Rogue Mode позволяет клиенту подключаться или работать независимо в другом окне (отдельных курсорах) в одном сеансе tmux.

Он имеет поддержку нескольких серверов, а также список пользователей и уведомления, когда пользователи присоединяются/отсоединяются.

Это оболочка для оболочки через tmux - компиляция не требуется.

48
Peter

Я пробовал это на Ubuntu, но не понимаю, почему это не будет работать на других вариантах Unix.

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

Вместо того, чтобы менять разрешения пути к сокету при каждом его создании, вы можете создать специальный каталог для сокетов (я использовал/var/tmux).

Сначала добавьте группу для пользователей tmux

$ addgroup $TMUX_GROUP

Создайте каталог с группой, установленной в $ TMUX_GROUP, и используйте бит setgid, чтобы для файлов, созданных в каталоге, автоматически была установлена ​​группа в $ 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
17
Stephen Paulger

Насколько я знаю, невозможно делиться сессиями с другими пользователями "чистым" способом.

Также доступ только для чтения невозможен, если клиент не использует -r переключатель.

Поскольку другой оконечный мультиплексор screen поддерживает функции, которые вы ищете, к сожалению, также громоздко ... Я не уверен, если это вариант для вас, но, возможно, кто-то другой найдет это полезным ,.

Решение для экран:

Провести сеанс:

  • 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 даст разрешение на отключение сеанса от панели пользователя.
12
echox

Это не только для tmux, но сейчас я использую:

Вы можете использовать script -f /path/to/some/file Для записи сеанса терминала в файл. Параметр -f Обновляет файл во время ввода.

Кто-то другой (если хотите, только с правами на чтение файла) может сделать tail -f, Чтобы увидеть файл, ваш терминальный сеанс. Опция -f Выводит tail все, что будет добавлено.

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

Одно потенциальное неудобство заключается в том, что некоторые команды (например, основанные на ncurses) могут делать странные вещи с выводом, а также escape-последовательности (цвета). Тем не менее, я использую это внутри tmux, и кажется, что tmux решает эти проблемы. Я вижу, как другой пользователь читает справочные страницы и использует другие команды для создания буферов, цвета отображаются правильно и т.д.

Это не позволяет писать в терминалы друг друга, хотя (возможно, для этого может быть добавлено другое решение).

Мне нравится иметь окно с двумя панелями: одна панель запускает script -f Для моего партнера, а другая рядом с ней, где я tail -f Это терминал.

Он также работает в ttys (и сокеты или именованные каналы могут быть использованы для файла)

11
ferhtgoldaraz