如何判断哪些用户连接到共享tmux套接字?

时间:2012-09-20 06:33:02

标签: sockets tmux

我已经为tmux创建了一个共享套接字来使用。

tmux -S /tmp/pair

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

tmux -S /tmp/pair attach

如何从创建套接字的第一个会话告诉第二个用户已连接?

我猜它会来自lsof命令。

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:7)

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

答案 2 :(得分:0)

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

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

或者您可以使用“ who”命令查看与虚拟终端关联的用户列表。如果只是区分自己的连接,则可以使用alis过滤:“ 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]);
}