在两个用户之间共享 tmux 会话的其他方法是什么?

Rya*_*ary 124 users tmux

我正在寻找一种干净简单的方法来与同一台机器上的另一个用户共享 tmux 会话。我已经尝试过这个-S socket-path选项,但它需要在其他人可以连接到会话之前打开套接字路径的所有权限。它有效,但有点麻烦。例如:

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

# Another user
$ tmux -S /tmp/pair attach
Run Code Online (Sandbox Code Playgroud)

这有效,但两个用户现在共享相同的 tmux 配置(发起会话的用户的配置)。有没有办法允许两个用户使用他们自己的 tmux 配置和他们自己的个人 tmux 键绑定?

对于奖励积分,理想情况下,将 tmux 会话的只读访问权限提供给其他用户也很好。

小智 54

来自https://github.com/zolrath/wemux

wemux 对 tmux 进行了增强,使多用户终端多路复用更容易、更强大。它允许用户托管一个 wemux 服务器并让客户端加入:

镜像模式为客户端(您机器上的另一个 SSH 用户)提供对会话的只读访问权限,允许他们看到您的工作,或者

配对模式允许客户端和你自己在同一个终端上工作(共享光标)

流氓模式允许客户端在同一个 tmux 会话中的另一个窗口(单独的光标)中配对或独立工作。

它具有多服务器支持以及用户列表和用户连接/分离时的通知。

它是 tmux 上的 shellscript 包装器 - 无需编译。

  • 遗憾的是,在 2021 年 4 月,这似乎是废弃软件。 (4认同)
  • 所以,当我说“放弃软件”时,我的意思是 27 个 GitHub 问题没有得到解决,9 个拉取请求没有被评论,距离上次更新已经 6 年了。基于这里的定义:https://en.wikipedia.org/wiki/Abandonware 我认为这个 repo 的软件符合标准。:) 干杯。 (2认同)

小智 22

我已经在 Ubuntu 上尝试过这个,但不明白为什么它不能在其他 unix 变体上工作。

如果两个用户都是公共组的成员,并且套接字路径使用该组,则两个用户都可以正常连接。

不必每次创建套接字路径时都更改其权限,您可以为套接字创建一个特定目录(我使用了 /var/tmux)。

首先为tmux用户添加一个组

$ addgroup $TMUX_GROUP
Run Code Online (Sandbox Code Playgroud)

创建一个目录,组设置为 $TMUX_GROUP 并使用 setgid 位,以便在目录中创建的文件自动将组设置为 $TMUX_GROUP。

$ mkdir /var/tmux
$ chgrp $TMUX_GROUP /var/tmux
$ chmod g+ws /var/tmux
Run Code Online (Sandbox Code Playgroud)

接下来确保要共享会话的用户是 $TMUX_GROUP 的成员

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2
Run Code Online (Sandbox Code Playgroud)

现在您创建一个共享会话

$ tmux -S /var/tmp/shared-session
Run Code Online (Sandbox Code Playgroud)

并从另一个帐户附加到它

$ tmux -S /var/tmp/shared-session attach 
Run Code Online (Sandbox Code Playgroud)

  • 创建共享会话:`tmux -S $TMUX_GROUP/shared-session`。从另一个帐户附加到它:`tmux -S $TMUX_GROUP/shared-session attach` (5认同)
  • 如果您的文件系统支持 [ACL](http://en.wikipedia.org/wiki/Access_control_list),则不需要使用组(特别是不需要任何 root 干预)。但这并不能解决共享 tmux *configuration* 的问题,是吗? (2认同)
  • 上面的评论(@JFSebastian)应该是答案的一部分。建议的设置没问题,但在解释如何真正使用它时答案不足。对于本页中的所有答案,此答案是更好地解决问题的答案。 (2认同)
  • 我使用 `tmux -S $TMUX_GROUP/shared-session` 没有成功(“丢失服务器),但使用 `tmux -S /var/tmux/shared-session` 成功(注销并重新登录后) (2认同)

fer*_*raz 13

这不是 tmux 独有的,但现在我正在使用它:

您可以使用script -f /path/to/some/file将终端会话写入文件。该-f选项会在您键入时更新文件。

其他人(如果需要,只有对文件的读取权限)可以tail -f查看该文件,即您的终端会话。该-f选项可以tail输出任何附加的内容。

两者结合“同步”一个终端的视图。当与 tmux 一起使用时,它还具有避免在两个用户具有不同分辨率时发生的调整大小的优点。另一个特点是每个用户都可以在另一个私人窗口或会话上工作。

一个潜在的不便是某些命令(例如基于 ncurses)可能会对输出做出奇怪的事情,转义序列也是如此(颜色)。但是,我在 tmux 中使用了它,看来 tmux 解决了这些问题。我可以看到其他用户阅读手册页并使用其他命令来创建缓冲区、正确显示颜色等。

虽然这不允许写入彼此的终端(也许可以为此添加一些其他解决方案)。

我喜欢有一个带有两个窗格的窗口:一个窗格script -f供我的同伴查看,另一个窗格在它旁边,我tail -f是终端。

它也适用于 ttys(并且套接字或命名管道也可以用于文件)


ech*_*hox 12

据我所知,不可能以“干净”的方式与其他用户共享会话。

如果客户端不使用-r开关,则也无法进行只读访问。

由于另一个终端多路复用器屏幕支持您正在寻找的功能,遗憾的是也以一种繁琐的方式...我不确定这是否适合您,但也许其他人会发现这很有用。

屏幕解决方案:

主持会议:

  • 必须设置屏幕的SUID 位:-/
  • 打开会话 screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

加入会话:

  • screen -x username/sessionname

您可以使用:aclchg或为用户设置权限位(* 代表所有人):chacl。# 附加会影响窗口,? 附加将影响命令。

例子:

  • :aclchg * -wx "#,?" 将会话权限设置为所有用户只读
  • :aclchg foo +w 2 将在窗口 2 上为用户 foo 提供写访问权限
  • :aclchg bar +x detach 将授予将会话分离到用户栏的权限