rcmdnk's blog

Gnu Screen

Macでscreenを起動しようとするとき、 毎回一瞬何かメッセージが出てる気がしてたのですが、 特に問題があるわけでも無かったので無視してました。

が、ちょと気になったので調べてみることに。

Sponsored Links

/var/run/utmpがない

screen起動時のエラーは直ぐ消えてしまって上手く確認できないんですが 1、 ちょっと頑張って見てみたところ

/var/run/utmp: No such file or directory

というエラー。

このutmpですが、ログインしているユーザーを記録して whowコマンドで使うものだそうです。

これが、Macだと、utmpの代わりにutmpxと言うファイルを使っていて、 utmp自体は使ってない様。

元々utmpがあって、さらに情報を持たせたりした拡張版が utmpxな様です(ただし、互換性は無し) 2

現在ではutmpxがPOSIX標準でMacでもそちらを使ってるとのこと。

whowmanしてみると

$ man who

WHO(1)                    BSD General Commands Manual                   WHO(1)

NAME
     who -- display who is logged in
...
FILES
     /var/run/utmpx
...

と言った感じでBSD系のwhoutmpxを使っています。 実際/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等の他のプロセスが使う訳でわけではないので実質無意味。 utmputmpxへのリンクへしてしまえ、というようなのもありましたが、 utmputmpxは基本互換性が無いみたいなので、試してないですが、 恐らく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をチェックしているようで、このオプションを渡しても defloginoffに設定しても上記のエラーは消えませんでした。

という訳で、結局のところ、それ程害がないから今のところはほっとこう、ということです。。。

Sponsored Links
  1. 一瞬で消えてしまうので何度か見ながら。。。起動後に起動時の メッセージって簡単に見れる方法がありそうなもんですがざっと見分からない。。。

  2. Ed’s short guide on utmp(x)

  3. Screen command

  4. 問題だとするとむしろユーザー情報が管理出来ないところで、そこは screenのソースを変えるか、いっその事utmpをインストールして who等もGNUの?whoにしてしまうかが必要になってしまう。

Sponsored Links

« 月間アーカイブ for Octopress GistのURLが変わった »