NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

xsrc/57424: Very very slow speed of X mouse pointer movement when connecting Digitizer/Pen Tablet on NetBSD 10



>Number:         57424
>Category:       xsrc
>Synopsis:       Very very slow speed of X mouse pointer movement when connecting Digitizer/Pen Tablet on NetBSD 10
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    xsrc-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat May 20 06:25:00 +0000 2023
>Originator:     Yasushi Oshima
>Release:        netbsd-10
>Organization:
>Environment:
NetBSD kinkan 10.0_BETA NetBSD 10.0_BETA (GENERIC) #0: Thu May  4 18:57:28 UTC 2023  mkrepro%mkrepro.NetBSD.org@localhost:/usr/src/sys/arch/amd64/compile/GENERIC amd64
>Description:
I use a normal mouse device and a Pen tablet connected at the same time.
NetBSD 10 detects the following:

uhidev2 at uhub1 port 4 configuration 1 interface 0
uhidev2: Lenovo (0x17ef) TrackPoint Keyboard II (0x60ee), rev 2.00/1.27, addr 24, iclass 3/1
ukbd1 at uhidev2
wskbd1 at ukbd1 mux 1
wskbd1: connecting to wsdisplay0
uhidev3 at uhub1 port 4 configuration 1 interface 1
uhidev3: Lenovo (0x17ef) TrackPoint Keyboard II (0x60ee), rev 2.00/1.27, addr 24, iclass 3/1
uhidev3: 22 report ids
ums0 at uhidev3 reportid 1: 3 buttons, W and Z dirs
wsmouse0 at ums0 mux 0
uhid2 at uhidev3 reportid 5: input=1, output=0, feature=0
uhid3 at uhidev3 reportid 16: input=2, output=0, feature=0
uhid4 at uhidev3 reportid 18: input=1, output=0, feature=0
uhid5 at uhidev3 reportid 19: input=7, output=0, feature=7
uhid6 at uhidev3 reportid 21: input=2, output=0, feature=0
uhid7 at uhidev3 reportid 22: input=2, output=0, feature=0
uhidev4 at uhub1 port 4 configuration 1 interface 2
uhidev4: Lenovo (0x17ef) TrackPoint Keyboard II (0x60ee), rev 2.00/1.27, addr 24, iclass 3/0
uhidev4: 4 report ids
uhid8 at uhidev4 reportid 4: input=0, output=0, feature=31
uhidev5 at uhub1 port 3 configuration 1 interface 0
uhidev5: UGTABLET (0x28bd) 10 inch PenTablet (0x0932), rev 2.00/0.00, addr 25, iclass 3/1
uhidev5: 9 report ids
ukbd2 at uhidev5 reportid 6
wskbd2 at ukbd2 mux 1
wskbd2: connecting to wsdisplay0
ums1 at uhidev5 reportid 9: 3 buttons
wsmouse1 at ums1 mux 0
uhidev6 at uhub1 port 3 configuration 1 interface 1
uhidev6: UGTABLET (0x28bd) 10 inch PenTablet (0x0932), rev 2.00/0.00, addr 25, iclass 3/1
uhidev6: 7 report ids
ums2 at uhidev6 reportid 7: 3 buttons digitizer, tip, barrel, eraser
wsmouse2 at ums2 mux 0
uhidev7 at uhub1 port 3 configuration 1 interface 2
uhidev7: UGTABLET (0x28bd) 10 inch PenTablet (0x0932), rev 2.00/0.00, addr 25, iclass 3/0
uhidev7: 2 report ids
uhid9 at uhidev7 reportid 2: input=11, output=9, feature=0


This wsmouse0 at ums0 is a USB-connected TrackPoint, normal relative mode device(a general mouse),
wsmouse1 at ums1 and wsmouse2 at ums2 are pen tablets with the following USB connections:

https://www.xp-pen.com/product/905.html

(Two devices are detected, The wsmouse2 at ums2 is a REAL pen stylus device but the wsmouse1 at ums1 is unresponsive. Probably this will be for the other model with touch panel device).

When Xserver is started, Three xinput devices are detected.

xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ /dev/wsmouse1                             id=7    [slave  pointer  (2)]
⎜   ↳ /dev/wsmouse2                             id=8    [slave  pointer  (2)]
⎜   ↳ /dev/wsmouse                              id=9    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ /dev/wskbd                                id=6    [slave  keyboard (3)]


Both the general mouse  and tablets can be used with X pointers, but the movement speed of the mouse will be very, very-very slow.
I tried this with several another mice and all the same.

It does not happen when general mice only, without pen tablet connected.

And not happen when NetBSD-9.x.


One reason for this, NetBSD-10 uses xf86-input-ws driver for wsmouse device and try automatic detects devices as default.

xf86-input-ws seems to work as follows:

1. When if find the absolute pointer device, make a unique x-input-device.
2. When if absolute pointer device, make a scale paramater and set to the device properties.
   This can see with xinput list-props command:

