我已经为tmux创建了一个共享套接字来使用。
tmux -S /tmp/pair
然后我有第二个用户连接到套接字。
tmux -S /tmp/pair attach
如何从创建套接字的第一个会话告诉第二个用户已连接?
我猜它会来自lsof
命令。
答案 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]);
}