![持续映射多个触摸屏(当前会话锁定后或插入不同的 USB 端口时重置)](https://linux22.com/image/1021064/%E6%8C%81%E7%BB%AD%E6%98%A0%E5%B0%84%E5%A4%9A%E4%B8%AA%E8%A7%A6%E6%91%B8%E5%B1%8F%EF%BC%88%E5%BD%93%E5%89%8D%E4%BC%9A%E8%AF%9D%E9%94%81%E5%AE%9A%E5%90%8E%E6%88%96%E6%8F%92%E5%85%A5%E4%B8%8D%E5%90%8C%E7%9A%84%20USB%20%E7%AB%AF%E5%8F%A3%E6%97%B6%E9%87%8D%E7%BD%AE%EF%BC%89.png)
我有一台触摸屏笔记本电脑(Thinkpad X1 Yoga Gen 2,Ubuntu 20.04),连接到外部触摸屏显示器。触摸屏的映射在插入时不起作用,所以我按照本指南将输入设备映射到相应的显示器。我按照指南操作并添加了一个~/.config/autostart/align_touchinput.desktop
文件,以便每次登录时执行映射。
这是我的设置:
xinput
...
↳ Wacom Pen and multitouch sensor Finger touch id=9 [slave pointer (2)]
↳ Wacom Pen and multitouch sensor Pen stylus id=10 [slave pointer (2)]
↳ Wacom Pen and multitouch sensor Pen eraser id=25 [slave pointer (2)]
↳ WingCoolTouch WingCoolTouch id=18 [slave pointer (2)]
↳ WingCoolTouch WingCoolTouch id=19 [slave pointer (2)]
....
xrandr
...
eDP-1 connected primary 2560x1440+3072+160 (normal left inverted right x axis y axis) 310mm x 174mm
HDMI-1 connected 3072x1728+0+0 (normal left inverted right x axis y axis) 344mm x 195mm
...
从上面可以看出,WingCoolTouch 和 HDMI-1 来自外部显示器。因此我让我的 PC 在启动时运行此脚本:
xinput map-to-output 18 HDMI-1
xinput map-to-output 19 HDMI-1
xinput map-to-output 9 eDP-1
xinput map-to-output 10 eDP-1
xinput map-to-output 24 eDP-1
但是,我面临两个问题:
- 每次我将笔记本电脑从睡眠/屏幕关闭状态唤醒时,映射总是会重置。有没有什么好办法可以解决这个问题?
- 因为这是一台笔记本电脑,所以我经常需要通过不同的 USB 端口插入触摸屏。这会改变从
id
。xinput
据我所知,xinput map-to-input
允许按设备名称进行映射。但我的操作系统检测到多个同名设备,因此它不起作用(我收到“警告:有多个设备与‘WingCoolTouch WingCoolTouch’匹配”和错误)。有没有办法将所有命名的项都映射WingCoolTouch
到,HDMI-1
以便无论我使用哪个 USB 端口,映射都能正常工作?
答案1
遇到了同样的问题,写了一个脚本:
#! /bin/bash
one=$(xinput --list | grep -F 'WingCoolTouch' | grep -Po '(?<=id=)\d\d?' | head -n 1)
two=$(xinput --list | grep -F 'WingCoolTouch' | grep -Po '(?<=id=)\d\d?' | tail -n 1)
xinput map-to-output $one HDMI-1
xinput map-to-output $two HDMI-1