Настройка сенсора на Raspberry Pi 4

Тема в разделе "Raspberry Pi", создана пользователем krasnogores, 21 ноя 2019.

Метки:
  1. krasnogores

    krasnogores Нуб

    На работе есть киоск который состоит из 22' экрана и телевизора 42', но сенсор установлен только на телек, а малина запускает xinput-calibrator на оба экрана и потому не могу откалибровать сенсор для телека. Подскажите, можно ли его запустит только на телеке( в поиске нахожу настройки только на один дисплей).
     
  2. На убунте/debian xinput-calibrator позволяет получит список устройств, если получили ваше устройство, то можете выполнить калибровку указав его.
    На у меня малине altlinux, в манах xinput_calibrator тоже что и на убунте показывает, должно работать.
     
  3. krasnogores

    krasnogores Нуб

    А как указать область калибровки только по одному экрану. Имя устройства я знаю, но при запуске калибровки все равно включается область двух экранов.
     
  4. Вы калибратором выполнили поиск, получили список устройств доступных для калибровки, затем выполняете калибровку, указываете, какое из устройств калибровать и у вас область на двух экранах?
    Попробуйте указать геометрию.
    Manually provide the geometry (width and height) for the calibration window.
     
  5. krasnogores

    krasnogores Нуб

    Область на двух экранах. Подскажите пожалуйста как геометрию настроить ( гугл помогает настроить только один экран).
     
  6. Если вы доверяете гуглу больше чем манам, то я прочитал их за вас.
    Код (Text):
    user@my-pc:~$ man xinput_calibrator
    xinput_calibrator(1)  xinput_calibrator(1)

    NAME
      xinput_calibrator - A generic touchscreen calibration program for X.Org

    SYNOPSIS
      xinput_calibrator [OPTIONS]

    DESCRIPTION
      xinput_calibrator is a program for calibrating your touchscreen, when using the X Window System.

      It currently features:
      - works for any standard Xorg touchscreen driver (uses XInput protocol)
      - mis-click detection (prevents bogus calibration)
      - dynamically recalibrates the evdev driver
      - outputs the calibration as xorg.conf.d snippet or HAL policy file
      - and more

      see http://www.freedesktop.org/wiki/Software/xinput_calibrator

    OPTIONS
      -h, --help
      Print a help message listing the version and available options.

      -v, --verbose
      Print debug messages during the process.

      --list  List the calibratable input devices.

      --device device_name_or_id
      Select a specific device to calibrate; use --list to list the calibratable input devices.

      --precalib min_x max_x min_y max_y
      Manually provide the current calibration setting.
      This is useful if the calibration values are stored in your xorg.conf, but the driver does not export them through XInput (eg. the calibrator can not know these values)

      --misclick nr_of_pixels
      set the misclick threshold (0=off, default: 15 pixels)

      --no-timeout
      turns off the timeout

      --output-type auto|xorg.conf.d|hal|xinput
      type of config to output (auto=automatically detect, default: auto)

      --fake  Emulate a fake driver (for testing purposes)
      Useful to test the calibrator without applying the values, and possibly even without having a touchscreen.

      --geometry widthxheight
      Manually provide the geometry (width and height) for the calibration window.

    USAGE
      Run xinput_calibrator in a terminal, as it prints out the calibration values and instructions on standard output.

      After clicking the 4 calibration points, xinput_calibrator will calculate the new calibration values. Depending on the Xorg touchscreen driver you use, the new values can be made permanent in different ways:

      Evdev:
      Automatically recalibrates the driver for this session,
      Supports following --output-types: auto, xorg.conf.d, hal, xinput

      Usbtouchscreen:
      Automatically recalibrates the *kernel module*, saved in /etc/modprobe.conf.local
      Supports following --output-types: auto

      Other Xorg touchscreen drivers:
      No automatic calibration possible,
      Supports following --output-types: auto, xorg.conf.d, hal

    EXAMPLES
      To run the calibrator, type in your terminal:

      xinput_calibrator

      If something goes wrong, or not as expected, turn on verbose messages:

      xinput_calibrator -v

      If you have to manually provide the current calibration values (when using EVDEV, you can use this to reset the calibration first):

      xinput_calibrator --precalib 0 1000 0 1000

    TROUBLESHOOTING
      In general, run the calibrator with the -v option, it will tell you what happens and what goes wrong.

      Mis-click detection, the calibrator can automatically detect clicks with unreasonable values. This prevents you from ending up with a bogus calibration.

      If you keep getting the message 'Mis-click detected, restarting...', one of the following is happening:
      1. you are bad at clicking on crosses, use a stylus or increase the --misclick threshold
      2. your device is not properly supported by the kernel, it interprets the clicks wrong
      3. your screen has a non-linear deformation, 4-point calibration can not help you

    SEE ALSO
      xinput(1)

    AUTHORS
      Tias Guns <tias@ulyssis.org>

    Tias Guns
     
  7. krasnogores

    krasnogores Нуб

    Это я находил, все что тут более менее подходит это --geometry widthxheight если правильно понимаю. Этим я задаю область калибруемого экрана?
     
  8. Вы всё в темную как-то, командную строку показали-бы
    отладочную информацию включали?
    команда - как определяли устройства и вывод её
    команда - как калибровали и что указали в геометрии
    указывали ли вручную текущие настройки калибровки
     
  9. krasnogores

    krasnogores Нуб

    У меня вот основная проблема https://ibb.co/wKHMm1n.[​IMG]Уже все команды запускал все без изменений. Как эту область изменить я не знаю.
     
  10. Пишу и думаю, только бы не как в прошлый раз, ожидал в текстовом виде выполняемые команды и их вывод, а получил фото результата.
    И как теперь понять что xinput_calibrator возвращал в списке устройств доступных для калибровки и какая команда выполнялась при самой калибровке?
     
  11. krasnogores

    krasnogores Нуб

    Device 'E&T INC. E&T IR SCREEN':
    Device Enabled (135): 1
    Coordinate Transformation Matrix (136): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Calibration Matrix (267): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Calibration Matrix Default (268): 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/event6"
    Device Product ID (273): 6830, 31

    ⎡ Virtual core pointer id=2 [master pointer (3)]
    ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
    ⎜ ↳ E&T INC. E&T IR SCREEN id=6 [slave pointer (2)]
    ⎜ ↳ Microsoft Microsoft® Nano Transceiver v2.0 Mouse id=9 [slave pointer (2)]
    ⎜ ↳ Microsoft Microsoft® Nano Transceiver v2.0 Consumer Control id=10 [slave pointer (2)]
    ⎜ ↳ Microsoft Microsoft® Nano Transceiver v2.0 Consumer Control id=11 [slave pointer (2)]
    ⎣ Virtual core keyboard id=3 [master keyboard (2)]
    ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
    ↳ E&T INC. E&T IR SCREEN id=7 [slave keyboard (3)]
    ↳ Microsoft Microsoft® Nano Transceiver v2.0 id=8 [slave keyboard (3)]
    ↳ Microsoft Microsoft® Nano Transceiver v2.0 System Control id=12 [slave keyboard (3)]
    ↳ Microsoft Microsoft® Nano Transceiver v2.0 Consumer Control id=13 [slave keyboard (3)]
    ↳ Microsoft Microsoft® Nano Transceiver v2.0 Consumer Control id=14 [slave keyboard (3)]

     
    Последнее редактирование: 22 ноя 2019
  12. Сейчас в #11 приводите вывод xinput непонятно зачем, ведь в пером сообщении говорили, что пользуетесь xinput_calibrator и возникли сложности с двумя дисплеями
    Я предложил сначала узнать список устройств доступных для калибровки
    Ожидал от вас увидеть вывод этого списка
    Код (Text):
    xinput_calibrator -v --list
    DEBUG: XInputExtension version is 2.3
    DEBUG: Skipping virtual master devices and devices without axis valuators.
    DEBUG: Skipping device 'Virtual core XTEST pointer' id=4, does not report Absolute events.
    DEBUG: Skipping device 'Logitech K230' id=9, does not report Absolute events.
    No calibratable devices found.
    У меня нет устройств доступных для калибровки поэтому получаю No calibratable devices found.
    У вас должны быть доступны какие-то устройства, например устройство_1 и устройство_2
    Предложил явно указать найденное устройство при выполнении калибровки
    Код (Text):
    xinput_calibrator -v --device устройство_1
    DEBUG: XInputExtension version is 2.3
    DEBUG: Skipping virtual master devices and devices without axis valuators.
    Error: Device "устройство_1" not found; use --list to list the calibratable input devices.
    Или явно указать геометрию
    Код (Text):
    xinput_calibrator -v --device устройство_1 --geometry 1024x768
    DEBUG: XInputExtension version is 2.3
    DEBUG: Skipping virtual master devices and devices without axis valuators.
    Error: Device "устройство_1" not found; use --list to list the calibratable input devices.

    т.е. малина сама запускает и вышла из под контроля? мистика какая-то
     
  13. Подключил к буку тачовый hdmi дисплей, тач подключен по usb, получил одно устройство доступное для калибровки.
    Код (Text):
    user@my-pc:~$ xinput_calibrator --list
    Device "WaveShare WS170120" id=9
    Как калибровать не понятно, икс-инпут сам по себе работает с тач-инпут устройством, а икс-сервер сам с двумя дисплеями.
    Устройство для калибровки одно, а дисплея два.
    Тачоывй дисплей назначил основным, а встроенный - продолжением основного, тачевый расположил левее встроенного, координаты x=0 y=0 оказываются на тачевом.
    Запустил калибратор, указав в геометрии ширину высоту тачового дисплея, увидел на тачевом экран для калибровки, на встроенный он не вылезает. Но радости от этого мало, левая верхняя точка калибруется, а при нажатии на правую верхнюю точку, курсор выскакивает на соседний дисплей, калибратор говорит что ты промазал и начинает калибровку сначала. Отключаю xrandr-ом встроенный дисплей и запускаю калибратор не указывая геометрии, дисплей-то один остался. Только с отключенным дисплеем, который не участвует в калибровке, удалось успешно откалиброваться.
     
  14. Собрал конфигурацию как на фото #9, не-тачевый (это встроенный дисплей бука) сверху и снизу тачеывый подключенный по hdmi и usb
    Подключенные дисплеи:
    Код (Text):
    user@my-pc:~$ xrandr |grep ' connected'
    eDP-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 173mm
    HDMI-1 connected primary 1024x600+0+0 (normal left inverted right x axis y axis) 255mm x 255mm
    Устройство для калибровки:
    Код (Text):
    user@my-pc:~$ xinput_calibrator --list
    Device "WaveShare WS170120" id=9
    отключаем не-тачевый дисплей
    ограничиваем тачевое устройство пределами тачевого дисплея
    выполняем калибровку
    восстанавливаем режимы дисплеев
    ещё раз выполняем xinput --map-to-output
    Код (Text):
    user@my-pc:~$ xrandr --output eDP-1 --off && xinput --map-to-output WaveShare\ WS170120 HDMI-1 && xinput_calibrator && xrandr --output eDP-1 --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI-1 --mode 1024x600 --pos 0x1080 --rotate normal && xinput --map-to-output WaveShare\ WS170120 HDMI-1
    Calibrating standard Xorg driver "WaveShare WS170120"
       current calibration values: min_x=0, max_x=65535 and min_y=0, max_y=65535
       If these values are estimated wrong, either supply it manually with the --precalib option, or run the 'get_precalib.sh' script to automatically get it (through HAL).
       --> Making the calibration permanent <--
      copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
    Section "InputClass"
       Identifier   "calibration"
       MatchProduct   "WaveShare WS170120"
       Option   "MinX"   "400"
       Option   "MaxX"   "65039"
       Option   "MinY"   "1338"
       Option   "MaxY"   "66218"
       Option   "SwapXY"   "0" # unless it was already set to 1
       Option   "InvertX"   "0"  # unless it was already set
       Option   "InvertY"   "0"  # unless it was already set
    EndSection
    После выполнения калибровки, при касании курсор попадает в нужную позицию.
     
    big17 нравится это.
  15. big17

    big17 Нуб

    Привет! Возникла такая же задача.
    Два дисплея: один - обычный сверху, и ниже - еще один сенсорный.

    Попробовал способ который в предыдущем посте написан. Действия вроде как выполняю правильно, полученный результат (секцию "InputClass" пишу в соответствующий файл), но после перезагрузки никакого эффекта нет.

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

    Сейчас мое промежуточное решение - это просто команда
    Код (Text):
    xinput --map-to-output 6 HDMI-2
    где 6 - это ид.устройства ввода, а HDMI-2 - это сенсорный дисплей.

    После выполнения этой команды все начинает работать корректно, но после перезагрузки все возвращается в исходное состояние.
    Может и у Вас работало только из-за этой команды?

    Пока у меня эта команда поставлена в автозагрузку. Но все-таки хочется сделать через калибровку.
     
  16. Именно так и работало, т.е. после выполнения команды, но этого к сожалению не нужно.
    Я добавил правило для udev при подключении usb-touch выполняю скрипт, в котором выполняю xinput --map-to-output, но получаю ошибку 'unable to find device 'WaveShare WS170120''
    Пока не разобрался, как xinput выполнить без ошибок при подключении тачскрина.
     
    big17 нравится это.