% xinput list-props /dev/wsmouse2
Device '/dev/wsmouse2':
        Device Enabled (161):   1
        Coordinate Transformation Matrix (163): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (270):     0
        Device Accel Constant Deceleration (271):       1.000000
        Device Accel Adaptive Deceleration (272):       1.000000
        Device Accel Velocity Scaling (273):    10.000000
        WS Pointer Axis Calibration (274):      0, 32767, 0, 32767
        WS Pointer Axes Swap (275):     0
        WS Pointer Middle Button Emulation (276):       2
        WS Pointer Middle Button Timeout (277): 50

The 'WS Pointer Axis Calibration (274)' was set to 0,32767,0,32767 which is the logical resolution of this tablet.

The same scale parameter was set at the /dev/wsmouse (wsmux device). Why? 

$ xnput list-props /dev/wsmouse
Device '/dev/wsmouse':
        Device Enabled (161):   1
        Coordinate Transformation Matrix (163): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (270):     0
        Device Accel Constant Deceleration (271):       1.000000
        Device Accel Adaptive Deceleration (272):       1.000000
        Device Accel Velocity Scaling (273):    10.000000
        WS Pointer Axis Calibration (274):      0, 32767, 0, 32767
        WS Pointer Axes Swap (275):     0
        WS Pointer Middle Button Emulation (276):       2
        WS Pointer Middle Button Timeout (277): 50

When starting X server without any pen tablets, the xinput device is only one, and not set a scale parameter.

% xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ /dev/wsmouse                              id=7    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ /dev/wskbd                                id=6    [slave  keyboard (3)]
% xinput list-props /dev/wsmouse
Device '/dev/wsmouse':
        Device Enabled (161):   1
        Coordinate Transformation Matrix (163): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (268):     0
        Device Accel Constant Deceleration (269):       1.000000
        Device Accel Adaptive Deceleration (270):       1.000000
        Device Accel Velocity Scaling (271):    10.000000
        WS Pointer Middle Button Emulation (272):       2
        WS Pointer Middle Button Timeout (273): 50


When starting X server with a pentablet, cannot delete/remove this scale parameter but can change it.
So I try to change with screen-resolutions. 

% xinput set-prop /dev/wsmouse 274 0 1920 0 1080
% kinkan% xinput list-props /dev/wsmouse
Device '/dev/wsmouse':
        Device Enabled (161):   1
        Coordinate Transformation Matrix (163): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (270):     0
        Device Accel Constant Deceleration (271):       1.000000
        Device Accel Adaptive Deceleration (272):       1.000000
        Device Accel Velocity Scaling (273):    10.000000
        WS Pointer Axis Calibration (274):      0, 1920, 0, 1080
        WS Pointer Axes Swap (275):     0
        WS Pointer Middle Button Emulation (276):       2
        WS Pointer Middle Button Timeout (277): 50

However, a speed of the mouse is still very slow.

But, Suprisingly, when change the scale parameter for /dev/wsmouse1 which is NOT real exists, the mouse(connected to wsmouse0) speed has become normal!

% xinput set-prop /dev/wsmouse1 274 0 1920 0 1080
% kinkan% xinput list-props /dev/wsmouse1
Device '/dev/wsmouse':
        Device Enabled (161):   1
        Coordinate Transformation Matrix (163): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (270):     0
        Device Accel Constant Deceleration (271):       1.000000
        Device Accel Adaptive Deceleration (272):       1.000000
        Device Accel Velocity Scaling (273):    10.000000
        WS Pointer Axis Calibration (274):      0, 1920, 0, 1080
        WS Pointer Axes Swap (275):     0
        WS Pointer Middle Button Emulation (276):       2
        WS Pointer Middle Button Timeout (277): 50

I don't know why wsmouse1 has used for the mouse.


>From above, I think the way for detect or control devices in xf86-input-ws has some problems.

In Xorg.0.log:

