Внешний дисплей портит положение курсора стилуса

Я работаю над ноутбуком 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*
0
задан 21 October 2020 в 13:37

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/')

Если вы хотите проверить, что находится в correct_matrix, с помощью $ echo $correct_matrix

Затем установите настройки матрицы стилуса на числа в «correct_matrix»:

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

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

Сценарий оболочки:

#!/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', который я затем могу запустить с помощью

bash ./stylus-correct.sh

Это очень быстро решает проблему для меня. Всякий раз, когда я подключаю новый экран, я просто иду в каталог этого файла оболочки и запускаю его с помощью данной команды.

0
ответ дан 27 October 2020 в 13:17

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

Похожие вопросы: