外部显示器弄乱了触控笔光标的位置

外部显示器弄乱了触控笔光标的位置

我正在使用 HP Envy X360 Ryzen 笔记本电脑 (13-ag0xxx) Ubuntu 20.04。当我在笔记本电脑上添加外部(非触摸)屏幕时,HP 笔在笔记本电脑屏幕上的位置不再正确。一旦我在笔记本电脑屏幕上添加外部屏幕,笔的位置仍然在笔记本屏幕的最低点,但我在笔记本的触摸屏上向上移动得越多,屏幕上光标的位置就越差。然后光标甚至会切换到外部屏幕,尽管我仍然只触摸笔记本屏幕。

这与帖子 askubuntu.com/questions/1146029/ 中的问题相同,但遗憾的是解决方案“打开/关闭电视显示”没有帮助......

非常感谢您的帮助!从 Windows 切换到 Ubuntu 这是我最后一个未解决的问题...

xinput --list-props (of Pen):
*'ELAN0732:00 04F3:262B Pen (0)':
    Device Enabled (147):   1
    Coordinate Transformation Matrix (149): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Node (272):  "/dev/input/event17"
    Device Product ID (273):    1267, 9771
    libinput Tablet Tool Pressurecurve (579):   0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000*

答案1

我设法找到了解决方法。由于我的触摸屏在使用手指时可以工作,我只需将触摸屏的“协调矩阵”属性复制到我的手写笔上即可。这样做之后,手写笔光标位置就完美了。

$ xinput 
Virtual core pointer                          id=2    [master pointer  (3)]
   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
   ↳ Dell Dell Universal Receiver Mouse        id=10   [slave  pointer  (2)]          
   ↳ Dell Dell Universal Receiver Consumer Control     id=11   [slave  pointer  (2)]
   ↳ ELAN0732:00 04F3:262B                     id=15   [slave  pointer  (2)]
   ↳ SynPS/2 Synaptics TouchPad                id=18   [slave  pointer  (2)]
   ↳ ELAN0732:00 04F3:262B Pen (0)             id=22   [slave  pointer  (2)]

id=15 是我的触摸屏,id=22 是我的触控笔

首先查看它们的属性:

xinput --list-props 15 
    Device 'ELAN0732:00 04F3:262B':
    Device Enabled (147):   1
    Coordinate Transformation Matrix (149): 1.000000, 0.000000, 0.000000, 0.000000, 0.500000, 0.500000, 0.000000, 0.000000, 1.000000
    libinput Calibration Matrix (304):      1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Calibration Matrix Default (305):      1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Send Events Modes Available (269):     1, 0
    libinput Send Events Mode Enabled (270):        0, 0
    libinput Send Events Mode Enabled Default (271):        0, 0
    Device Node (272):      "/dev/input/event8"
    Device Product ID (273):        1267, 9771

xinput --list-props 22: 
    'ELAN0732:00 04F3:262B Pen (0)':
    Device Enabled (147):   1
    Coordinate Transformation Matrix (149): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Node (272):  "/dev/input/event17"
    Device Product ID (273):    1267, 9771
    libinput Tablet Tool Pressurecurve (579):   0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000*

由于触摸屏工作正常,我认为它的属性是正确的。两者的“坐标变换矩阵”不同。(拔下外接屏幕时我也检查了——这些分数是相等的)

然后我只需将坐标变换矩阵设置从触摸屏设置到我的手写笔上:

外接屏幕位于我的笔记本屏幕之上的解决方案:

xinput --set-prop 22 "Coordinate Transformation Matrix" 1.000000, 0.000000, 0.000000, 0.000000, 0.500000, 0.500000, 0.000000, 0.000000, 1.000000

外部屏幕所有位置的通用解决方案:首先将正确的数字保存到我称为“correct_matrix”的对象中:

correct_matrix=$(xinput --list-props {insert id of your touchscreen} | grep "Coordinate Transformation Matrix" | sed -E 's/.*Coordinate Transformation Matrix.*:(.*)$/\1/')

如果你想使用 $ echo $correct_matrix 检查 correct_matrix 中的内容

然后将触控笔矩阵设置设为“correct_matrix”中的数字:

xinput --set-prop {insert id of your stylus} "Coordinate Transformation Matrix" $correct_matrix

对我来说这很好。我只是用这两个命令制作了一个小型 shell 脚本,每当我连接外部显示器或更改外部显示器的位置设置时,我都会运行该脚本。

Shell 脚本:

#!/bin/bash
correct_matrix=$(xinput --list-props {insert id of your touchscreen} | grep "Coordinate Transformation Matrix" | sed -E 's/.*Coordinate Transformation Matrix.*:(.*)$/\1/')
xinput --set-prop {insert id of your stylus} "Coordinate Transformation Matrix" $correct_matrix

我将其放入 'stylus-correct.sh' shell 文件中,然后就可以运行它了

bash ./stylus-correct.sh

这很快就帮我解决了这个问题。每当我连接一个新屏幕时,我只需转到此 shell 文件的目录并使用给定的命令运行它。

答案2

对于任何有这个问题的人,我认为线程更适合并且更容易(对我有用)。

如果您有多个输入设备,则必须对每个设备重复该命令(例如,我有触摸屏、触控笔和触控笔橡皮擦)

相关内容