У меня есть установка парного монитора двух различных размеров. Мой основной монитор является 23 в широкоэкранном сенсорном экране Acer T230H, и вторыми составляют регулярные 20 дюймов. Когда я иду для использования сенсорного экрана, курсор обнаруживается на вторичном дисплее в зависимости от того, где я касаюсь дисплея. Как я калибрую его, чтобы только управлять моим основным монитором?
Вы пробовали использовать xinput-calibrator ?
Очень сложно найти решение, но на самом деле довольно прямолинейно, просто следуйте ответу от 'phnomic' здесь: Сенсорный экран и дополнительный внешний монитор . Безупречно работает с моим Fujitsu T730 со всеми видами внешних мониторов!
Как предложил в комментарии Бени Чернявский-Паскин, я использовал следующую команду для отображения устройства ввода на экран вывода:
xinput map-to-output <device> <output>
Чтобы выяснить, какое из них, я сначала запустил xinput
для отображения списка устройств ввода. Из этого списка я заметил, что мой сенсорный экран был "QUANTA Optical Touch Screen" и был указан как идентификатор устройства 12. Затем я запустил xrandr
для определения сенсорного экрана, который в моем случае был VGA1.
Просто введя следующую команду, я сделал трюк:
xinput map-to-output 12 VGA1
Как предложили Бени Чернявский-Паскин и Пол Ламмерцма в комментариях выше 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
По крайней мере, для сенсорных экранов Wacom существует дополнительная проблема, заключающаяся в том, что они перестают работать после цикла приостановки и возобновления. Поэтому сначала их нужно снова подключить, а затем откалибровать для использования с двумя мониторами. Вот решение, которое делает и то, и другое:
Создайте (и затем протестируйте) настраиваемую службу systemd
для повторного подключения вашего сенсорного экрана, когда система вернется из режима ожидания, используя мой другой ответ здесь .
Создайте сценарий / 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
Настройте среду рабочего стола для выполнения этого сценария при запуске X, например, через механизм автозапуска. Лучше сделать это через службу systemd
,но я еще не пробовал это.
Создайте следующую настраиваемую службу, используемую для выполнения вашего скрипта, когда система возвращается из возобновления. Он запускается после службы 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
Включите новую настраиваемую службу с помощью:
sudo systemctl enable /etc/systemd/system/local-touchscreen-tweaks.service
Я столкнулся с подобной проблемой. Переключаюсь между использованием 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