Closed digitalsignalperson closed 10 months ago
Hey, first of all, glad that you like rkvm!
So, it looks like we're getting some nonsense values (min being 0 and max -1) for ABS_TOOL_WIDTH
of a device.
This smells like a kernel bug to me.
Anyway, I made a "fix" which tries to detect thee values and reject them. Could you please try building and running the server from the fix-nonsense-abs-min-max branch?
Cool thanks for the quick update. It worked to resolve that particular error, however strangely only my mouse and keyboard get passed to the client, and the touchscreen and pen remain active on the server.
Here's a list of devices shown by libinput debug-events:
sudo libinput debug-events
-event13 DEVICE_ADDED Video Bus seat0 default group1 cap:k
-event0 DEVICE_ADDED Lid Switch seat0 default group2 cap:S
-event2 DEVICE_ADDED Microsoft Surface Type Cover Mouse seat0 default group3 cap:p left scroll-nat scroll-button
-event4 DEVICE_ADDED Microsoft Surface Type Cover Touchpad seat0 default group3 cap:pg size 98x50mm tap(dl off) left scroll-nat scroll-2fg-edge click-buttonareas-clickfinger dwt-on dwtp-on
-event1 DEVICE_ADDED Microsoft Surface Type Cover Keyboard seat0 default group3 cap:kp scroll-nat
-event11 DEVICE_ADDED IPTS 045E:001F Touchscreen seat0 default group4 cap:t size 293x165mm ntouches 1 calib
-event9 DEVICE_ADDED gpio-keys seat0 default group5 cap:k
-event10 DEVICE_ADDED gpio-keys seat0 default group5 cap:k
-event14 DEVICE_ADDED IPTS Touch seat0 default group6 cap:t size 259x171mm ntouches 17 calib
-event15 DEVICE_ADDED IPTS Stylus seat0 default group7 cap:T size 259x171mm calib
-event22 DEVICE_ADDED IPTS 045E:001F Touchscreen seat0 default group8 cap:t size 293x165mm ntouches 1 calib
-event23 DEVICE_ADDED Video Bus seat0 default group9 cap:k
-event24 DEVICE_ADDED gpio-keys seat0 default group10 cap:k
-event25 DEVICE_ADDED gpio-keys seat0 default group11 cap:k
-event30 DEVICE_ADDED Microsoft Surface Type Cover Touchpad seat0 default group12 cap:pg size 98x50mm tap(dl off) left scroll-nat scroll-2fg-edge click-buttonareas-clickfinger dwt-on dwtp-on
-event256 DEVICE_ADDED Microsoft Surface Type Cover Mouse seat0 default group13 cap:p left scroll-nat scroll-button
-event257 DEVICE_ADDED Microsoft Surface Type Cover Keyboard seat0 default group14 cap:kp scroll-nat
-event15 TABLET_TOOL_PROXIMITY +4294967.295s 81.97*/57.26* tilt: 0.00*/0.00* pressure: 0.00* pen (0, id 0x9170) proximity-in axes:pt btn:S
event15 TABLET_TOOL_AXIS +0.087s 81.84*/57.60* tilt: 0.00/0.00 pressure: 0.00
event15 TABLET_TOOL_AXIS +0.177s 81.27*/58.95* tilt: 0.00/0.00 pressure: 0.00
event15 TABLET_TOOL_AXIS +0.430s 81.19*/60.12* tilt: 0.00/0.00 pressure: 0.00
event15 TABLET_TOOL_AXIS +0.597s 82.49*/60.83* tilt: 0.00/0.00 pressure: 0.00
event15 TABLET_TOOL_AXIS +0.670s 83.54*/61.76* tilt: 0.00/0.00 pressure: 0.00
event15 TABLET_TOOL_AXIS +0.731s 83.86*/63.21* tilt: 0.00/0.00 pressure: 0.00
event15 TABLET_TOOL_AXIS +0.747s 83.76*/63.95* tilt: 0.00/0.00 pressure: 0.00
event15 TABLET_TOOL_AXIS +0.761s 83.65*/64.90* tilt: 0.00/0.00 pressure: 0.00
and that event15 at the end was hovering the pen (IPTS Stylus). Also touch would be event14 (IPTS Touch)
Here's the output from running the sever:
sudo target/release/rkvm-server /etc/rkvm/server.toml
[INFO rkvm_server::server] Listening on 0.0.0.0:5258
[INFO rkvm_server::server] Registered new device 0 (name "IPTS 045E:001F", vendor 1118, product 31, version 0)
[INFO rkvm_server::server] Registered new device 1 (name "IPTS 045E:001F Touchscreen", vendor 1118, product 31, version 0)
[INFO rkvm_server::server] Registered new device 2 (name "Video Bus", vendor 0, product 6, version 0)
[INFO rkvm_server::server] Registered new device 3 (name "gpio-keys", vendor 1, product 1, version 256)
[INFO rkvm_server::server] Registered new device 4 (name "gpio-keys", vendor 1, product 1, version 256)
[INFO rkvm_server::server] Registered new device 5 (name "PC Speaker", vendor 31, product 1, version 256)
[WARN rkvm_input::interceptor] Detected nonsense min (0) and max (-1) values for absolute axis 40, disabling it
[INFO rkvm_server::server] Registered new device 6 (name "Microsoft Surface Type Cover UNKNOWN", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 7 (name "Microsoft Surface Type Cover UNKNOWN", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 8 (name "Microsoft Surface Type Cover UNKNOWN", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 9 (name "Microsoft Surface Type Cover Touchpad", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 10 (name "Microsoft Surface Type Cover UNKNOWN", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 11 (name "Microsoft Surface Type Cover Mouse", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 12 (name "Microsoft Surface Type Cover Keyboard", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] 192.168.0.24:47960: Connected
[INFO rkvm_server::server] 192.168.0.24:47960: TLS connected
[INFO rkvm_server::server] 192.168.0.24:47960: Authenticated successfully
It doesn't seem to list the names those specific IPTS devices.
This is definitely a bit of a niche, where this kernel and ipts daemon are needed for touch and pen on these devices: https://github.com/linux-surface/linux-surface https://github.com/linux-surface/iptsd
But I can confirm in general the touch and pen work with rkvm on my ASUS laptop running linux
Can you please show me all the "Supported events" of the missing IPTS devices as reported by evtest
?
Also their paths would be useful too. rkvm only looks for/dev/input*
devices. If it's somewhere else, it won't see it.
The paths
sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Microsoft Surface Type Cover Keyboard
/dev/input/event10: gpio-keys
/dev/input/event11: IPTS 045E:001F Touchscreen
/dev/input/event12: IPTS 045E:001F Touchscreen
/dev/input/event13: Video Bus
/dev/input/event14: IPTS 045E:001F
/dev/input/event15: IPTS Touch
/dev/input/event16: HDA Intel PCH Mic
/dev/input/event17: HDA Intel PCH Headphone
/dev/input/event18: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event19: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event2: Microsoft Surface Type Cover Mouse
/dev/input/event20: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event21: IPTS 045E:001F
/dev/input/event22: IPTS Stylus
/dev/input/event23: Video Bus
/dev/input/event24: gpio-keys
/dev/input/event25: gpio-keys
/dev/input/event256: Microsoft Surface Type Cover Mouse
/dev/input/event257: Microsoft Surface Type Cover Keyboard
/dev/input/event26: PC Speaker
/dev/input/event27: Microsoft Surface Type Cover UNKNOWN
/dev/input/event28: Microsoft Surface Type Cover UNKNOWN
/dev/input/event29: Microsoft Surface Type Cover UNKNOWN
/dev/input/event3: Microsoft Surface Type Cover UNKNOWN
/dev/input/event30: Microsoft Surface Type Cover Touchpad
/dev/input/event31: Microsoft Surface Type Cover UNKNOWN
/dev/input/event4: Microsoft Surface Type Cover Touchpad
/dev/input/event5: Microsoft Surface Type Cover UNKNOWN
/dev/input/event6: Microsoft Surface Type Cover UNKNOWN
/dev/input/event7: Microsoft Surface Type Cover UNKNOWN
/dev/input/event8: PC Speaker
/dev/input/event9: gpio-keys
So according to this (slightly different than reported by libinput)
and the supported events
Select the device event number [0-257]: 15
Input driver version is 1.0.1
Input device ID: bus 0x6 vendor 0x45e product 0x1f version 0x0
Input device name: "IPTS Touch"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 330 (BTN_TOUCH)
Event type 3 (EV_ABS)
Event code 0 (ABS_X)
Value 0
Min 0
Max 9600
Resolution 37
Event code 1 (ABS_Y)
Value 0
Min 0
Max 7200
Resolution 42
Event code 47 (ABS_MT_SLOT)
Value 0
Min 0
Max 16
Event code 48 (ABS_MT_TOUCH_MAJOR)
Value 0
Min 0
Max 12000
Resolution 38
Event code 49 (ABS_MT_TOUCH_MINOR)
Value 0
Min 0
Max 12000
Resolution 38
Event code 52 (ABS_MT_ORIENTATION)
Value 0
Min 0
Max 180
Event code 53 (ABS_MT_POSITION_X)
Value 0
Min 0
Max 9600
Resolution 37
Event code 54 (ABS_MT_POSITION_Y)
Value 0
Min 0
Max 7200
Resolution 42
Event code 57 (ABS_MT_TRACKING_ID)
Value 0
Min 0
Max 65535
Properties:
Property type 1 (INPUT_PROP_DIRECT)
and
Select the device event number [0-257]: 22
Input driver version is 1.0.1
Input device ID: bus 0x6 vendor 0x45e product 0x1f version 0x0
Input device name: "IPTS Stylus"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 320 (BTN_TOOL_PEN)
Event code 321 (BTN_TOOL_RUBBER)
Event code 330 (BTN_TOUCH)
Event code 331 (BTN_STYLUS)
Event type 3 (EV_ABS)
Event code 0 (ABS_X)
Value 0
Min 0
Max 9600
Resolution 37
Event code 1 (ABS_Y)
Value 0
Min 0
Max 7200
Resolution 42
Event code 24 (ABS_PRESSURE)
Value 0
Min 0
Max 4096
Event code 26 (ABS_TILT_X)
Value 0
Min -9000
Max 9000
Resolution 5730
Event code 27 (ABS_TILT_Y)
Value 0
Min -9000
Max 9000
Resolution 5730
Event code 40 (ABS_MISC)
Value 0
Min 0
Max 65535
Properties:
Property type 0 (INPUT_PROP_POINTER)
Property type 1 (INPUT_PROP_DIRECT)
and I can use touch or the stylus during those evtest and see events.
Edit: smaller list of devices when the server is not running
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Microsoft Surface Type Cover Keyboard
/dev/input/event10: gpio-keys
/dev/input/event11: IPTS 045E:001F Touchscreen
/dev/input/event13: Video Bus
/dev/input/event15: IPTS Touch
/dev/input/event16: HDA Intel PCH Mic
/dev/input/event17: HDA Intel PCH Headphone
/dev/input/event18: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event19: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event2: Microsoft Surface Type Cover Mouse
/dev/input/event20: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event21: IPTS 045E:001F
/dev/input/event22: IPTS Stylus
/dev/input/event3: Microsoft Surface Type Cover UNKNOWN
/dev/input/event4: Microsoft Surface Type Cover Touchpad
/dev/input/event5: Microsoft Surface Type Cover UNKNOWN
/dev/input/event6: Microsoft Surface Type Cover UNKNOWN
/dev/input/event7: Microsoft Surface Type Cover UNKNOWN
/dev/input/event8: PC Speaker
/dev/input/event9: gpio-keys
I understand why is that happenning.
The device has a bus type BUS_VIRTUAL
since it's created by the userspace daemon.
But rkvm also sets bus type to BUS_VIRTUAL
for its own devices and, in order to prevent intercepting itself, refuses to use devices with this bus type.
The fix should be simple, I'll take a look at it today or in the next few days.
Should be fixed on latest master. Please give it a try and let me know.
Thanks, I think it's all working! The responsiveness of remote pen sharing feels really good like zero-latency.
But I think there's a new bug with it. When pressing the Enter key to start rkvm in the terminal, the key release event is somehow eaten by rkvm. The result is after I start the server, it immediately starts spamming newlines in the terminal
> target/release/rkvm-server /etc/rkvm/server.toml
[INFO rkvm_server::server] Listening on 0.0.0.0:5258
[INFO rkvm_server::server] Registered new device 0 (name "IPTS Stylus", vendor 1118, product 31, version 0)
[INFO rkvm_server::server] Registered new device 1 (name "IPTS Touch", vendor 1118, product 31, version 0)
[WARN rkvm_input::interceptor] Detected nonsense min (0) and max (-1) values for absolute axis 40, disabling it
[INFO rkvm_server::server] Registered new device 2 (name "Microsoft Surface Type Cover UNKNOWN", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 3 (name "Microsoft Surface Type Cover UNKNOWN", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 4 (name "Microsoft Surface Type Cover UNKNOWN", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 5 (name "Microsoft Surface Type Cover Touchpad", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 6 (name "Microsoft Surface Type Cover UNKNOWN", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 7 (name "Microsoft Surface Type Cover Mouse", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 8 (name "Microsoft Surface Type Cover Keyboard", vendor 1118, product 2024, version 273)
[INFO rkvm_server::server] Registered new device 9 (name "IPTS 045E:001F", vendor 1118, product 31, version 0)
[INFO rkvm_server::server] Registered new device 10 (name "gpio-keys", vendor 1, product 1, version 256)
[INFO rkvm_server::server] Registered new device 11 (name "IPTS 045E:001F Touchscreen", vendor 1118, product 31, version 0)
[INFO rkvm_server::server] Registered new device 12 (name "gpio-keys", vendor 1, product 1, version 256)
[INFO rkvm_server::server] Registered new device 13 (name "PC Speaker", vendor 31, product 1, version 256)
[INFO rkvm_server::server] Registered new device 14 (name "Video Bus", vendor 0, product 6, version 0)
[INFO rkvm_server::server] 192.168.0.24:46234: Connected
[INFO rkvm_server::server] 192.168.0.24:46234: TLS connected
[INFO rkvm_server::server] 192.168.0.24:46234: Authenticated successfully
(continue spamming newlines from here on)
Looking at libinput-debug events
I can see the "pressed" event before the DEVICE_ADDED stuff, corresponding to me pressing the Enter key in the terminal to start rkvm, and it doesn't have a matched "released".
event12 KEYBOARD_KEY +17.302s *** (-1) pressed
-event29 DEVICE_ADDED Microsoft Surface Type Cover Keyboard seat0 default group17 cap:kp scroll-nat
-event21 DEVICE_ADDED IPTS Stylus seat0 default group18 cap:T size 259x171mm calib
-event28 DEVICE_ADDED Microsoft Surface Type Cover Mouse seat0 default group19 cap:p left scroll-nat scroll-button
-event22 DEVICE_ADDED IPTS Touch seat0 default group20 cap:t size 259x171mm ntouches 17 calib
-event26 DEVICE_ADDED Microsoft Surface Type Cover Touchpad seat0 default group21 cap:pg size 98x50mm tap(dl off) left scroll-nat scroll-2fg-edge click-buttonareas-clickfinger dwt-on dwtp-on
-event257 DEVICE_ADDED gpio-keys seat0 default group22 cap:k
-event31 DEVICE_ADDED gpio-keys seat0 default group23 cap:k
-event259 DEVICE_ADDED Video Bus seat0 default group24 cap:k
-event256 DEVICE_ADDED IPTS 045E:001F Touchscreen seat0 default group25 cap:t size 293x165mm ntouches 1 calib
-event29 KEYBOARD_KEY +19.162s *** (-1) pressed
event29 KEYBOARD_KEY +19.322s *** (-1) released
The final " (-1) pressed" and " (-1) released" is me hitting the Enter key again after it's started up.
Here's what sudo journalctl -f
looks like when starting the server:
Aug 29 19:46:06 sp5 kernel: input: IPTS Stylus as /devices/virtual/input/input150
Aug 29 19:46:06 sp5 kernel: input: IPTS Touch as /devices/virtual/input/input151
Aug 29 19:46:06 sp5 kernel: input: Microsoft Surface Type Cover UNKNOWN as /devices/virtual/input/input152
Aug 29 19:46:06 sp5 kernel: input: Microsoft Surface Type Cover UNKNOWN as /devices/virtual/input/input153
Aug 29 19:46:06 sp5 kernel: input: Microsoft Surface Type Cover UNKNOWN as /devices/virtual/input/input154
Aug 29 19:46:06 sp5 kernel: input: Microsoft Surface Type Cover Touchpad as /devices/virtual/input/input155
Aug 29 19:46:06 sp5 kernel: input: Microsoft Surface Type Cover UNKNOWN as /devices/virtual/input/input156
Aug 29 19:46:06 sp5 kernel: input: Microsoft Surface Type Cover Mouse as /devices/virtual/input/input157
Aug 29 19:46:06 sp5 kernel: input: Microsoft Surface Type Cover Keyboard as /devices/virtual/input/input158
Aug 29 19:46:06 sp5 systemd-logind[1033]: Watching system buttons on /dev/input/event29 (Microsoft Surface Type Cover Keyboard)
Aug 29 19:46:07 sp5 kwin_wayland_wrapper[1674]: [dix] couldn't enable device 11
Aug 29 19:46:07 sp5 kwin_wayland_wrapper[1674]: [dix] couldn't enable device 12
Aug 29 19:46:07 sp5 kwin_wayland_wrapper[1674]: [dix] couldn't enable device 13
Aug 29 19:46:07 sp5 kernel: input: IPTS 045E:001F as /devices/virtual/input/input159
Aug 29 19:46:07 sp5 kernel: input: gpio-keys as /devices/virtual/input/input160
Aug 29 19:46:07 sp5 kernel: input: IPTS 045E:001F Touchscreen as /devices/virtual/input/input161
Aug 29 19:46:07 sp5 kernel: input: gpio-keys as /devices/virtual/input/input162
Aug 29 19:46:07 sp5 kernel: input: PC Speaker as /devices/virtual/input/input163
Aug 29 19:46:07 sp5 kernel: input: Video Bus as /devices/virtual/input/input164
Aug 29 19:46:07 sp5 systemd-logind[1033]: Watching system buttons on /dev/input/event31 (gpio-keys)
Yeah, this is an old problem caused by a race condition. It can be fixed by adding a short sleep. Please open a new issue for this, thanks.
journalctl log:
Also thanks for the tool. With another system as the server where it works I'm impressed that touch and pen inputs work so well, even with multiple screens. I might rig up some video streaming to go with the key switch, and then it's a new and improved Weylus.