Xorg 7.2 and FreeBSD 6.2-p5 VMWARE vmmouse problem

Bob Finch bob at nas.com
Tue Jan 8 16:06:17 PST 2008


On 10/10/2007, at 17:00:22, Sam Lawrance wrote:
>On 10/07/2007, at 11:53 AM, Webster, Andrew wrote:

>> Howdy,
>>
>>
>>
>> I was successfully able to get Xorg upgraded to 7.2 by just  
>> installing them from scratch as opposed to trying to upgrading an  
>> existing system, BUT I’ve run into a problem…
>>
>>
>>
>> While running VMWare Server 1.0.3 with FreeBSD 6.2-p5 and Xorg 7.2,  
>> the mouse pointer behaves very oddly.
>>
>> The pointer appears in the wrong place on the screen for where the  
>> system actually thinks that it is.
>>
>> I’m using the vmmouse driver part of the Xorg system, as the  
>> regular mouse driver doesn’t appear to work at all, unless some  
>> settings are amiss.
>>
>> I really like the vmmouse drive because you can move the pointer in/ 
>> out of the window as you do with regular windows guest OSes.
>>
>>
>>
>> Has anyone experienced similar problems and/ or know of a fix for  
>> this?
>>
>
>Andrew,
>
>I just set up VMWare Fusion with FreeBSD and have a problem that  
>might be related.  Ascii art time:
>_____________
>|_|         |
>|           |
>|           |
>|___________|
>
>The pointer appears normally on the screen.  However, clicking around  
>the screen does not work except in a small area in the top left  
>corner.  Moving the mouse within this tiny corner seems to scale up  
>and operate on the entire screen.  Eg. if I click and drag across the  
>tiny corner, I can see the selection appear across the entire desktop.
>
>Is this similar to your issue?  Did you find a resolution?

Sam,

I ran into this problem on FreeBSD 7.0 RC1 with Xorg 7.3 using the
VMWare mouse driver (vmmouse).

Apparently, X server 1.4.0 in Xorg 7.3 no longer calls the conversion_proc
function in the mouse driver.  The VMWare mouse driver depends on that
call to scale the mouse coordiates to the screen size.

As a workaround, I fetched the x11-drivers/xf86-input-vmmouse port and
patched src/vmmouse.c by hand before installing it:

bob polaris[9]: diff -u orig/xf86-input-vmmouse-12.4.3/src/vmmouse.c xf86-input-vmmouse-12.4.3/src/vmmouse.c
--- orig/xf86-input-vmmouse-12.4.3/src/vmmouse.c	2007-09-25 16:11:47.000000000 -0700
+++ xf86-input-vmmouse-12.4.3/src/vmmouse.c	2008-01-08 14:58:59.000000000 -0800
@@ -964,8 +964,11 @@
    VMMOUSE_INPUT_DATA  vmmouseInput;
    int ps2Buttons = 0;
    int numPackets;
+   VMMousePrivPtr mPriv;
+   double factorX, factorY;
 
    pMse = pInfo->private;  
+   mPriv = pMse->mousePriv;
    while((numPackets = VMMouseClient_GetInput(&vmmouseInput))){
       if (numPackets == VMMOUSE_ERROR) {
          VMMouseClient_Disable();
@@ -990,6 +993,13 @@
       dy = vmmouseInput.Y; 
       dz = (char)vmmouseInput.Z;
       dw = 0;
+
+      /* X server 1.4.0 does not call VMMouseConvertProc() so we scale coordinates here */
+      factorX = ((double) screenInfo.screens[mPriv->screenNum]->width) / (double) 65535;
+      factorY = ((double) screenInfo.screens[mPriv->screenNum]->height) / (double) 65535;
+      dx = dx * factorX + 0.5;
+      dy = dy * factorY + 0.5;
+
       /* post an event */
       pMse->PostEvent(pInfo, buttons, dx, dy, dz, dw);
    }

-- Bob




More information about the freebsd-questions mailing list