15

我创建了一个共享套接字供 tmux 使用。

tmux -S /tmp/pair

然后我有第二个用户连接到套接字。

tmux -S /tmp/pair attach

我如何从创建套接字的第一个会话中判断出第二个用户已连接?

我猜这将是来自lsof命令的东西。

4

3 回答 3

19

您可以使用该list-clients命令。它本身显示所有连接到服务器的客户端。如果您使用该选项指定会话-t,它会显示附加到指定会话的客户端。

于 2012-09-20T16:52:24.200 回答
12

就像另一位用户在评论中所说的那样,<prefix> D将列出所有会话,但请记住,按 Enter 将分离该客户端(这可能是您想要的,也可能不是您想要的)

于 2016-05-19T09:13:31.683 回答
0

给出的答案(Ctrl-b D 或 Ctrl-b : list-clients RET)将为您提供具有(虚拟)tty 终端和窗口大小的客户端列表,但不会告诉您相关的用户名。在 tmux 会话之外,您还可以使用“tmux -S /tmp/pair list-clients”

列出已连接的实际用户的一种方法是在命名套接字上运行 lsof,即:“lsof /tmp/pair”

或者,您可以使用“谁”命令查看与虚拟终端关联的用户列表。如果您只是区分自己的连接,则可以使用别名来过滤:“who | awk '{print $2,$NF}' |grep -v '(:[0-9]'”

这是一个快速的 Perl 脚本,它将 tmux 和 'who' 输出放在一起。对于共享套接字的使用,将套接字文件作为唯一参数传递,即:“tmux_ls.pl /tmp/shared”:

my $sock="";
$sock = "-S ".$ARGV[0] if $ARGV[0];

my $clients = `tmux $sock list-clients`;

# Use open to loop like a file
open my $fh, '<', \$clients or die $!;

printf("%-10.10s\t%-10.10s\t%-10.10s\t%-16.16s\t%s\n", "Session", "TTY", "Username", "Timestamp", "Origin");
while(<$fh>) {
    my @cols = split(' ');
    my ($tty) = $cols[0] =~ /^\/dev\/(pts\/\d+)/;
    my $session = $cols[1];
    my $who = `who | grep $tty`;
    my @whoc = split(' ',$who);

    printf("%-10.10s\t%-10.10s\t%-10.10s\t%-16.16s\t%s\n", $session,$tty,$whoc[0], "$whoc[2] $whoc[3]", $whoc[4]);
}
于 2019-02-28T21:56:38.363 回答