在两个用户之间共享tmux会话的其他方法有哪些?


106

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

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

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

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

对于奖励积分,理想情况下,最好将tmux会话的只读访问权限授予其他用户。


10
我太懒了,我只用您的问题作为答案:D
phunehehe

Answers:


46

https://github.com/zolrath/wemux

wemux增强了tmux,使多用户终端多路复用既简单又强大。它允许用户托管一个wemux服务器,并让客户端加入其中一个:

镜像模式为客户端(计算机上的另一个SSH用户)提供了对会话的只读访问权限,从而使他们可以看到您的工作,或者

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

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

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

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


16

我曾在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

2
如果您具有支持ACL的文件系统,则无需使用组(尤其是不需要任何根干预)。但这不能解决共享tmux 配置的问题,对吗?
吉尔斯

3
要创建共享的会话:tmux -S $TMUX_GROUP/shared-session。要从另一个帐户附加它:tmux -S $TMUX_GROUP/shared-session attach
jfs

上面的评论(@JFSebastian提供)应该是答案的一部分。建议的设置可以,但是在解释如何真正使用它时,答案不尽人意。对于此页面中的所有答案,此答案都是可以更好地解决该问题的答案。
Beco博士

12

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

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

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

屏幕解决方案:

主持会议:

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

加入会议:

  • screen -x username/sessionname

您可以使用:aclchg或为用户设置权限位(全部为*):chacl。#附加会影响Windows ,?附加将影响命令。

例子:

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

对于它的价值,我觉得tmux解决方案(尽管稍微有些冗长)实际上是“干净的”,因为它不涉及让setuid二进制文件在文件系统中浮动。
雕文

不幸的是,以这种方式使用的tmux存在一个安全问题:您有权访问的那些人可以轻松地创建新会话,并在其中执行您看不见的事情。
Curt J. Sampson

9

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

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

其他人(如果需要,仅对文件具有读取权限)可以tail -f查看文件,即终端会话。该-f选项使tail输出随便添加。

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

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

但是,这不允许写入彼此的终端(可能为此添加了其他解决方案)。

我希望有一个包含两个窗格的窗口:一个正在运行script -f的窗格供我的同伴查看,另一个在我旁边tail -f的终端。

它也可以在ttys中工作(并且文件也可以使用套接字或命名管道)


我喜欢你的答案!这既简单又实用!
JL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.