2人のユーザー間でtmuxセッションを共有する他の方法は何ですか?


106

同じマシン上の別のユーザーとtmuxセッションを共有するためのクリーンで簡単な方法を探しています。この-S socket-pathオプションを試しましたが、他の誰かがセッションに接続する前に、ソケットパスのすべてのアクセス許可を開く必要があります。動作しますが、少し面倒です。例えば:

# Me
$ tmux -S /tmp/pair
$ chmod 777 /tmp/pair

# Another user
$ tmux -S /tmp/pair attach

これは機能しますが、両方のユーザーが同じtmux構成(セッションを開始したユーザーの構成)を共有するようになりました。2人のユーザーが独自のtmux構成と独自のtmuxキーバインディングを使用できるようにする方法はありますか?

ボーナスポイントについては、理想的には、tmuxセッションの読み取り専用アクセスを他のユーザーに与えることも良いでしょう。


10
あなたの質問を私の答えとして使用するのが
面倒

回答:


46

https://github.com/zolrath/wemuxから:

wemuxはtmuxを拡張して、マルチユーザー端末の多重化を簡単かつ強力にします。ユーザーはwemuxサーバーをホストし、クライアントを次のいずれかに参加させることができます。

ミラーモードでは、クライアント(マシン上の別のSSHユーザー)にセッションへの読み取り専用アクセスを許可し、クライアントがあなたの作業を確認できるようにします。または

ペアモードでは、クライアントと自分が同じ端末で作業できます(共有カーソル)

不正モードを使用すると、クライアントは同じtmuxセッションの別のウィンドウ(個別のカーソル)で独立してペアリングまたは動作できます。

これは、マルチサーバーのサポートと、ユーザーが接続/切断したときのユーザーリストと通知を備えています。

これは、tmuxのシェルスクリプトラッパーです。コンパイルは不要です。


16

私はこれをUbuntuで試しましたが、他のUNIXバリアントでは動作しない理由がわかりません。

両方のユーザーが共通グループのメンバーであり、ソケットパスがそのグループを使用している場合、両方のユーザーは正常に接続できます。

ソケットパスを作成するたびにソケットパスのアクセス許可を変更する必要はなく、ソケット用の特定のディレクトリを作成できます(/ var / tmuxを使用しました)。

最初にtmuxユーザーのグループを追加します

$ addgroup $TMUX_GROUP

グループが$ TMUX_GROUPに設定されたディレクトリを作成し、setgidビットを使用して、ディレクトリ内で作成されたファイルのグループが$ TMUX_GROUPに自動的に設定されるようにします。

$ mkdir /var/tmux
$ chgrp $TMUX_GROUP /var/tmux
$ chmod g+ws /var/tmux

次に、セッションを共有するユーザーが$ TMUX_GROUPのメンバーであることを確認します

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2

2
ACLをサポートするファイルシステムがある場合、グループを使用する必要はありません(特にルートの介入は必要ありません)。しかし、これはtmux 構成を共有する問題を解決しませんか?
ジル

3
共有セッションを作成するには:tmux -S $TMUX_GROUP/shared-session。別のアカウントからアタッチするには:tmux -S $TMUX_GROUP/shared-session attach
jfs

上記のコメント(@JFSebastianによる)は回答の一部である必要があります。提案されたセットアップは問題ありませんが、実際に使用する方法を説明するときの答えは不十分です。また、このページのすべての回答について、この回答が問題に対処するのに適しています。
ベコ博士

12

私の知る限り、「クリーン」な方法で他のユーザーとセッションを共有することはできません。

また、クライアントが-rスイッチを使用しない場合、読み取り専用アクセスもできません。

別の端末マルチプレクサ画面が探している機能をサポートしているので、残念ながら面倒な方法でもあります...これがあなたのためのオプションであるかどうかはわかりませんが、おそらく他の誰かがこれを役に立つでしょう。

画面の解決策:

セッションをホストする:

  • 画面の SUIDビットを設定する必要があります:-/
  • でセッションを開く screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

セッションに参加する:

  • screen -x username/sessionname

:aclchgまたはを使用して、ユーザーのアクセス許可ビット(すべての*)を設定でき:chaclます。#appendedはウィンドウに影響しますか?追加するとコマンドに影響します。

例:

  • :aclchg * -wx "#,?" すべてのユーザーに対してセッション許可を読み取り専用に設定します
  • :aclchg foo +w 2 ウィンドウ2のユーザーfooに書き込みアクセス権を付与します
  • :aclchg bar +x detach セッションをデタッチする許可をユーザーバーに付与します

価値があるのは、ファイルシステムの周りにsetuidバイナリを浮かせたままにしないので、tmuxソリューション(多少冗長ですが)は実際には「よりクリーン」だと感じています。
グリフ

残念ながら、この方法でこれを使用したtmuxにはセキュリティ上の問題があります。アクセスを許可したユーザーは、新しいセッションを簡単に作成し、表示されていないことを実行できます。
カートJ.サンプソン

9

これはtmux専用ではありませんが、現在は私が使用しているものです。

を使用script -f /path/to/some/fileして、ターミナルセッションをファイルに書き込むことができます。この-fオプションは、入力中にファイルを更新します。

(必要に応じて、ファイルへの読み取り権限のみを持つ)他の誰かがtail -fファイル、ターミナルセッションを見ることができます。この-fオプションは、tail追加されるものをすべて出力します。

2つの組み合わせは、端末のビューを「同期」します。tmuxで使用すると、両方のユーザーの解像度が異なる場合に発生するサイズ変更を回避できるという利点もあります。別の特徴は、各ユーザーが別のプライベートウィンドウまたはセッションで作業できることです。

潜在的な不都合の1つは、一部のコマンド(たとえば、ncursesベース)が出力に対して奇妙なことを行い、エスケープシーケンス(色)を実行する可能性があることです。しかし、私はtmux内でこれを使用しており、tmuxはこれらの問題を修正しているようです。他のユーザーがmanページを読んで、バッファーを作成する他のコマンドを使用したり、色が正しく表示されたりするのを見ることができます。

ただし、お互いの端末に書き込むことはできません(他のソリューションを追加できるかもしれません)。

私は、2つのペインがあるウィンドウが好きです。1つのペインscript -fはピアが見るために実行され、もう1つのペインは自分tail -fの端末です。

ttyでも機能します(ファイルにはソケットまたは名前付きパイプも使用できます)


あなたの答えが好きです!これはシンプルで機能的です!
JL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.