雑種のポメラニアン

フリープログラマーの日記とか人生観とか綴るよ

MacにXサーバー立てて、MINIXからXアプリを起動してみた

元々は5/25に突然UNIXソースコードを解読したくなって
「Lions' Commentary on UNIX」を読み始めたのがきっかけ。
その本はDECのPDP11という聞いたこともないようなマシン用のソースを基にしているので
パンチカードとかテープリーダーのデバドラまで書かれてたりする。
今動くUNIXクローンでソースを読むのに最も適したOSは何かと考えたら
タネンバウム教授のMINIXという結論に達した。

で、ソースを読む前にVirtualBoxにインストールしてみて
マシン本体のsshdに入る踏み台としてパスワード認証のsshdとして使っていたのだが
他にも何か出来ないかなとあれこれ寄り道しながら試してみた。
最初にXサーバーを起動してみたのだが、WindowManagerがダサすぎて使い物にならないので
MacをXサーバーにして、MINIXからXクライアントを起動してみたいという欲が出てきた。

もうよく覚えてないが多分18時間くらいぶっ通しで作業したと思う。
目的が達成できて満足感も一潮だが、他にこんなことやってる奴を見かけたら
絶対変態だと思う。


変態の道へようこそ!

<下準備>
sshサーバー(sshd)の設定は出来る限り理解している必要がある。
 例えばgitサーバーを立てるのにsshサーバーは必須。
 「git-hub使えばいいじゃん」なんてのは甘い。
 git-hubはオープンソースは無料だが、仕事のソースがオープンじゃ困る。
 金を払いたくないなら自分で立てるしかない。
 gitサーバーはsshdが必須なので嫌でも鍛えられる。
 その知識は絶対役に立つ。
 「仕事のソースを自分のサーバーに置くのってどうなの?」というクライアントもいたが
 確かにその心配は分かる。しかし、じゃあ自分でバージョン管理しない結果
 貸与されたマシンのHDDが飛んだんでソースコードがなくなっちゃいましたと言って
 許してくれるクライアントなんてまず絶対にいないし、それはプロ失格だと思う。
 少々セキュリティの心配があっても、自分の成果は担保しなければならない。
 というわけでgitサーバーを立てる経験だけでもしておくべきだと思う。

<MacにXQuartz(Xサーバー)をインストール>
XQuartz.appも配布されてるが、インストールできなかった。

sudo port install xorg-server-devel +universal

macportsでインストールする。

ここで悲劇に見舞われた。XQuartzのbinにpost-install.shというスクリプトがあるのだが
どうもアンインストーラーだったらしく、XQuartzに関係するパッケージやリンクを
ことごとく破壊された。これはどうしたらよいのか路頭に迷ったが
XcodeのPreferences->Download->Components->Command Line Toolsをインストールしてやったら直った。

一度

sudo port selfupdate

してから、再度

sudo port install xorg-server-devel +universal

を実行すると2回ほどエラーになったが、ログをよくみて
rootでも書き込み権限のないファイルがあるので、そこで
ln -s ~.dep ~.h
とか何とかして回避した。

<サーバー側の設定>
xhost +
で使えるようになるのだが、xhostは危険なので使っちゃいけないとのことなのでxauthを使う。
そこで私が絶大な勘違いをしてはまったのが.Xautorityの生成方法。
xhostもそうだが、xauthもXサーバーが立ち上がってないと動かない。
startx
でXQuartsを起動して

xauth list

自分のマシンのIPアドレスの行のipaddress:0とかなってるはず。

xauth extract - ipaddress:0

とやって何か暗号らしきものが出てきたら成功。
これを何とかしてXクライアントのxauthに渡さなければならない。

opt/local/bin/xauth extract - 192.168.1.XXX:0 | ssh js@192.168.1.XXX /usr/pkg/X11R6/bin/xauth merge -

でコピれる。Xサーバーを再起動するたびに.Xauthorityが変わるのでXサーバーを起動する度に実行する必要がある。
覚えきれないので、シェルクリプトにした。
Xクライアントの環境変数DISPLAY=192.168.XXX:0にすると表示された。

<他にも何かあった気がするが・・・>
もうハマりすぎて全部は覚えてない。
MINIXインストール直後にpkgin_allとかやるとすべてのパッケージが入る。
大した大きさにならないので入れちゃいましょう。
gitも入ってる。
これからRubyオープンソースのブラウザでも入れてみるかな。