模拟手写笔输入

时间:2016-01-20 09:19:10

标签: linux input simulate wacom

我正在寻找一种方法将wacom输入注入正在运行的X服务器。我有点陷入困境,一开始就找到关于这个主题的任何资源。

有很多关于如何注入击键和鼠标输入的信息,但这不是我想要的东西,它似乎并没有模仿wacom的东西。

有没有人有关于这个主题的任何信息?

1 个答案:

答案 0 :(得分:2)

  

在Linux上,各种输入设备生成variety of events

例如,

Keyboards - EV_KEY
Mice      - EV_REL
Tablets   - EV_ABS

任何特定输入设备支持/生成的事件都可以通过在连接了输入设备的系统上运行 xinput 来识别,如下所示:

xinput --list <name of the connected input device>

通过连接Wacom数位板创建的输入设备示例列表:

$ > xinput --list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=14   [slave  pointer  (2)]
⎜   ↳ Wacom Intuos4 6x9 eraser                  id=17   [slave  pointer  (2)]
⎜   ↳ Wacom Intuos4 6x9 cursor                  id=18   [slave  pointer  (2)]
⎜   ↳ Wacom Intuos4 6x9 pad                     id=19   [slave  pointer  (2)]
⎜   ↳ Wacom Intuos4 6x9 stylus                  id=20   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]

..以及由Wacom平板电脑输入事件注册的4个Wacom设备之一支持/生成的输入事件列表:

$ > xinput --list "Wacom Intuos4 6x9 eraser"
Wacom Intuos4 6x9 eraser                    id=17   [slave  pointer  (2)]
    Reporting 8 classes:
        Class originated from: 17
        Buttons supported: 9
        Button labels: None None None None None None None None None
        Button state:
        Class originated from: 17
        Keycodes supported: 248
        Class originated from: 17
        Detail for Valuator 0:
          Label: Abs X
          Range: 0.000000 - 44704.000000
          Resolution: 200000 units/m
          Mode: absolute
          Current value: 0.000000
        Class originated from: 17
        Detail for Valuator 1:
          Label: Abs Y
          Range: 0.000000 - 27940.000000
          Resolution: 200000 units/m
          Mode: absolute
          Current value: 0.000000
        Class originated from: 17
        Detail for Valuator 2:
          Label: Abs Pressure
          Range: 0.000000 - 2048.000000
          Resolution: 1 units/m
          Mode: absolute
          Current value: 0.000000
        Class originated from: 17
        Detail for Valuator 3:
          Label: Abs Tilt X
          Range: -64.000000 - 63.000000
          Resolution: 1 units/m
          Mode: absolute
          Current value: 0.000000
        Class originated from: 17
        Detail for Valuator 4:
          Label: Abs Tilt Y
          Range: -64.000000 - 63.000000
          Resolution: 1 units/m
          Mode: absolute
          Current value: 0.000000
        Class originated from: 17
        Detail for Valuator 5:
          Label: Abs Tilt Y
          Range: -64.000000 - 63.000000
          Resolution: 1 units/m
          Mode: absolute
          Current value: 0.000000
  

上面显示了9个按钮,以及几个轴,每个输入事件都有相应的最小/最大值(由标签引用)。

例如,绝对x轴的最小值/最大值为0 - 44704单位,单位为20000单位/ m。据推测,类型EV_ABS的输入事件仅在X轴的此范围内生成。

  

一旦识别出输入设备生成的事件类型,就很容易使用uinput框架将假事件注入到Xinput队列中。有一个简单的例子 here

当您打算模拟Wacom数位板时,您可能需要注入典型Wacom数位板在使用时生成的所有输入事件。

  

xinput可用于监控实际设备生成的输入事件的顺序和时间,如 answer 所示。