web-dev-qa-db-ja.com

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

同じマシン上の別のユーザーと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セッションの読み取り専用アクセス権を与えることもいいでしょう。

112
Ryan McGeary

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

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

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

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

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

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

これはtmuxのシェルスクリプトラッパーです-コンパイルは必要ありません。

48
Peter

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

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

作成するたびにsocket-pathの権限を変更する必要はなく、ソケット用の特定のディレクトリを作成できます(私は/ 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
17
Stephen Paulger

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

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

別のターミナルマルチプレクサーscreenは、探している機能をサポートしますが、残念ながら面倒な方法でもサポートされています... 。

screenの解決策:

セッションをホストします。

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

セッションに参加:

  • screen -x username/sessionname

:aclchgまたは:chaclを使用して、ユーザーのパーミッションビット(*はすべて)を設定できます。 #追加するとウィンドウに影響しますか?追加されたコマンドに影響します。

例:

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

これは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でも動作します(ソケットや名前付きパイプもファイルに使用できます)

11
ferhtgoldaraz