我有 ubuntu 12.04 和两台显示器,其中第一个是触摸屏。
系统识别分辨率为一块大屏幕,分辨率为3840*1080。
问题是使用触摸校准时,校准器屏幕的尺寸会覆盖两个屏幕。因此,当触摸屏幕时,指针会在 X 轴上移动两次。
有什么解决办法吗?
图:NVIDIA 的 Twin 视图
答案1
首先,列出所有输入源xinput --list
:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Sony Vaio Jogdial id=8 [slave pointer (2)]
⎜ ↳ Advanced Silicon S.A CoolTouch(TM) System id=11 [slave pointer (2)]
⎜ ↳ HID-compliant Mouse HID-compliant Mouse id=13 [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)]
↳ Sony Vaio Keys id=7 [slave keyboard (3)]
↳ Video Bus id=9 [slave keyboard (3)]
↳ Power Button id=10 [slave keyboard (3)]
↳ IR camera id=12 [slave keyboard (3)]
↳ Cherry USB keyboard id=14 [slave keyboard (3)]
↳ Cherry USB keyboard id=15 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=16 [slave keyboard (3)]
拿出您感兴趣的设备(在本例中,我使用的是“Advanced Silicon SA CoolTouch(TM) System”),并记下它的 ID。
现在,您需要找出要将输入设备映射到的显示器。最直接的方法是使用xrandr
:
Screen 0: minimum 8 x 8, current 3200 x 1080, maximum 16384 x 16384
HDMI-0 connected 1280x1024+1920+0 (normal left inverted right x axis y axis) 338mm x 270mm
1280x1024 60.02*+
1280x960 60.00
1280x720 60.00 59.94
1152x864 75.00 70.00
1024x768 60.00
800x600 60.32
720x480 59.94
640x480 59.94 59.93
LVDS-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 299mm
1920x1080 60.00*+ 59.94
在这种情况下,我想将我的触摸设备映射到输出LVDS-0
。
将第一步中的 ID(11
此处)与第二步中的屏幕名称(LVDS-0
此处)结合起来,然后运行以下命令:
xinput --map-to-output INPUT-ID SCREEN
在我的示例中,该命令将是:
xinput --map-to-output 11 LVDS-0
您的触摸设备不应正确映射到输入设备,并且不需要任何额外的配置。
这些设置将重启后不再存在请参阅此问题如何使xinput
命令持久化。
答案2
archlinux wiki 对如何解决这个问题提供了最好的描述,但这里有一些更具体的内容。
您应该运行 xinput --list 来识别输入设备的名称。我创建了一个电子表格来计算转换值。
电子表格在此:https://docs.google.com/spreadsheets/d/13CNQjWfzpEkHM4ZdCcUWDTdQNaFqQ6TYTwatQsYcHcQ/edit?usp=sharing
我计算了你的数字(双 1920x1080 显示器)。
如果您的触摸屏在左侧,则命令将是(“Advanced Silicon SA CoolTouch(TM)System”是我的输入设备的名称,请替换为您的名称):
xinput set-prop 'Advanced Silicon S.A CoolTouch(TM) System' --type=float 'Coordinate Transformation Matrix' 0.5 0 0 0 1 0 0 0 1
对于右边,应该是:
xinput set-prop 'Advanced Silicon S.A CoolTouch(TM) System' --type=float 'Coordinate Transformation Matrix' 0.5 0 0.5 0 1 0 0 0 1
答案3
看: https://wiki.archlinux.org/index.php/Calibrating_Touchscreen
您的矩阵是以下之一:
Touch screen on the left: 0. 5 0 0 0 1 0 0 0 1
Touch screen on the right: 0. 5 0 0. 5 0 1 0 0 0 1
我的配置几乎相同(但屏幕一个接一个),在设置正确的矩阵后,我经历了多次点击,如上面链接底部所述。我还没有找到xorg-server
在 Ubuntu 下重建的方法;可以肯定的是,所描述的过程不起作用。
答案4
由于这是该问题的第一个谷歌搜索结果,我决定发布对我来说看起来很简单的解决方案。
我找到了这个archlinux 上的链接,你可以使用
xinput --map-to-output <stylus device ID> <screen ID>
所以我不需要玩“坐标变换矩阵”......