linuxで端末の画面を共有
ref.
- man script
- man screen
- http://sourceforge.jp/magazine/06/09/11/088249
新人を教育するのに使えるかなーと思って調べた。とりあえず画面見せるだけなら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