ノートパソコンを持ち歩いていろいろなところのWi-Fiで作業することが多いですが ネットワークによってはDHCPでホスト名も配っているところがあります。
そんなところに繋いだり他で作業したりしてる間にちょっと問題が起こりました。
Macのローカルホスト名
Macでの話ですが、システム環境設定の共有からコンピューター名を決めることが出来、
通常この値にMyMac
とか入れておくと、
$ hostname
MyMac.local
といった.local
を付けたホスト名として認識されます。
これ以外に、Mac特有のツールで
$ scutil --get ComputerName
MyMac
$ scutil --get LocalHostName
MyMac
$ HostName
MyMac.local
と、scutil
を使っても確かめることが出来ます。
ホスト名が変わる
これがDHCPサーバー側からホスト名が配られる様な設定になっていると、
hostname
の結果がその指定してきたものに変わってきます。
$ hostname
example.host
一方scutil
の結果は
$ scutil --get ComputerName
MyMac
$ scutil --get LocalHostName
MyMac
$ scutil --get HostName
HostName: not set
といった具合に、ComputerName
、LocalHostName
は相変わらず同じ名前を出す一方、
HostName
はnot set
になっています。
起こった問題
今回起こったのはGNU screenのソケットディレクトリの設定に関してです。
通常、/tmp/uscreens/S-userの様なところに設定してありますが、
SCREENDIR
という環境変数で変更することが出来、これを
SCREENDIR=$HOME/.screen_$(hostname|cut -d. -f1
みたいな値に設定していました。
これは/tmpに置くのが嫌なのと、分散サーバーみたいなところでHOMEを共有している場所で、
他の端末でscreenを立ち上げてる時にさっとls ~/.screen_*
みたいにすると
どこで立ち上がってるか簡単に確認出来る様にするためです。
Macではホスト名を付ける必要は特にないのですが、 dotfiles で共通のものを使ってるので持ち運び端末でも同じ様にホスト名のついたソケットディレクトリを使っていました。
ここで、ある環境でhostname
がMymac.local
の所でターミナルを立ち上げ、
その後、DHCPでホスト名(example.host
)が配られる環境に接続後、立ち上げ済のターミナルからGNU screenを立ち上げると
$ screen -ls
No Sockets found in /Users/user/.screen_example
といった感じで中からscreenの情報が取れません。
これは、GNU screenを立ち上げるターミナルではSCREENDIR
がターミナル立ち上げ立ち上げ時に設定された
~/.screen_MyMac
であるのに対し、
立ち上げ後にscreen内で起動するBashはSCREENDIR
を~/.screen_example
と設定してしまうからです。
これに対処するためにMacにおいてはscutil
を使うように変更しました。
1 2 3 4 5 6 7 8 9 |
|
WindowsのノートPCに関してはどうするか、ちょっとまだ考え中です。
cygwin
ならまだ条件分岐出来ますが、
最近使えるようになったUbuntu on Windowsとか
そもそも区別し辛いものだと辛い。
今のところこれ以外にホスト名に頼って直接何かするような設定はなさそうなんですが、 結構こういうことは起こりそうなので気をつけて見ていかないと、と。