MacのVMware Fusion (2.0.7)のゲストOSのシリアルポートに繋ぎたい

GUIで設定できるシリアルポートは、ホストOS側からはただのファイルにしかみえない。なので、tail -f するぐらいならいいけど、シリアルコンソールとしては使えない。(VMware Fusion 3ではGUIで設定できるんですかね?)

ホスト側にUNIXドメインソケットとして見せるには、設定ファイル(*.vmx)を手で編集する必要がある。既存の「serial0.*」の行を消して、こんなのを追記すればOK

serial0.present = "TRUE"
serial0.fileType = "pipe"
serial0.fileName = "/tmp/serial-guest01"
serial0.tryNoRxLoss = "TRUE"
serial0.startConnected = "TRUE"

これで、ゲストOSのttyS0がホストOSでは/tmp/serial-guest01としてみえるようになる。


ゲストOS(ぼくの場合はLinux)のシリアルコンソール(grubとかbootparamとかgettyとか)の設定は、Remote Serial Console HOWTO (JFの日本語訳)を参照のこと。


次に/tmp/serial-guest01にどうやって繋げるか。

socatを使う。古いsocatだと、MacUNIXドメインソケットのハンドリングができないっぽいので、最新のsocat 1.7.1.2をソールからビルドした。


接続方法その一。socatを使って、UNIXドメインソケットをptyにブリッジして、
(ptyのlink=がなぜか効かないので、デバイスファイル名を確認するため-d -d でデバッグメッセージ表示するようにしている)

$ socat -d -d unix-connect:/tmp/serial-guest01 pty:raw,echo=0

socatが作ったデバイスに、jermやcuなどでptyに接続する。

$ jerm /dev/ttys008


接続方法その二。socatを使って、とあるポートのTCP接続をUNIXドメインソケットにブリッジして、

$ unix-connect:/tmp/serial-guest01 tcp4-listen:1919,reuseaddr

telnetとかncとかで、繋げる。

$ telnet hostOS 1919
$ nc hostOS 1919