Как отключить сенсорный экран при использовании Wayland?

Я использую Ubuntu Gnome 17.04. Мой сенсорный экран глитчей; Я думаю, что это аппаратная проблема. Я могу отключить свой сенсорный экран при входе в Gnome с помощью Xorg, но я не могу понять это при входе в систему с помощью Wayland. Любой совет? Спасибо! Джош

8 ответов

Следующие шаги в ответе JNixus на reddit дали мне результат: сенсорный экран отключен, и сенсорная панель все еще работает: https://www.reddit.com/r/Dell/comments/76jm9x/dell_xps_9343_linux_wayland_touchscreen_help/

Используя возможность отключения одного USB-устройства, нам нужно просто создать правило UDEV. Создать файл в

/etc/udev/rules.d/80-touchscreen.rules

Со следующей информацией

SUBSYSTEM=="usb", ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="20d0", ATTR{authorized}="0"

Ты можешь найти idVendor а также idProduct запустив

cat /proc/bus/input/devices

Вы можете перезагрузить правила без перезагрузки

udevadm control --reload-rules && udevadm trigger

Приведенное выше решение hid_multitouch отключает все устройства с несколькими касаниями, если их несколько. Но маршрут udev - проблема, если ваше устройство не USB (я думаю). Так что у меня сработало отвязать устройство от драйвера, а не выгружать весь драйвер.

Вы можете найти устройства, связанные с драйвером hid-multitouch, с помощью

ls /sys/bus/hid/drivers/hid-multitouch/

Это покажет несколько файлов и папок, но фактический идентификатор устройства представляет собой комбинацию символов и чисел, например: 0018:06CB:19AC.0001.

У вас может быть несколько устройств. Я просто методом проб и ошибок выбрал правильный. Как только вы это узнаете, вы можете отвязать его от драйвера с помощью:

echo "0018:06CB:19AC.0001">  /sys/bus/hid/drivers/hid-multitouch/unbind

Это (временно) отключит драйвер. Затем вы можете использовать rc-local или специальный сервис systemd, чтобы сделать его постоянным. Вы не можете сделать это в .bashrc или аналогичные сценарии пользовательского пространства, поскольку для этого вам нужно быть root.

Сила Google на помощь. Я следовал инструкциям здесь и смог занести в черный список драйвер сенсорного экрана. Согласно инструкции я создал файл с именем hid_multitouch.conf в /etc/modprobe.d,

Внутри файла я положил:

# Use the following syntax
# blacklist driver-name
blacklist hid-multitouch

Сохраните, перезапустите, и больше не глючный сенсорный экран.

Следуйте инструкциям на ссылку выше. Решение не сработало, однако есть полезный комментарий пользователя Raphael, который отключил сенсорный экран и сенсорную панель для меня.

шаги:

1) Редактировать /etc/rc.local

2) Добавьте следующую строку modprobe -r usbhid

3) Сохранить и перезагрузить

Единственное, что сработало для меня, это предложение сценария запуска здесь . Мне не нравилась «ручность» сценария, поэтому я добавил его, чтобы он был более общим. Это может не сработать для всех, так как отменяет привязку всех найденных устройств hid-multitouch. Добавьте его в crontab, как предлагается в ссылке, и это произойдет при загрузке. Проверено на Кубунту 22.04.

      #!/bin/bash
for X in `find /sys/bus/hid/drivers/hid-multitouch -type l`; do 
  if [[ $(udevadm info ${X}|grep "DRIVER=hid-multitouch") ]]; then
    basename ${X} | sudo tee  /sys/bus/hid/drivers/hid-multitouch/unbind
  fi
done

Для тех, у кого сенсорный экран i2c (например, Dell Inspiron 9550), правильное правило udev:

      $ sudo su
# cat>/etc/udev/rules.d/80-touchscreen-dis.rules<<EOF
ACTION=="bind", SUBSYSTEM=="hid", ENV{HID_ID}="0018:000004F3:000029E2", RUN+="/bin/bash -c 'basename $DEVPATH > /sys/bus/hid/drivers/hid-multitouch/unbind'"
EOF
# udevadm control --reload-rules && udevadm trigger
# echo "0018:04F3:29E2.0002" > /sys/bus/hid/drivers/hid-multitouch/unbind
# echo "0018:04F3:29E2.0002" > /sys/bus/hid/drivers/hid-multitouch/bind
Ctrl + D

Магическое число0018:04F3:29E2.0002в приведенной выше команде можно найти, перечислив устройства в/sys/bus/hid/drivers/hid-multitouch/(см. ответ @dolf-andringa выше).

The HID_IDможно найти, запустив комбинацию unbind/bind в то время как udevadm monitor -u -pэто работает.

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

Я столкнулся с той же проблемой на моем Microsoft Surface Pro 3 с разбитым экраном. Я протестировал все вышеперечисленные решения. Большое спасибо участникам.

Тот, который работает у меня при КАЖДОЙ загрузке моего Manjaro с GNOME под Wayland:

  1. Тебе нужноsudoбез пароля. Добавьте следующееdisable_touchscreenсценарий где-то в вашем$PATH, нравиться~/.local/bin:

            #!/bin/bash
    for X in `find /sys/bus/hid/drivers/hid-multitouch -type l`; do
      if [[ $(udevadm info ${X}|grep "HID_PHYS=i2c-NTRG0001:01") ]]; then
        basename ${X} | sudo tee  /sys/bus/hid/drivers/hid-multitouch/unbind
      fi
    done
    
  2. Сделайте его исполняемым:

            chmod +x ~/.local/bin/disable_touchscreen
    
  3. Добавьте запись рабочего стола, напримерdisable_touchscreen.desktopк~/.config/autostart:

            [Desktop Entry]
    Name=Disable touchscreen
    GenericName=Disable touchscreen
    Comment=Disable broken touchscreen
    Exec=/home/belr/.local/bin/disable_touchscreen
    Icon=/home/belr/.local/share/icons/laptop-touchscreen-128x128.png
    NoDisplay=true
    Type=Application
    Categories=System;
    NotShowIn=KDE;XFCE;
    

Вот и все ! Мультитач-драйвер HID будет отсоединяться при каждом запуске: больше никаких фантомных записей

Другие решения не работают для моего Lenovo Yago 710. Вот что я делаю:

  • использование lsmod найти модуль для сенсорного экрана.

    lsmod | grep touch
    

    Для меня это hid_multitouch,

  • Временно отключить

    sudo modprobe -r hid_multitouch
    

    modprobe -r выгружает модуль ядра (драйвер). Сенсорный экран должен быть отключен.

  • Сделай это постоянным

    редактировать /etc/rc.local как

    #!/bin/bash
    modprobe -r usbhid
    

    В Ubuntu 17.10 может потребоваться запустить

    sudo systemctl enable rc-local.service
    

    делать /etc/rc.local выполняться при запуске.

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