web-dev-qa-db-ja.com

コマンドラインで「画面共有」?

私がリモートサーバーにログインしていて、他の誰かが同じサーバーにログインしている場合、コマンドラインを介して「肩越しに見渡す」方法はありませんか?

もちろん、ターミナルのスクロールバックバッファを定期的にコピーして貼り付け、/tmpのファイルにダンプすることもできます。また、そのファイルをcatすることもできます...これは私が話していることに近いものです。 、色はありませんが。

これは、「画面共有」の一般的な意味とは大きく異なります。これは、追加のnetworkトラフィックがまったく含まれず、ローカルリソースのみが含まれるためです。 (両方ともすでにログインしています。)

私はこれが非常に有用だったであろうわずか数ヶ月でスコアのケースを経験しました。

これは可能ですか?どうすればいいですか?

2
Wildcard

man scriptでこのオプションに出くわしました:

-f      Flush output after each write. This is Nice for telecooperation:
        One person does ‘mkfifo foo; script -f foo’ and another can
        supervise real-time what is being done using ‘cat foo’.

私はまだこれで遊んでいませんが、それは正確に私が探していたもののように見えます。それで遊ぶことで、色なども伝わってくるかどうかがわかります。

4
Wildcard

多くの人がscreenを提案しています。画面はやや古く、かなり悪いです。 tmuxをお勧めします。

セッションを作成するには、tmux new -s <name>を実行するだけです。

次に、別の人をそのセッションに接続させるには、tmux a -t <name>を実行するだけで、名前が同じになるようにします。

セッションを終了するには、を押します。 Ctrl-b その後 d

これはすべて同じサーバー/マシンで実行する必要があることに注意してください。

4
innectic

他の人が使用している端末がわかっている場合は、teeを使用して出力を他の人の端末にパイプできます。

wコマンドを使用して、ターミナルを見つけることができます。

user4@myubuntu:~$ w
 16:41:36 up 13 min,  4 users,  load average: 0.55, 0.60, 0.46
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user1    :0       :0               16:28   ?xdm?   6:28   0.03s gdm-session-worker [pam/gdm-password]
user2    pts/1    :0               16:38    2:46   0.04s  0.04s bash
user3    pts/7    :0               16:38    1:32   0.09s  0.09s bash
user4    pts/8    :0               16:41    4.00s  0.05s  0.00s w

私はターミナルuser4pts/8です。出力をターミナルuser2pts/1に送信したい場合は、次のコマンドを使用して新しいシェルを開始します。

$ bash | tee /dev/pts/1

次に、後続のコマンドのすべての出力(入力はされません)がuser2の端末にコピーされます。完了したら、Ctrl-Dを押してシェルを終了します。

メッセージまたはテキストを他のユーザーに送信するだけの場合は、writeコマンドを使用できます。

$ write <username>
hello, are you there ? 
Ctrl-d
2
NZD

コマンドscreenがあります。これがまさにあなたが探しているものだと思います。 https://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/

あなたにとって重要な情報は、複数のユーザーが同じ画面に添付できるということです

1
murphy

wemuxtmux があなたが探しているものだと思います。

0
man

kibitz-2人以上が1つのシェルと対話できるようにします。

これがあなたが探しているものだと思います!

実行

yum install tcl expect

kibitzを入手して使用するために%user

0
biaoge

さて、screenと画面を共有することは可能ですが、私が思っていたよりも毛深いです。

  1. 他のユーザーのソケットにアクセスできるように、screenをrootにsetuidする必要があります。 (これはsetgidだけで動作するようにできると思うかもしれませんが、screenをそのようにコンパイルできるかどうかは確認しませんでした。)
  2. ドキュメント マルチユーザーコマンドの場合は少し簡単です。つまり、設定はそれほど簡単ではありません。また、他のユーザーにACLを設定することはできますが、現在のACLを印刷するためのオプションは存在しないようです。

そうは言っても、「仕事」のいくつかの価値のために、私はそれを機能させることができました。

まず、十分な権限があることを確認し、/var/run/screenの権限を修正します。

chmod u+s /usr/bin/screen
chmod 755 /var/run/screen

次に、いくつかの構成コマンドをファイルにバンドルします。

$ cat shared.screen.rc
multiuser on
aclumask ?-wx
aclumask ??-wx
addacl foo
aclchg foo -x ?
aclchg foo +x detach,help,next,prev,windows,info,select

multiuserはマルチユーザーモードを有効にし、aclumaskはすべてのユーザーのデフォルトアクセスを制限し、addaclはユーザーfooへの(すべての)アクセスを許可します。 aclchgコマンドは、すべてのコマンド(-x)への実行(?)アクセスを削除し、その後、いくつかの無害なコマンドを再度許可します。

次に、screen -c shared.screen.rcを実行して、ユーザーfooがアタッチできる画面を作成します。

foo$ screen -ls bar/
There is a suitable screen on:
        18839.pts-2.test        (08/21/16 22:09:07)     (Multi, detached)
foo$ screen -r bar/

画面に書き込んでほとんどのコマンドを使用すると、エラーが発生します。ただし、コピーモードは機能しているようです。また、非所有ユーザーとしてscreen -rd bar/で画面を開始すると、それが不可能であると想像したとしても、所有ユーザーが追い出されます。 screen -RRDも機能し、元のユーザーからログアウトします。 pow_detachdetach(2番目のユーザーにとっては楽しいはずです)を禁止することはできますが、これには影響しないようです。面白い。

もちろん、気にせず、他のユーザーに画面を混乱させてもかまわない場合は、multiuser onaddacl fooを使用するだけで十分です。私があなたがすべきだと言っているわけではありません。

0
ilkkachu