我有一个在 18.04 上使用的平板电脑屏幕。它的行为基本上类似于绝对位置鼠标(它是 Huion,而不是 Wacom),但我使用多个显示器运行,因此我必须将转换矩阵应用于设备。
我编写了一个程序来计算变换矩阵,它在 16.04 上运行良好,但现在在 18.04 上,每当我尝试使用它时,它都会失败,并抱怨 BadMatch。我记得在创建程序时,如果数字缺失或错误,它就会这样做,但由于之前已经测试过,所以这似乎不合理。这是我的程序产生的命令,以及产生的错误消息:
~$ xinput set-prop 'Tablet Monitor Pen' 'Coordinate Transformation Matrix' 0.333333 0.000000 0.166667 0.000000 0.486692 0.513308 0 0 1
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 131 (XInputExtension)
Minor opcode of failed request: 57 ()
Serial number of failed request: 20
Current serial number in output stream: 21
我认为 xrandr 中与数字相关的元素是:
Screen 0: minimum 320 x 200, current 3840 x 2104, maximum 8192 x 8192
...
DP-1 connected 1280x1024+640+1080 (normal left inverted right x axis y axis) 760mm x 450mm
有人能告诉我,在 16.04 和 18.04 之间,xinput 所期望的格式是否发生了变化?或者我的数字是否以某种方式计算不正确,并且只是显示出来(我确实更改了显示器配置,但变化不大!)
编辑:在进一步调查中,我注意到即使默认/现有的 CTM 也被拒绝。请求当前状态如下所示:
$ xinput list-props 'Tablet Monitor Pen' | grep "Coordinate Transformation Matrix"
Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
将这些值放回去(带或不带逗号)会导致:
xinput set-prop 'Tablet Monitor Pen' 'Coordinate Transformation Matrix' 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 131 (XInputExtension)
Minor opcode of failed request: 57 ()
Serial number of failed request: 20
Current serial number in output stream: 21
使用数据列表中的逗号执行此操作(以前是不允许的)会导致相同的结果:
$ xinput set-prop 'Tablet Monitor Pen' 'Coordinate Transformation Matrix' 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 131 (XInputExtension)
Minor opcode of failed request: 57 ()
Serial number of failed request: 20
Current serial number in output stream: 21
答案1
哦天哪,很尴尬,原来设备名称已经更改了。我的 xinput -list 输出包括:
$ xinput -list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ 2.4G wireless USB Device 2.4G wireless USB Device id=11 [slave pointer (2)]
⎜ ↳ Tablet Monitor Pad id=10 [slave pointer (2)]
⎜ ↳ Tablet Monitor Pen Pen (0) id=16 [slave pointer (2)]
Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Tablet Monitor Pen id=9 [slave keyboard (3)]
并且相关设备在 16.04 中一直是“平板显示器笔”。然而,现在实际上是“平板显示器笔 (0)”在工作。因此,考虑到目标设备的这一变化,一切都恢复正常了……