命令行上的“屏幕共享”?

命令行上的“屏幕共享”?

如果我登录到远程服务器,而其他人登录到同一台服务器,是否有某种方法可以通过命令行让他们“监视我”?

当然,我可以每隔一段时间复制并粘贴我的终端回滚缓冲区并将其转储到 中的文件中/tmp,并且他们可以cat该文件......这与我所说的很接近,尽管它没有颜色。

这与“屏幕共享”的典型含义非常不同,因为它不涉及任何额外的操作网络根本没有流量——只是本地资源。 (你们都已经登录了。)

我已经有了分数在短短几个月内出现的案例中,这将非常有用。

这可能吗?我该怎么做?

答案1

很多人都建议过screen。屏幕有点旧,而且很糟糕。我建议tmux

要创建会话,只需运行tmux new -s <name>

然后,要让另一个人附加到该会话,他们所要做的就是运行tmux a -t <name>,并确保保持名称相同。

Ctrl可以通过点击-thenb来离开会话d

请注意,这一切都必须在同一台服务器/计算机上完成。

答案2

我刚刚遇到这个选项man script

-f      Flush output after each write. This is nice for telecooperation:
        One person does ‘mkfifo foo; script -f foo’ and another can
        supervise real-time what is being done using ‘cat foo’.

我还没玩过这个,但看起来像确切地我在寻找什么。玩弄它可以确定是否也传达了颜色等。

答案3

如果您知道她正在使用哪个终端,则可以使用tee管道将输出传输到其他人的终端。

您可以使用以下w命令来查找终端:

user4@myubuntu:~$ w
 16:41:36 up 13 min,  4 users,  load average: 0.55, 0.60, 0.46
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user1    :0       :0               16:28   ?xdm?   6:28   0.03s gdm-session-worker [pam/gdm-password]
user2    pts/1    :0               16:38    2:46   0.04s  0.04s bash
user3    pts/7    :0               16:38    1:32   0.09s  0.09s bash
user4    pts/8    :0               16:41    4.00s  0.05s  0.00s w

user4在航站楼pts/8。如果我想将输出发送到user2终端pts/1,那么我使用以下命令启动一个新的 shell:

$ bash | tee /dev/pts/1

然后我后续命令的所有输出(尽管不是输入)都将被复制到user2.如果完成,只需点击Ctrl-D即可终止 shell。

如果您只想向其他用户发送消息或一些文本,您可以使用以下write命令:

$ write <username>
hello, are you there ? 
Ctrl-d

答案4

好吧,共享屏幕screen是可能的,但比我想象的要复杂。

  1. 它需要screen将uid设置为root,以便它可以访问其他用户的套接字。 (有人可能认为这可以只与 setgid 一起使用,但我没有检查是否screen可以这样编译。)
  2. 文档对于多用户命令来说有点简单,这意味着配置它并不那么简单。此外,虽然您可以为其他用户设置 ACL,但似乎不存在选项印刷当前的 ACL。

也就是说,我能够让它发挥作用,实现某些“工作”的价值观。

首先,确保它有足够的权限,并修复以下权限/var/run/screen

chmod u+s /usr/bin/screen
chmod 755 /var/run/screen

然后,将一些配置命令捆绑在一个文件中:

$ cat shared.screen.rc
multiuser on
aclumask ?-wx
aclumask ??-wx
addacl foo
aclchg foo -x ?
aclchg foo +x detach,help,next,prev,windows,info,select

multiuser启用多用户模式,aclumask限制所有用户的默认访问权限,然后addacl允许(所有)访问 user foo。这些aclchg命令删除了-x对所有命令 ( ?) 的执行 ( ) 访问权限,然后我们再次允许一些良性命令。

然后,运行screen -c shared.screen.rc,创建一个用户foo可以附加到的屏幕:

foo$ screen -ls bar/
There is a suitable screen on:
        18839.pts-2.test        (08/21/16 22:09:07)     (Multi, detached)
foo$ screen -r bar/

写入屏幕和使用大多数命令都会导致错误。然而,复制模式似乎有效。此外,当非拥有用户将拥有用户踢出时启动屏幕screen -rd bar/,即使您认为这是不可能的。screen -RRD也有效,并注销原始用户。即使您可以禁止pow_detachand detach(这对第二个用户来说应该很有趣),但这似乎并没有影响这一点。有趣。

当然,如果您不介意,并且乐​​意让其他用户弄乱您的屏幕,那么使用multiuser onaddacl foo就足够了。我并不是说你应该这样做。

相关内容