> > > >
> > > So move the guest mouse pointer to (0, 0) of the screen when connect the
> > > > VNC, and then move the mouse pointer to the cursor of VNC(absolute
> > > > coordinates are also relative coordinates).
> > > >
> > > >
> > > It's hardly a solution, you still have no clue what will be the guest
> > mouse
> > > position.
> >
> > We have no clue what will be the guest mouse position, we can move the
> > guest
> > mouse to (0,0) each connect the VNC. Now, the cursor of VNC will be the
> > relative coordinates. In a way, this is a quirk to know the guest mouse
> > position.
> >
>
> There is no guarantee the guest pointer will be at (0,0) though, and that
> doesn't explain how that would help. Which client are you using? Are you
> drawing the guest cursor? This can't be done currently with the lack of a
> message to tell the guest mouse position. (moving / sync-ing the client
> cursor position would be even worse in many ways)

Sorry, my description isn't accurate.

When connect the vnc server,
    vnc_connect
      -> vs->last_x = -1;
      -> vs->last_y = -1;

move client cursor to vnc screen,
    vnc_client_io
      ->vnc_client_read
        ->protocol_client_msg
          ->pointer_event(x,y)
            -> qemu_input_queue_rel(con, INPUT_AXIS_X, 0 - width);
            -> qemu_input_queue_rel(con, INPUT_AXIS_Y, 0 - height);
            -> x=0,y=0
            -> vs->last_x = x;vs->last_y = y;
            -> qemu_input_event_sync   // this will inform the guest move to 
(0, 0)

the next event,
          ->pointer_event(x,y)
            -> qemu_input_queue_rel(con, INPUT_AXIS_X, x - vs->last_x);
            -> qemu_input_queue_rel(con, INPUT_AXIS_X, x - vs->last_x);
            -> qemu_input_event_sync    // this will inform the guest from 
(0,0) move to (x,y),
                                                                 // the client 
cursor and guest mouse will sync.

and if the resolution is high, alse need increace the queue size of ps2 
PS2_QUEUE_SIZE.
Otherwise, if the guest mouse far from the (0,0) before vnc connect, it can't 
move to (0,0).

>
> > >
> > >
> > > > On windows VM, also need disable "Enhance Pointer Precision" Option in
> > > > "Pointer Options" (Control Panel -> Mouse).
> > > >
> > > >
> > > Apparently, this option doesn't have much to do with relative mouse
> > motion.
> > > Can you explain what it does with this change?
> >
> > Emmm, I don't know why this can solve the problem. It's quite effective and
> > get this way from
> >
> > https://forum.proxmox.com/threads/is-it-possible-not-to-use-usbdevice-tablet.1498/
> > .
> >
> > Only use this way, we need to manually align the VNC cursor with the guest
> > mouse.
> >
>
> It's a bit vague what the "VNC cursor" mean. If you mean the client cursor
> position, there is no way to align / sync with the guest without an extra
> message to inform the client of its position. There is even a comment about
> that in vnc.c  /* can we ask the client(s) to move the pointer ??? */)

Sorry, I mean the client cursor position. I found disable "Enhance Pointer 
Precision"
Option, move cursor to the bound of the VNC screen, they maybe align.

>
>
> > >
> > > Which guest OS are you using? Hopefully they all support either
> > usb-tablet
> > > or vmmouse extension for absolute positioning. Otherwise, I'd suggest
> > using
> > > Spice, which has those messages for client side guest-mouse drawing.
> > >
> >
> > Yeah, I know the best way is use a absolute positioning. We need remove
> > all usb devices,
> > I can only use the PS/2 mouse.
> >
>
> Can't you use vmmouse extension?

Thanks, I will try it. I cann't found the official driver of vmmouse, can I
install it for free?

Reply via email to