うまいぼうぶろぐ

linuxとhttpdとperlのメモ

linuxで端末の画面を共有

ref.

新人を教育するのに使えるかなーと思って調べた。とりあえず画面見せるだけならscriptがてっとり早いのか。screenは異なるユーザと端末共有しようと思うと、setuidしたり(必要なら読み取り専用にしたり)と何か面倒な気がする。

が、3人以上で共有しようとすると名前付きパイプでは出来なかったので、screenを使わないとダメかも。

script

名前付きパイプ

man scriptに書いてる内容。ほぼリアルタイムでモニタできる。

  • user1
$ mkfifo foo
$ script -f foo
  • user2
$ cat foo
$ cat foo | tee script.log # ログ残す場合

名前付きパイプ使ってるので、user2がcatした瞬間からuser1のscriptが動きだす。logをfileに残したい場合はteeを使う。

tail

名前付きパイプに比べると少し遅れるけど、これでも十分。typescriptファイルは残るのでそのままログになる。

  • user1
$ script -f script.log
  • user2
$ tail -f script.log

screen

同一ユーザの場合

同一ユーザの場合は-xでアタッチするだけ。session名は指定しなくてもいいけど、わかりやすいので-Sで指定。

  • term1
$ screen -S session
  • term2
$ screen -x session
複数ユーザの場合

setuidして、screenセッションへの権限追加などが必要。あと、setuidしてると/var/run/screenを755にしないと怒られた。(デフォルトは775)

  • 準備
# chmod u+s `which screen`
# chmod 755 /var/run/screen
  • user1
$ screen -S session
### このあとscreen上でコマンド入力 (.screenrcに書いてもいけそ)
# ^:multiuser on
# ^:acladd user2
# ^:aclchg user2 -w "#"

aclchgで書き込み権限を外さなければ、ユーザuser2からも端末が操作できる。

  • user2
$ screen -S foo/session