Как я калибрую сенсорный экран в системе парного монитора?

У меня есть установка парного монитора двух различных размеров. Мой основной монитор является 23 в широкоэкранном сенсорном экране Acer T230H, и вторыми составляют регулярные 20 дюймов. Когда я иду для использования сенсорного экрана, курсор обнаруживается на вторичном дисплее в зависимости от того, где я касаюсь дисплея. Как я калибрую его, чтобы только управлять моим основным монитором?

33
задан 1 July 2011 в 15:22

6 ответов

Вы пробовали использовать xinput-calibrator ?

1
ответ дан 23 November 2019 в 02:05

Очень сложно найти решение, но на самом деле довольно прямолинейно, просто следуйте ответу от 'phnomic' здесь: Сенсорный экран и дополнительный внешний монитор . Безупречно работает с моим Fujitsu T730 со всеми видами внешних мониторов!

3
ответ дан 23 November 2019 в 02:05

Как предложил в комментарии Бени Чернявский-Паскин, я использовал следующую команду для отображения устройства ввода на экран вывода:

xinput map-to-output <device> <output>

Чтобы выяснить, какое из них, я сначала запустил xinput для отображения списка устройств ввода. Из этого списка я заметил, что мой сенсорный экран был "QUANTA Optical Touch Screen" и был указан как идентификатор устройства 12. Затем я запустил xrandr для определения сенсорного экрана, который в моем случае был VGA1.

Просто введя следующую команду, я сделал трюк:

xinput map-to-output 12 VGA1
52
ответ дан 23 November 2019 в 02:05

Как предложили Бени Чернявский-Паскин и Пол Ламмерцма в комментариях выше xinput map-to-output помогло мне!

вам сначала нужно запустить xinput , чтобы получить идентификатор входящего устройства,

указанное выше Команда возвращает для меня что-то подобное.

user@user-hpEnvy:~$ xinput
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech Unifying Device. Wireless PID:401b   id=10   [slave  pointer  (2)]
⎜   ↳ Logitech Unifying Device. Wireless PID:4016   id=11   [slave  pointer  (2)]
⎜   ↳ ELAN20E7:00 04F3:20E7                     id=13   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ HP Truevision HD                          id=12   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=14   [slave  keyboard (3)]
    ↳ HP Wireless hotkeys                       id=16   [slave  keyboard (3)]
    ↳ HP WMI hotkeys    

Затем я запустил xrandr , чтобы получить список экранов, и результат команды будет таким

user@user-hpEnvy:~$ xrandr
Screen 0: minimum 8 x 8, current 3840 x 1080, maximum 32767 x 32767
eDP1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 382mm x 215mm
   1920x1080      60.0*+   59.9     40.0  
   1680x1050      60.0     59.9  
   1600x1024      60.2  
   1400x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1360x768       59.8     60.0  
   1152x864       60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
HDMI1 connected primary 1920x1080+1920+0 (normal left inverted right x axis y axis) 600mm x 340mm
   1920x1080      60.0*+   50.0     59.9  
   1680x1050      59.9  
   1600x900       60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x720       60.0     50.0     59.9  
   1024x768       60.0  
   800x600        60.3  
   720x576        50.0  
   720x480        60.0     59.9  
   640x480        60.0     59.9  
   720x400        70.1  
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

В моем случае сенсорное устройство ELAN20E7 : 00 04F3: 20E7 id = 13 , а сенсорный экран - eDP1 , чтобы исправить проблему, мне нужно сопоставить устройство с этим монитором только для того, что я выполнил эту команду xinput map-to -output 13 eDP1

Проблема решена, и он снова работает нормально :)

Я использую elementary OS freya, поэтому он должен работать для всех дистрибутивов на основе Ubuntu 14.04 LTS

