こんにちは。加藤です。 実は私の所でも同じような現象が起こるので、興味深く拝見しておりました。
On Fri, 31 Aug 2012 21:22:31 +0900 Satoshi Kimura <satosi.kim...@nifty.com> wrote: > X server は今までここを,絶対に /dev/sysmouse にしません > でした.(ただし xf86-input-mouse-1.6.0 にて) > 1.7.1 および 1.7.1 + patch は,これから調べてみます. パッチ当てついでにソースみてみました。 "(WW) Mouse0: No Device specified, looking for one..." これが出る場合、src/bsd_mouse.c の FindDevice が呼ばれている様に思えます。 そしてこれは /dev 以下を調べ、sysmouse と ums0 がある場合(USBマウスが一つある場合) moused が走っていれば sysmouse を、ums0 を moused が使っていなければ ums0を選ぶ、 という様なコードに思えます。 ただ、実際は moused が走っていても sysmouse が選択されないことがあるようで、 その辺がよく分かりません。 ちょっと泥臭いですが src/bsd_mouse.c に下記の様な細工をして調べてみました。 --- work/xf86-input-mouse-1.7.1/src/bsd_mouse.c 2012-09-01 00:34:30.091548099 +0900 +++ /root/bsd_mouse.c 2012-09-01 00:33:12.000000000 +0900 @@ -341,6 +341,8 @@ if (!strcmp(*pdev, DEFAULT_MOUSE_DEV)) { memcpy(&devMouseStat, &sb, sizeof(devMouseStat)); devMouse = TRUE; + xf86Msg(X_INFO, "%s: Found Device \"%s\"\n", + pInfo->name, *pdev); continue; } else if (!strcmp(*pdev, DEFAULT_SYSMOUSE_DEV)) { /* Check if /dev/mouse is the same as /dev/sysmouse. */ @@ -349,8 +351,12 @@ /* If the same, use /dev/sysmouse. */ devMouse = FALSE; } + xf86Msg(X_INFO, "%s: Found Device \"%s\"\n", + pInfo->name, *pdev); if (MousedRunning(NULL)) break; + xf86Msg(X_INFO, "%s: Moused not Running. Continue.\n", + pInfo->name); } else { /* Check if /dev/mouse is the same as this device. */ if (devMouse && devMouseStat.st_dev == sb.st_dev && @@ -358,13 +364,19 @@ /* If the same, use this device. */ devMouse = FALSE; } + xf86Msg(X_INFO, "%s: Found Device \"%s\"\n", + pInfo->name, *pdev); if (MousedRunning(*pdev)) continue; + xf86Msg(X_INFO, "%s: Moused not Running.\n", + pInfo->name); /* ums(4) does not support anything but SysMouse protocol. */ if (!strncmp(*pdev, DEFAULT_USB_DEV, 8) && protocol && xf86NameCmp(protocol, "auto") != 0 && xf86NameCmp(protocol, "sysmouse") != 0) continue; + xf86Msg(X_INFO, "%s: Select Device \"%s\"\n", + pInfo->name, *pdev); break; } } これを当てた状態で([FreeBSD-users-jp 94010] の mouse.c のパッチは当てず) 再起動後に mousedが走って /dev/ums0 をつかんでいる事を確認した上で、 gdm 経由で X を起動した結果、Xorg.0.log へ下記の様に記録されました。 (II) config/hal: Adding input device USB Mouse (II) LoadModule: "mouse" (II) Loading /usr/local/lib/xorg/modules/input/mouse_drv.so (II) Module mouse: vendor="X.Org Foundation" compiled for 1.7.7, module version = 1.7.1 Module class: X.Org XInput Driver ABI class: X.Org XInput driver, version 7.0 (WW) USB Mouse: No Device specified, looking for one... (II) USB Mouse: Found Device "/dev/sysmouse" (II) USB Mouse: Moused not Running. Continue. (II) USB Mouse: Found Device "/dev/ums0" (II) USB Mouse: Moused not Running. (II) USB Mouse: Select Device "/dev/ums0" (II) USB Mouse: Setting Device option to "/dev/ums0" (--) USB Mouse: Device: "/dev/ums0" (==) USB Mouse: Protocol: "Auto" (**) USB Mouse: always reports core events (**) Option "Device" "/dev/ums0" (EE) xf86OpenSerial: Cannot open device /dev/ums0 Device busy. (EE) USB Mouse: cannot open input device (II) UnloadModule: "mouse" (EE) PreInit returned NULL for "USB Mouse" (EE) config/hal: NewInputDeviceRequest failed (8) 確認後、USBマウスを抜き差しすると下記が記録されました。 (II) config/hal: Adding input device USB Mouse (WW) USB Mouse: No Device specified, looking for one... (II) USB Mouse: Found Device "/dev/sysmouse" (II) USB Mouse: Setting Device option to "/dev/sysmouse" (--) USB Mouse: Device: "/dev/sysmouse" (==) USB Mouse: Protocol: "Auto" (**) USB Mouse: always reports core events (**) Option "Device" "/dev/sysmouse" (==) USB Mouse: Emulate3Buttons, Emulate3Timeout: 50 (**) USB Mouse: ZAxisMapping: buttons 4 and 5 (**) USB Mouse: Buttons: 9 (II) XINPUT: Adding extended input device "USB Mouse" (type: MOUSE) (**) USB Mouse: (accel) keeping acceleration scheme 1 (**) USB Mouse: (accel) acceleration profile 0 (II) USB Mouse: SetupAuto: hw.iftype is 4, hw.model is 0 (II) USB Mouse: SetupAuto: protocol is SysMouse 想像通り、moused が走っているのに 初回では MousedRunning が FALSE を返すようです。 popen はあまり使ったことないので良く分かりませんが、エラーが起きているのかもしれません。 取り合えずここまで... なお、[FreeBSD-users-jp 94010] の mouse.c のパッチを当てると、 「No Device specified」とはならず、素直に認識されます。