Изменения с xinput случайным образом возвращаются назад для установки по умолчанию

Я использую Kubuntu 16.04 (гостеприимный) на ноутбуке с Сенсорным экраном ELAN вместе с DELL 750-AAHC активный стилус. Одна из кнопок на стилусе ведет себя как средняя кнопка мыши, и я хочу, чтобы это было правильной кнопкой вместо этого.

Я могу достигнуть этого путем выполнения

$ xinput set-button-map "ELAN Touchscreen Pen" 1 3 2

(т.е. отображение функции кнопки 3, которая должна соответствовать правильной кнопке к физической кнопке 2).

Это делает то, что я хочу, но изменение не является постоянным.

Я включил команду ~/.xsessionrc (согласно ответу на этом сообщении), таким образом, это выполняется автоматически, когда я перезагружаю, но кнопка, отображающаяся "случайным образом", возвращается для установки по умолчанию самостоятельно: это работает как ожидалось некоторое время, и внезапно я обнаруживаю, что это не делает, таким образом, я добираюсь

$ xinput get-button-map "ELAN Touchscreen Pen"
1 2 3 4 5

и я должен повторно отобразить его вручную.

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

  • приостановка ноутбука или выключение экрана
  • вращение экрана (это было подозреваемым, потому что xinput используется на вращении для преобразования входной матрицы.)
  • переключая сенсорный экран, сенсорная панель или стилус вводят вкл\выкл (также с xinput).

ВАЖНОЕ ОБНОВЛЕНИЕ:

Я обнаружил, что эта проблема не характерна для стилуса: Я отключил сенсорную пальцем возможность экрана ("Сенсорный экран ELAN") ранее по некоторым причинам путем выполнения:

$ xinput disable "ELAN Touchscreen"

и я просто обнаружил, что это возвратилось самостоятельно (и стилус щелкают правой кнопкой, снова вернулся). Таким образом, кажется, что все изменения xinput возвращаются для установки по умолчанию по этой неизвестной причине.

ОБНОВЛЕНИЕ 2

Я нашел некоторые подозрительные записи в /var/log/syslog когда это произошло снова. Метки времени были в течение времени, я на самом деле не использовал ноутбук в течение некоторого времени, таким образом, энергосберегающие опции были, вероятно, активированы (я имею "тусклый экран" в 9 минут и "выключаю" в 10 минут; я буду экспериментировать с энергосбережением и обновлять соответственно).

Рев шаблона на самом деле много раз повторяется с различием только нескольких секунд между каждым блоком.

usb 1-8: USB disconnect, device number 18
usb 1-8: new full-speed USB device number 19 using xhci_hcd
usb 1-8: New USB device found, idVendor=04f3, idProduct=2073
usb 1-8: New USB device strings: Mfr=4, Product=14, SerialNumber=0
usb 1-8: Product: Touchscreen
usb 1-8: Manufacturer: ELAN
input: ELAN Touchscreen Pen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EE/input/input7548
input: ELAN Touchscreen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EE/input/input7549
input: ELAN Touchscreen Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EE/input/input7552
hid-multitouch 0003:04F3:2073.04EE: input,hiddev0,hidraw0: USB HID v1.10 Keyboard [ELAN Touchscreen] on usb-0000:00:14.0-8/input0

В каждом блоке почти все - то же кроме нескольких чисел то увеличение. Вот следующий блок для сравнения:

usb 1-8: USB disconnect, device number 19
usb 1-8: new full-speed USB device number 20 using xhci_hcd
usb 1-8: New USB device found, idVendor=04f3, idProduct=2073
usb 1-8: New USB device strings: Mfr=4, Product=14, SerialNumber=0
usb 1-8: Product: Touchscreen
usb 1-8: Manufacturer: ELAN
input: ELAN Touchscreen Pen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EF/input/input7554
input: ELAN Touchscreen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EF/input/input7555
input: ELAN Touchscreen Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EF/input/input7558
hid-mul itouch 0003:04F3:2073.04EF: input,hiddev0,hidraw0: USB HID v1.10 Keyboard [ELAN Touchscreen] on usb-0000:00:14.0-8/input0

Номера устройств повторяются в 128.

Система:

  • KDE Plasma 5.5.5
  • QT 5.5.1
  • Ядро 4.13.0-32-универсальная # 64-разрядные 35~16.04.1-Ubuntu
  • версия 1.6.2 xinput

    Версия КСИ на сервере: 2.3

  • X-сервер 1.19.5 X.Org

    Дата выпуска: 12.10.2017

    Версия 11 X-протокола, пересмотр 0

4
задан 19 February 2018 в 07:07

1 ответ

Это, кажется, ошибка (то, что устройство с сенсорным экраном случайным образом разъединяется и снова соединяется как новое устройство, которое имеет побочный эффект сброса всех настроек для установки по умолчанию).

Как обходное решение, можно создать собственное правило udev (имя файла на основе этих предложений Daniel Drake), который запустит скрипт, который повторно применяет изменения xinput каждый раз, когда сенсорный экран снова соединяется:

sudo nano /etc/udev/rules.d/10-custom-elan.rules

и добавьте эту строку, которая содержит "idVendor" и "idProduct" информацию (из Вашего системного журнала). Полный путь к "elan.sh" должен использоваться.

ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="2073", RUN+="/home/username/elan.sh"

(который примерно переводит в, ""когда устройство, которое соответствует указанным атрибутам, найдено, запустите обозначенный скрипт").

Затем создайте фактический сценарий для выполнения xinput:

nano /home/username/elan.sh 

со следующими строками:

#!/usr/bin/env bash

#These lines allow the script to be called by udev rules
export DISPLAY=":0"
export XAUTHORITY="/home/username/.Xauthority"

#Command to remap buttons
xinput set-button-map "ELAN Touchscreen Pen" 1 3 2 4 5

И, конечно, сделайте это исполняемым файлом:

chmod +x /home/username/elan.sh

Без строк экспорта работает сценарий при вызове Вами (активный пользователь) непосредственно, но он не работает при вызове udev (пользователь root). Детали могут быть найдены в этом и этом ответе, но здесь являются кратким обзором:

Для запуска графической программы на рабочем столе пользователя Вам нужны две вещи: адрес (то, что отображает рабочий стол пользователя, идет), и авторизация. Когда пользователь входит в систему, менеджер по входу в систему авторизовывает соединение с X-сервером путем генерации cookie, добавления его к серверу и передачи его пользователю путем записи его в $HOME/.Xauthority. Пользователь root должен, затем, смочь соединиться путем знания дисплея, используемого пользователем и при наличии доступа к cookie Xauthority. Это - то, чего достигают строки экспорта.

Примечание: то, что число дисплея является hardcoded, могло бы вызвать проблему при некоторых обстоятельствах, но в этом сценарии использования (отдельный пользователь персонального ноутбука) это, вероятно, будет в порядке.

1
ответ дан 1 December 2019 в 10:33

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

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