4

我正在寻找一种将 wacom 输入注入正在运行的 X 服务器的方法。在开始寻找有关此主题的任何资源时,我有点卡住了。

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

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

4

1 回答 1

3

在 Linux 上,各种输入设备会产生各种事件

例如,

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 个单位/米。推测类型的输入事件EV_ABS仅在 X 轴的此范围内生成。

uinput一旦确定了输入设备生成的事件类型,就很容易使用框架将假事件注入 Xinput 队列。这里有一个简单的例子

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

xinput可用于监视由实际设备生成的输入事件的顺序和时序,如本答案所示。

于 2016-01-23T18:22:55.683 回答