htrefil / rkvm

Virtual KVM switch for Linux machines
MIT License
386 stars 50 forks source link

server failing to start with "kernel: uinput: invalid abs[28] min:0 max:-1" and "rkvm-server[4238]: [ERROR rkvm_server] Error: Input error: Invalid argument (os error 22)" #45

Closed digitalsignalperson closed 10 months ago

digitalsignalperson commented 10 months ago

journalctl log:

Aug 23 21:45:50 archgen systemd[1]: rkvm-server.service: Scheduled restart job, restart counter is at 5.
Aug 23 21:45:50 archgen systemd[1]: Started rkvm server.
Aug 23 21:45:50 archgen rkvm-server[4238]: [INFO  rkvm_server::server] Listening on 0.0.0.0:5258
Aug 23 21:45:50 archgen rkvm-server[4238]: [INFO  rkvm_server::server] Registered new device 0 (name "Video Bus", vendor 0, product 6, version 0)
Aug 23 21:45:50 archgen rkvm-server[4238]: [INFO  rkvm_server::server] Registered new device 1 (name "IPTS 045E:001F", vendor 1118, product 31, version 0)
Aug 23 21:45:50 archgen kernel: input: Video Bus as /devices/virtual/input/input65
Aug 23 21:45:50 archgen kernel: input: IPTS 045E:001F as /devices/virtual/input/input66
Aug 23 21:45:50 archgen rkvm-server[4238]: [INFO  rkvm_server::server] Registered new device 2 (name "IPTS 045E:001F Touchscreen", vendor 1118, product 31, version 0)
Aug 23 21:45:50 archgen rkvm-server[4238]: [INFO  rkvm_server::server] Registered new device 3 (name "gpio-keys", vendor 1, product 1, version 256)
Aug 23 21:45:50 archgen kernel: input: IPTS 045E:001F Touchscreen as /devices/virtual/input/input67
Aug 23 21:45:50 archgen kernel: input: gpio-keys as /devices/virtual/input/input68
Aug 23 21:45:50 archgen kernel: input: gpio-keys as /devices/virtual/input/input69
Aug 23 21:45:50 archgen kernel: input: PC Speaker as /devices/virtual/input/input70
Aug 23 21:45:50 archgen rkvm-server[4238]: [INFO  rkvm_server::server] Registered new device 4 (name "gpio-keys", vendor 1, product 1, version 256)
Aug 23 21:45:50 archgen rkvm-server[4238]: [INFO  rkvm_server::server] Registered new device 5 (name "PC Speaker", vendor 31, product 1, version 256)
Aug 23 21:45:50 archgen kernel: uinput: invalid abs[28] min:0 max:-1
Aug 23 21:45:50 archgen systemd-logind[1080]: Watching system buttons on /dev/input/event24 (gpio-keys)
Aug 23 21:45:50 archgen rkvm-server[4238]: [ERROR rkvm_server] Error: Input error: Invalid argument (os error 22)
Aug 23 21:45:51 archgen systemd[1]: rkvm-server.service: Main process exited, code=exited, status=1/FAILURE
Aug 23 21:45:51 archgen systemd[1]: rkvm-server.service: Failed with result 'exit-code'.

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.

htrefil commented 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?

digitalsignalperson commented 10 months ago

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

htrefil commented 10 months ago

Can you please show me all the "Supported events" of the missing IPTS devices as reported by evtest?

htrefil commented 10 months ago

Also their paths would be useful too. rkvm only looks for/dev/input* devices. If it's somewhere else, it won't see it.

digitalsignalperson commented 10 months ago

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
htrefil commented 10 months ago

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.

htrefil commented 10 months ago

Should be fixed on latest master. Please give it a try and let me know.

digitalsignalperson commented 10 months ago

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)
htrefil commented 10 months ago

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.