今自宅サーバーはVMware Server 2.0.2で稼動させ、操作にVI Clientを使っていることは今までに報告したとおりである。

自宅サーバーのVine Linux 4.2(x86)の他にも様々なOSを稼動させており、それにはもちろん実験用やインストール試験用も含まれる。CentOS 5系も勉強のために入れてみた。

ところで、私はLinux、FreeBSD、Solaris x86のPC UNIXでXorgでGUIが動作するものの場合、Xorgのvmwareビデオドライバーとvmmouse入力ドライバーがパッケージやそれに類するもので用意されていれば基本的にVMware Toolsやopen-vm-toolsはインストールしない。
Windowsでも出来るだけクリーンな環境にしたい場合はVMware II SVGAドライバーとVMware マウスドライバーだけ入れてツールボックスなどは入れない場合もある。
ネット上でVMwareのインストール手順などを見ると、このVMware Tools(ならびにToolbox)の機能とvmware-drvおよびvmmouseの機能をごっちゃにしている人も多い。「VMware Toolsを入れるとマウスがシームレスに動きます」などと書かれていたら申し訳ないがその時点でもうその先は読まない。理解していないものを説明した文章は壊滅的に何も伝わらないというのが私の持論だ。軽くまとめておくと

VMware ツール (VmwareTools) – 私独自の表現を用いるとvmware-guestd、vmware-user、vmware-toolboxの3コンポーネントからなる。主にホストOSとの通信を担う。悪い言い方をすればホストOSがゲストOSにちょっかいをかけるためのバックドア。これをUNIX系のOSでオープンソース化したものがopen-vm-toolsであり、シャットダウンスクリプト、サスペンド、時計の同期、クリップボードの共有などを行う。open-vm-toolsにはvmware-drvとvmmouseが含まれない事からもVMwareToolsがマウスのシームレスな切り替えを行っているわけではないことは明らかである。

VMware ドライバー(VmwareDrivers) – いわゆる準仮想化ドライバーと呼ばれるもので、SVGA、メモリー、マウス、vmxnet、SCSIアダプターなど、ゲストOSからみると単なるデバイスドライバーだが裏でホストOSとやり取りしてより効率的に動作させられるもの。

さて、前置きが長くなりすぎたが。今日はCentOS 5を入れた時のXorg 7.1.1でマウスのホイールを使うお話だ。

CentOS 5を入れた後、Xorgの設定を手で行う。vmmouse_drv.soは最初から入ってくれているようで、さくさく設定・・・・あれ? ホイールの下向きが3行下に進んで、ホイールの上向きが5ページくらい下に進む・・・・。同じ設定をVMware Workstation 6.5.2上で行うと問題ないのに・・・・なぜだ。Xorgのホイール周りの情報を集めまくったが有用なものは無かった。

で、試行錯誤の結果というか/var/log/Xorg.0.logを見たら原因が判明。問題があったらログを見ろという教訓ですな。CentOS 5のXorg (xorg-server-1.1.1)は、マウスに関する情報をInputDeviceセクションから取得するようだが、CorePointerとしてInputDeviceを指定しているにも関わらず、デフォルトのマウスが見つからないと言ってvmmouseドライバを指定したMouse0以外にもう一つmouseドライバのマウス情報を生成しているようだ。ソースを追ったわけではないが、どうもキーボードをkeyboardまたはkbdドライバである事、マウスをmouseドライバである事、とドライバー名を固定で見ているような動きだ。ログを見ると、レイアウト(このディスプレイ情報とこの入力デバイス情報を使います)の決定、入力デバイス中の第一キーボードと第一マウスの決定、ディスプレイドライバーのロードやその他のモジュールのロード、ディスプレイ情報の決定、入力デバイスドライバーのロード(ここで初めてvmmouseがマウスであると分かる)、という順番に処理しているみたいで、入力デバイスが何なのかが分かる前にマウスを探しに行って失敗しているようだ。CorePointerとか死ぬほど指定しているのに。
なので苦肉の策として以下のような設定にした。

Mouse0 – vmmouse Zaxisとか普通に”4 5″こいつがCorePointer。
Mouse1 – mouseドライバーを使い、入力デバイスは/dev/null、これもレイアウトに追加。

これで、XorgがMouse0を見つつMouse1のmouseをデフォルトマウスと判定するため余計なマウスエントリーを一つ増やさず、mouseドライバーの方がnullデバイスから情報を取ろうとして何も取れないから何もせず、vmmouseのマウスイベントだけを上手に拾ってくれるようになった。
結論としては、上ホイールで鬼のように下にスクロールするのは、Xorgがmouseドライバーのマウスエントリーを裏で追加して、vmmouseからも裏のmouseからもXサーバーに対してイベントが飛ぶために起こっているようだ。

今後、Xorgは基本haldaemonを見るようになっていくと思われるのでCentOS 5だけの不思議現象でした。