/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
に設定しても上記のエラーは消えませんでした。
という訳で、結局のところ、それ程害がないから今のところはほっとこう、ということです。。。