/var/run/utmpがない
screen起動時のエラーは直ぐ消えてしまって上手く確認できないんですが 1、 ちょっと頑張って見てみたところ
/var/run/utmp: No such file or directory
というエラー。
このutmpですが、ログインしているユーザーを記録して
whoやwコマンドで使うものだそうです。
これが、Macだと、utmpの代わりにutmpxと言うファイルを使っていて、
utmp自体は使ってない様。
元々utmpがあって、さらに情報を持たせたりした拡張版が
utmpxな様です(ただし、互換性は無し)
2。
現在ではutmpxがPOSIX標準でMacでもそちらを使ってるとのこと。
whoやwをmanしてみると
$ man who
WHO(1) BSD General Commands Manual WHO(1)
NAME
who -- display who is logged in
...
FILES
/var/run/utmpx
...
と言った感じでBSD系のwhoはutmpxを使っています。
実際/var/runを見るとutmpxだけあります。
このようなエラーが出ないLinux端末で見てみると
$ man who
WHO(1) User Commands WHO(1)
NAME
who - show who is logged on
...
If FILE is not specified, use /var/run/utmp. /var/log/wtmp as FILE is
common. If ARG1 ARG2 given, -m presumed: ‘am i’ or ‘mom likes’ are
usual.
となってutmpを使っていて/var/runにもutmpだけあります。
対処法
GNU screenでは起動時に新たにログインしたように上のutmpにユーザー情報が
付け加えられます。
なので、恐らく一番正しいのはscreenビルド時にパッチ当ててutmpxを使う様にすることだと
思うんですが、取り敢えずそれ程問題も無いので簡単に出来そうな方法で済ましたい所。
Webで探すと、単に
$ sudo touch /var/run/utmp
としてutmpを作ってやれば良い
3、とのことで、試しにやってみると
確かに上のエラーは出なくなりました。
utmpを見てみると、確かにscreen起動前空だったファイルに、起動後は
ユーザー情報っぽいものが書き込まれてました。
ただ、このファイル自体をwho等の他のプロセスが使う訳でわけではないので実質無意味。
utmpをutmpxへのリンクへしてしまえ、というようなのもありましたが、
utmpとutmpxは基本互換性が無いみたいなので、試してないですが、
恐らくwho等に影響が出てしまう可能性があります。
取り敢えずはエラーが気持ち悪いので消えれば良いか、と思ってたんですが、 Macを再起動したら消えてました。
適当なスクリプトで起動時に作ることも出来るかと思いますが、 本質的に問題にならないので 4 取り敢えずいいか、と。
ログイン情報を渡さないオプション
実はscreenには上の様に起動毎にutmpを更新させないようにすることが出来ます。
起動時に
$ screen -ln
と-lnを使うか、.screenrcへ
deflogin off
を書いておくとutmpを更新しません。
実際、utmpがある端末で見てみると、
screen起動前は
$ w|grep $USER
user pts/109 xxxxxx xx:xx 0.00s 0.14s 0.02s w
$ screen
$ w|grep $USER
user pts/109 xxxxxx xx:xx 0.00s 0.16s 0.02s screen
user pts/120 :pts/109:S.0 xx:xx 0.00s 0.12s 0.03s w
と通常は元のユーザーがscreenを使っていて、別途新しいユーザーが
wを走らせてるのが見れます。
新しいウィンドウを立ち上げてから見ると
user pts/90 :pts/109:S.1 xx:xx 24.00s 0.07s 0.07s /bin/bash
user pts/109 xxxxxx xx:xx 0.00s 0.16s 0.02s screen
user pts/120 :pts/109:S.0 xx:xx 0.00s 0.12s 0.03s w
こんなかんじでさらに増えます。
一方、-lnなどしてみると
$ w|grep $USER
user pts/109 xxxxxx xx:xx 0.00s 0.17s 0.03s w
$ screen -ln
$ w|grep $USER
user pts/109 xxxxxx xx:xx 0.00s 0.18s 0.02s screen -ln
と言った感じで、最初にログインしたユーザーがscreenを走らせてるだけで、
screen内にいるユーザー情報は出てきません。
特にユーザー情報を使ってるところもないので、Macでこのオプションを使えばよいのでは?
と思ったのですが、どうもこのオプションの有り無しに関わらず
utmpをチェックしているようで、このオプションを渡しても
defloginをoffに設定しても上記のエラーは消えませんでした。
という訳で、結局のところ、それ程害がないから今のところはほっとこう、ということです。。。
