【问题标题】:How do I tell which users are connected to a shared tmux socket?如何判断哪些用户连接到共享 tmux 套接字?
【发布时间】:2012-09-20 06:33:01
【问题描述】:

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

tmux -S /tmp/pair

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

tmux -S /tmp/pair attach

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

我猜这可能来自lsof 命令。

【问题讨论】:

  • 从 tmux 内部? Ctrl-b D
  • @hroptatyr 你的意思是<prefix> D,是吗? ://

标签: sockets tmux


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 注意:这是 Shift-D,如果没有 shift,你会自己脱离会话。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2013-12-31
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      相关资源
      最近更新 更多