6

Does anyone know about Surface Dial on Linux? Can these functions working on Ubuntu?

  1. Media control (Volume control/next/prev/pause/play).
  2. Add Custom keys with it.
  3. Working on Krita.
  4. Does it work on touchscreen monitors?
3

Interesting topic! I know of no kernel support for this device, but it may just be a question of time. However, implementation in other software and in some cases hardware is another problem.

  1. Theoretically possible with kernel support (not at the moment)
  2. This requires software as well as kernel support, so even less likely.
  3. Again, software support, but for specific projects like Krita, the developers could add support to the source code, if there's kernel support for the hardware.
  4. No! The dial requires dedicated hardware to work with a screen, and just touch sensitivity is not enough to register the dial presence. Theoretically you could accomplish this by installing Linux on the Surface Studio...

This could also be an opportunity to start an Open Source hardware project to create a rotary encoder tool for any OS. Dial and buttons, fully configurable through standardized software.

| improve this answer | |
2

On Kernel 4.19 was added support for Surface Dial https://kernelnewbies.org/Linux_4.19.

| improve this answer | |
1

Surface Dial is being recognised now in Linux with kernel 4.19. evtest is giving now output as follow:

...
/dev/input/event6:      Surface Dial System Multi Axis
/dev/input/event7:      Surface Dial System Control
...

Testing results are as follow:

Select the device event number [0-7]: 6
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x45e product 0x91b version 0x108
Input device name: "Surface Dial System Multi Axis"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 256 (BTN_0)
Event type 2 (EV_REL)
Event code 7 (REL_DIAL)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)

Rotating right:

Event: time 1576958667.062349, -------------- SYN_REPORT ------------
Event: time 1576958667.100180, type 2 (EV_REL), code 7 (REL_DIAL), value 1
Event: time 1576958667.100180, -------------- SYN_REPORT ------------

Rotating left:

Eent: time 1576958712.249904, -------------- SYN_REPORT ------------
Event: time 1576958712.274887, type 2 (EV_REL), code 7 (REL_DIAL), value -1
Event: time 1576958712.274887, -------------- SYN_REPORT ------------

Button press and release

Event: time 1576958828.106521, -------------- SYN_REPORT ------------
Event: time 1576958829.500202, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1576958829.500202, type 1 (EV_KEY), code 256 (BTN_0), value 1
Event: time 1576958829.500202, -------------- SYN_REPORT ------------
Event: time 1576958829.687451, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1576958829.687451, type 1 (EV_KEY), code 256 (BTN_0), value 0
Event: time 1576958829.687451, -------------- SYN_REPORT ------------

How can those events be used in WM KDE? My goal is to use it for scrolling text\webs.

I try experimenting with udev rules to categorise Dial as input device keyboard and then mouse. Neither help, won't produce anything in xev.

Xorg.0.log is showing something like that:

[31.536] (II) config/udev: Adding input device Surface Dial System Multi Axis (/dev/input/event6)
[31.536] (**) Surface Dial System Multi Axis: Applying InputClass "evdev pointer catchall"
[31.536] (**) Surface Dial System Multi Axis: Applying InputClass "libinput pointer catchall"
[31.537] (II) Using input driver 'libinput' for 'Surface Dial System Multi Axis'
[31.537] (**) Surface Dial System Multi Axis: always reports core events
[31.537] (**) Option "Device" "/dev/input/event6"
[31.537] (**) Option "_source" "server/udev"
[31.539] (II) event6  - Surface Dial System Multi Axis: is tagged by udev as: Mouse
[31.539] (II) event6  - Surface Dial System Multi Axis: device is a pointer
[31.540] (II) event6  - Surface Dial System Multi Axis: device removed
[31.575] (**) Option "config_info" "udev:/sys/devices/virtual/misc/uhid/0005:045E:091B.0002/input/input12/event6"
[31.575] (II) XINPUT: Adding extended input device "Surface Dial System Multi Axis" (type: MOUSE, id 12)
[31.577] (**) Option "AccelerationScheme" "none"
[31.579] (**) Surface Dial System Multi Axis: (accel) selected scheme none/0
[31.579] (**) Surface Dial System Multi Axis: (accel) acceleration factor: 2.000
[31.579] (**) Surface Dial System Multi Axis: (accel) acceleration threshold: 4
[31.582] (II) event6  - Surface Dial System Multi Axis: is tagged by udev as: Mouse
[31.583] (II) event6  - Surface Dial System Multi Axis: device is a pointer
[59.464] (II) config/udev: removing device Surface Dial System Multi Axis

How one can make use of those events now to let say control scroll up/down or zoom in/out etc? Unfortunately I do now know how to take it from here.

| improve this answer | |
  • Did you try that on Krita? – ICE Dec 21 '19 at 21:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.