Microsoft Surface Dial на Linux

Кто-нибудь знает про Surface Dial на Linux? Могут ли эти функции работать на Ubuntu?

  1. Регулятор медиа (регулятор громкости / следующий / предыдущий / пауза / воспроизведение).
  2. Добавьте пользовательские ключи с ним.
  3. Работаю на Крите.
  4. Работает ли на сенсорных мониторах?

2 ответа

Решение

Интересная тема! Я не знаю никакой поддержки ядра для этого устройства, но это может быть просто вопросом времени. Однако реализация в другом программном обеспечении и в некоторых случаях аппаратном обеспечении является другой проблемой.

  1. Теоретически возможно с поддержкой ядра (не в данный момент)
  2. Это требует как программного обеспечения, так и поддержки ядра, поэтому еще менее вероятно.
  3. Опять же, поддержка программного обеспечения, но для конкретных проектов, таких как Krita, разработчики могут добавить поддержку исходного кода, если есть поддержка ядра для аппаратного обеспечения.
  4. Нет! Для работы с экраном циферблату требуется специальное аппаратное обеспечение, и одной лишь чувствительности к прикосновению недостаточно для регистрации наличия циферблата. Теоретически это можно сделать, установив Linux на Surface Studio...

Это также может стать возможностью запустить аппаратный проект с открытым исходным кодом, чтобы создать инструмент с вращающимся кодировщиком для любой ОС. Циферблат и кнопки, полностью настраиваемые с помощью стандартизированного программного обеспечения.

В ядре 4.19 была добавлена ​​поддержка Surface Dial https://kernelnewbies.org/Linux_4.19.

Surface Dial теперь распознается в Linux с ядром 4.19. evtest дает следующий вывод:

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

Результаты тестирования следующие:

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)

Вращающийся вправо:

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 ------------

Вращение влево:

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 ------------

Нажмите и отпустите кнопку

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 ------------

Как можно использовать эти события в WM KDE? Моя цель - использовать его для прокрутки текста \ веб-страниц.

Я пытаюсь поэкспериментировать с правилами udev, чтобы классифицировать Dial как клавиатуру, а затем как мышь. Ни помогите, в xev ничего не выдаст.

Xorg.0.log показывает что-то вроде этого:

[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

Как можно использовать эти события сейчас, чтобы, скажем, управлять прокруткой вверх / вниз или увеличением / уменьшением и т. Д.? К сожалению, теперь я знаю, как это сделать.

Другие вопросы по тегам