tmuxが使用する共有ソケットを作成しました。
tmux -S /tmp/pair
次に、2番目のユーザーをソケットに接続します。
tmux -S /tmp/pair attach
ソケットを作成した最初のセッションから、2番目のユーザーが接続されていることをどのように確認できますか?
コマンドからの何かだと思いlsof
ます。
コマンドを使用できますlist-clients
。それ自体で、サーバーに接続されているすべてのクライアントが表示されます。オプションでセッションを指定すると、指定されたセッションに-t
接続されているクライアントが表示されます。
別のユーザーがコメントで言ったよう<prefix> D
に、すべてのセッションが一覧表示されますが、Enterキーを押すと、そのクライアントがデタッチされることに注意してください(希望する場合とそうでない場合があります)
与えられた答え(Ctrl-b DまたはCtrl-b:list-clients RET)は、(仮想)tty端末とウィンドウサイズを持つクライアントのリストを提供しますが、関連するユーザー名は教えてくれません。tmuxセッションの外部から、「tmux -S / tmp/pairlist-clients」を使用することもできます
接続されている実際のユーザーを一覧表示する1つの方法は、指定されたソケットでlsofを実行することです。つまり、「lsof / tmp/pair」です。
または、「who」コマンドを使用して、仮想端末に関連付けられているユーザーのリストを表示できます。自分の接続を区別するだけの場合は、alisを使用して次のようにフィルタリングできます: "who | awk'{print $ 2、$ NF}' | grep -v'(:[0-9]'"
これは、tmuxと'who'の出力をまとめた簡単なPerlスクリプトです。共有ソケットで使用する場合は、ソケットファイルを唯一の引数として渡します。例: "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]);
}