[ 10653.479] (II) config/wscons: checking input device /dev/wsmouse1
[ 10653.479] (II) LoadModule: "ws"
[ 10653.479] (II) Loading /usr/X11R7/lib/modules/drivers/ws_drv.so
[ 10653.479] (II) Module ws: vendor="X.Org Foundation"
[ 10653.479]    compiled for 1.21.1.8, module version = 1.3.0
[ 10653.479]    Module class: X.Org XInput Driver
[ 10653.479]    ABI class: X.Org XInput driver, version 24.4
[ 10653.479] (II) Using input driver 'ws' for '/dev/wsmouse1'
[ 10653.479] (**) /dev/wsmouse1: always reports core events
[ 10653.479] (II) /dev/wsmouse1: debuglevel 0
[ 10653.479] (**) /dev/wsmouse1: ZAxisMapping: buttons 4 and 5
[ 10653.479] (**) /dev/wsmouse1 associated screen: 0
[ 10653.479] (**) Option "Device" "/dev/wsmouse1"
[ 10653.479] (**) /dev/wsmouse1 device will work in raw mode
[ 10653.479] (II) /dev/wsmouse1 minimum x position: 0
[ 10653.479] (II) /dev/wsmouse1 maximum x position: 32767
[ 10653.480] (II) /dev/wsmouse1 minimum y position: 0
[ 10653.480] (II) /dev/wsmouse1 maximum y position: 32767
[ 10653.480] (**) /dev/wsmouse1: Buttons: 5
[ 10653.480] (II) XINPUT: Adding extended input device "/dev/wsmouse1" (type: TOUCHSCREEN, id 7)
[ 10653.480] (**) /dev/wsmouse1: (accel) keeping acceleration scheme 1
[ 10653.480] (**) /dev/wsmouse1: (accel) acceleration profile 0
[ 10653.480] (**) /dev/wsmouse1: (accel) acceleration factor: 2.000
[ 10653.480] (**) /dev/wsmouse1: (accel) acceleration threshold: 4
[ 10653.481] (II) config/wscons: checking input device /dev/wsmouse2
[ 10653.481] (II) Using input driver 'ws' for '/dev/wsmouse2'
[ 10653.481] (**) /dev/wsmouse2: always reports core events
[ 10653.481] (II) /dev/wsmouse2: debuglevel 0
[ 10653.481] (**) /dev/wsmouse2: ZAxisMapping: buttons 4 and 5
[ 10653.481] (**) /dev/wsmouse2 associated screen: 0
[ 10653.481] (**) Option "Device" "/dev/wsmouse2"
[ 10653.481] (**) /dev/wsmouse2 device will work in raw mode
[ 10653.481] (II) /dev/wsmouse2 minimum x position: 0
[ 10653.481] (II) /dev/wsmouse2 maximum x position: 32767
[ 10653.481] (II) /dev/wsmouse2 minimum y position: 0
[ 10653.481] (II) /dev/wsmouse2 maximum y position: 32767
[ 10653.481] (**) /dev/wsmouse2: Buttons: 5
[ 10653.482] (II) XINPUT: Adding extended input device "/dev/wsmouse2" (type: TOUCHSCREEN, id 8)
[ 10653.482] (**) /dev/wsmouse2: (accel) keeping acceleration scheme 1
[ 10653.482] (**) /dev/wsmouse2: (accel) acceleration profile 0
[ 10653.482] (**) /dev/wsmouse2: (accel) acceleration factor: 2.000
[ 10653.482] (**) /dev/wsmouse2: (accel) acceleration threshold: 4
[ 10653.482] (II) config/wscons: checking input device /dev/wsmouse
[ 10653.482] (II) Using input driver 'ws' for '/dev/wsmouse'
[ 10653.482] (**) /dev/wsmouse: always reports core events
[ 10653.482] (II) /dev/wsmouse: debuglevel 0
[ 10653.482] (**) /dev/wsmouse: ZAxisMapping: buttons 4 and 5
[ 10653.482] (**) /dev/wsmouse associated screen: 0
[ 10653.482] (**) Option "Device" "/dev/wsmouse"
[ 10653.483] (**) /dev/wsmouse device will work in raw mode
[ 10653.483] (II) /dev/wsmouse minimum x position: 0
[ 10653.483] (II) /dev/wsmouse maximum x position: 32767
[ 10653.483] (II) /dev/wsmouse minimum y position: 0
[ 10653.483] (II) /dev/wsmouse maximum y position: 32767
[ 10653.483] (**) /dev/wsmouse: Buttons: 5
[ 10653.484] (II) XINPUT: Adding extended input device "/dev/wsmouse" (type: TOUCHSCREEN, id 9)
[ 10653.484] (**) /dev/wsmouse: (accel) keeping acceleration scheme 1
[ 10653.484] (**) /dev/wsmouse: (accel) acceleration profile 0
[ 10653.485] (**) /dev/wsmouse: (accel) acceleration factor: 2.000
[ 10653.485] (**) /dev/wsmouse: (accel) acceleration threshold: 4

This show the /dev/wsmouse has detected as type: TOUCHSCREEN and add a scale parameter as an absolute device.

On the other hands, the xf86-input-ws will access to each separate device, but the /dev/wsmouse has still these devices.

# wsmuxctl -f /dev/wsmouse -l
wsmouse0
wsmouse1
wsmouse2

For separate access, I think the wsmouse1 and wsmouse 2 should be detached from wsmouse(wsmux).


In addition, xinput-ws drivcer detects devices automatically only at the startup X-server. 
When connect/disconnet mouse or tablet or keyboard... devices after start, this xinput-ws drivce cannot detect changes so the separate settings for each device will cause confusion.
I think the auto-reconfiguration is not possible with this wsmux method.
>How-To-Repeat:
1. connect a usb mouse for the matchine.
2. connect a Digitizer/Pen Tablet for the machine.
3. startx
4. move the pointer with a mouse.

>Fix:
I don't know for fix xf86-input-ws or automatic adding process on X.

Workaround, disable automatic add device in xorg.conf. thus, xf86-input-ms driver will be used, not xf86-input-ws.

Section "ServerFlags"
       Option "AutoAddDevices" "false"
EndSection

This will become the same as the X in NetBSD-9 or before.
Of course, this cannot set the device specific setting for each device.



Home | Main Index | Thread Index | Old Index