27
ответ дан 23 November 2019 в 02:05

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

  1. Создайте (и затем протестируйте) настраиваемую службу systemd для повторного подключения вашего сенсорного экрана, когда система вернется из режима ожидания, используя мой другой ответ здесь .

  2. Создайте сценарий / usr / local / bin / local-touchscreen-tweaks со следующим содержанием:

     #! / Usr / bin / env bash
    
     # Нам нужно заснуть примерно через 2 секунды после запуска wacom-inputattach
     #, иначе устройство с сенсорным экраном еще не будет работать.
    спать 2
    
     # xsetwacom необходимо подключиться к X-серверу.
    экспорт XAUTHORITY = / home / matthias / .Xauthority
    экспорт DISPLAY =: 0
    
     # Сообщите сенсорным устройствам интерпретировать ввод относительно физического
     # только сенсорный дисплей, здесь LVDS-1.  Требуется в установках с несколькими мониторами.
     # Используйте имена устройств, как показано в `xinput --list`.
    xsetwacom set "Wacom Serial Penabled 2FG Touchscreen Pen stylus" MapToOutput LVDS-1
    xsetwacom set "Ластик для сенсорного экрана Wacom Serial Penabled 2FG" MapToOutput LVDS-1
    xsetwacom set "Wacom Serial Penabled 2FG Touchscreen Finger touch" MapToOutput LVDS-1
     
  3. Настройте среду рабочего стола для выполнения этого сценария при запуске X, например, через механизм автозапуска. Лучше сделать это через службу systemd ,но я еще не пробовал это.

  4. Создайте следующую настраиваемую службу, используемую для выполнения вашего скрипта, когда система возвращается из возобновления. Он запускается после службы restart-wacom-inputattach , созданной на шаге 1 выше, с использованием механизма, продемонстрированного здесь . Для этого создайте файл /etc/systemd/system/local-touchscreen-tweaks.service с таким содержанием:

      [Единица]
    Описание = откалибровать сенсорный экран для работы с двумя мониторами
    После = перезапуск-wacom-inputattach.service
    
     [Обслуживание]
    Пользователь = root
    Тип = oneshot
    ExecStart = / usr / local / bin / local-touchscreen-tweaks
    TimeoutSec = 0
    StandardOutput = системный журнал
    
     [Установить]
    WantedBy = suspend.target
     
  5. Включите новую настраиваемую службу с помощью:

     sudo systemctl enable /etc/systemd/system/local-touchscreen-tweaks.service
     
0
ответ дан 5 January 2021 в 23:52

Я столкнулся с подобной проблемой. Переключаюсь между использованием 2 и 4 мониторов экрана сенсорных экранов, все это показывает то же самое имя и изменение идентификатора устройства, что делает все решения, которые я нашел в значительной степени бесполезной. Итак, я написал свой собственный сценарий. Он фиксирует идентификатор, использующий xinput и xrandr для захвата доступных дисплеев. Если у вас нет установленного YAD, он попытается установить его.

Затем он использует YAD для всплывающего окна подтверждающего окна в углами ваших мониторов. Нажмите кнопку ОК, если щелчок не ударяет «ОК», он предполагает, что ваши дисплеи и сенсорные входы не связаны и пытаются совпадать с следующим, пока вы на самом деле не ударите «ОК». Затем он перемещается на следующий монитор.

Это должно быть запущено каждый раз, когда я вхожу в систему, будь то перезагрузка или моя система была заблокирована, но я устанавливаю, чтобы запустить, когда я ударю Win + F (f для исправления моего хрена), так что это довольно быстро и безболезненно сбросить все. Я еще не нашел способ сделать его постоянным. Я также держу код на Git-Hub. Любые обновления, которые я делаю, я опубликую там ( https://github.com/pvtcompyle/set-touch ). Если кто-то может подумать о способе сделать этот вид настроек постоянным, я хотел бы услышать об этом!

#!/bin/bash
# This script requires yad to be installed. If it is not installed, run:
# sudo apt install yad

# check for yad installation
monkg -l "yad"
if [ $? = '1' ]
then
   printf "Yad is not installed"
   sudo apt install yad
fi

# run xinput and find the search text for your touch screens, then set it below
screenSearch="Touch"
# run xrandr and find the search text for your monitors, then set it below
monintorSearch="DisplayPort-"

# dump xinput id's xrandr monitor searches into arrays
idArr=($(xinput | grep $screenSearch | awk '{gsub("id=",""); print $7}'))
monArr=($(xrandr | grep -E "$monintorSearch[0-9] connected" | awk -F '[-" "]' '{print $2}'))
cdate=($(date -I'seconds'))

# these are x and y coordinates to place pop-up alerts.
# adjust for your preference, screen resolution, and number of monitors.
# if fewer monitors are detected than are defined here, it's ok.
# to find your coordinates run the following from a terminal:
# yad --posx=<number> --posy=<number>
monx=(1620 2120 1620 2120)
mony=(880 880 1180 1180)

# loop through monitors. 
for mon in "${monArr[@]}"
do
   index=0
   declare -i mon
   # loop through touch screen id's
   for id in "${idArr[@]}"
   do
      declare -i id
      xinput map-to-output $id $monintorSearch$mon
      # pop up box at monx and mony coordinates. Tap OK, if it's registered on the wrong screen, it will prompt again.
      yad --posx=${monx[$mon]} --posy=${mony[$mon]} --close-on-unfocus --title="stuff" --text="Matching input: $id to Monitor: $mon."
      result=$?
      case $result in
         0)
            idArr=(${idArr[@]/$id})
            break
            ;;
         252)
            ((index=index+=1))
            ;;
         *)
            echo 'Unknown input' $result 
            ;;
      esac
   done
done
0
ответ дан 2 April 2021 в 01:49

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

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