触摸屏和额外的外部显示器

触摸屏和额外的外部显示器

我很快就要开始攻读博士学位,重点研究建模。我很幸运,我的导师给我提供了一台笔记本电脑。由于除了制作和运行模型外,我还要记录会议纪要,有时也许还要讲课,所以我们考虑买一台触摸屏笔记本电脑。

由于合同原因,我只能选择惠普或戴尔。我们找到了一款不错的笔记本电脑,可以在这里。这里最重要的一点可能是图形芯片是 Intel HD Graphics 3000。

理想情况下,我会在会议和讲座期间只使用触摸屏,并将笔记本电脑扩展到外部显示器以进行建模。在后一种情况下,我仍然会使用笔记本电脑屏幕来绘制图表。目前我担心两点:

  1. 笔记本电脑触摸屏能与 Ubuntu 11.10 兼容吗?尽管 AskUbuntu 和谷歌搜索上的类似问题都表明这不会有问题,但我还是想在购买笔记本电脑之前确定一下。如果我需要切换回 Windows 才能使用触摸屏,那真是太浪费了。

  2. 如果触摸屏可以工作,那么当我连接外接显示器时它还能工作吗?我发现了一个类似的问题(参见如何在双显示器系统上校准触摸屏?) 但不幸的是,这个问题至今还没有得到解答。

如果您可以告诉我任何可能有帮助的信息(有效或无效的不同设置等),请告诉我。

答案1

我在装有 Ubuntu 12.04 64 位的 Surface Pro 2 上遇到了同样的问题。我有一个双显示器设置,带有 MiniDisplay 转 HDMI 电缆,我的第二台显示器不支持触摸。对我有用的是通过以下方式查找设备名称:

xinput --list

返回:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ HOLTEK Wireless USB Device                id=10   [slave  pointer  (2)]
⎜   ↳ Atmel Atmel maXTouch Digitizer            id=13   [slave  pointer  (2)]
⎜   ↳ MICROSOFT SAM                             id=11   [slave  pointer  (2)]
⎜   ↳ MICROSOFT SAM                             id=12   [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)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ HOLTEK Wireless USB Device                id=9    [slave  keyboard (3)]
    ↳ Front LifeCam                             id=14   [slave  keyboard (3)]
    ↳ Rear LifeCam 

@phnomic 提到的“xsetwacom --list”不会返回任何内容。

然后,我们将设备映射到屏幕,就像@phnomic 建议的那样:

xsetwacom set "Atmel Atmel maXTouch Digitizer" MapToOutput eDP1
xsetwacom set 11 MapToOutput eDP1
xsetwacom set 12 MapToOutput eDP1

请注意,11 和 12 是两个设备的设备 ID,均名为“MICROSOFT SAM”

答案2

有一个专门用于将输入映射到显示的命令,xsetwacom称为MapToOutput。您可以执行以下操作:

首先确定要映射到的显示器的名称。这可以通过运行以下命令来完成xrandr

phnomic@phnomic-jobb:~$ xrandr
Screen 0: minimum 320 x 200, current 3200 x 1597, maximum 8192 x 8192
LVDS1 connected 1280x800+1920+797 (normal left inverted right x axis y axis) 286mm x 179mm
   1280x800       60.0*+
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 518mm x 324mm
   1920x1200      59.9*+
   1920x1080      60.0  
   1600x1200      60.0  
   1680x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
HDMI3 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP3 disconnected (normal left inverted right x axis y axis)

就我而言,我想使用LVDS1。

接下来,弄清楚你的设备叫什么。这可以通过以下方式完成xsetwacom --list

phnomic@phnomic-jobb:~$ xsetwacom --list
Wacom ISDv4 E6 Pen stylus           id: 20  type: STYLUS    
Wacom ISDv4 E6 Pen eraser           id: 21  type: ERASER    
Wacom ISDv4 E6 Finger touch         id: 22  type: TOUCH     

xsetwacom set "[device name]" MapToOutput [screen name]最后,对所有要分配的设备运行该命令。在我的例子中,该命令变为:

phnomic@phnomic-jobb:~$ xsetwacom set "Wacom ISDv4 E6 Pen stylus" MapToOutput LVDS1
phnomic@phnomic-jobb:~$ xsetwacom set "Wacom ISDv4 E6 Pen eraser" MapToOutput LVDS1
phnomic@phnomic-jobb:~$ xsetwacom set "Wacom ISDv4 E6 Finger touch" MapToOutput LVDS1

然后,无论您将它连接到什么显示器以及您将显示器采用什么方向,您都可以使用您的花式触摸屏。

如果你想了解更多,我建议这个 sourceforge 帖子

答案3

我写了一个简单的脚本来修复使用 udev 的问题。首先创建 /etc/udev/rules.d/99-monitor-hotplug.rules

就是这一行:

ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/usr/share/X11/touchscreen.sh"

现在是 /usr/share/X11/touchscreen.sh 文件(标记为 +x !!):

#!/bin/sh
#
# This is designed to be run by hotplug.  See hotplug docs ...
#

# Make sure PATH is sane
export PATH="/bin:/usr/bin"

# Now the rest of the ENV to hook into X
# This should probably be run by Dbus, but I don't know how.
# Instead I see who's running Dbus, and get that user's .Xauthority
# So, its kind of a hack!

export USER=`ps -ef | grep dbus-daemon | grep session | cut -d ' ' -f 1`
export DISPLAY=":0"
export XAUTHORITY=/home/$USER/.Xauthority
export ICON=/usr/share/icons/Humanity/devices/48/monitor.svg

# Find Touchscreen id number -- sets id
export id=`xinput | grep Touch | cut -d '=' -f 2 | cut -f 1`

# Find the primary screen! 
export screen=`xrandr | grep primary | cut -d ' ' -f 1`

# Use xinput to map them
xinput --map-to-output $id $screen

su $USER -c "notify-send -i $ICON \"TouchScreen\"\
 \"Mapping Device $id to your $screen screen\""

最后一行弹出一条消息,告诉你它做了什么。当从终端使用任何用户 ID 时,它工作得很好,但从 udev 上不起作用!脚本本身工作正常 - 只是从 udev 通知失败。但我认为是另一个 dbus 问题。如果有人能解决这个问题 - 请告诉我!!

答案4

太糟糕了,显然没人知道。

不过我很幸运。我的一位同事几个月前买了这台触摸屏笔记本电脑,当他在实验室时,他并不介意我摆弄它。这是我目前发现的:

触摸屏在 Ubuntu 11.10 中运行完美,至少在您连接外部显示器之前是这样。此时触摸屏与组合的原始屏幕和外部显示器对齐,这意味着您无法正确使用触摸屏。好消息是它就像 Wacom 绘图板一样工作。这意味着您可以更改触摸屏操作的显示器区域。通过调整Area所有设备的属性,您可以让触摸屏按您想要的方式工作,例如通过执行:

for pad in "Serial Wacom Tablet stylus" "Serial Wacom Tablet eraser" "Serial Wacom Tablet touch"
do
    xsetwacom --set "$pad" Area 0 0 10000 10000
done

其中的0 0 10000 10000值是任意的(还没有时间弄清楚这一点)。

今天我要向大家介绍的是 chh,他想出了如何做到这一点,并发布了以下帖子:http://ubuntuforums.org/showthread.php?t=1527548。在这个链接上,您还可以找到他用来计算正确值的脚本。xsetwacom他使用的版本与我今天下载的版本不同,所以他的脚本对我来说不起作用。不过,通过这个链接,您应该能够自己弄清楚。

长话短说,如果您打算购买我之前提到的 HP 笔记本电脑,那么在连接外接显示器后,您应该能够使触摸屏正常工作。

现在我应该回去工作了。


更新!本周我终于拿到了我的笔记本电脑,并对这个问题中描述的双屏场景做了更深入的分析。

使用 xsetwacom --list,您可以获得类似 Wacom 的设备列表(即您的触摸屏)。使用此命令返回的 id,您可以节省大量输入。如果您想重现我将要解释的内容,了解我的确切配置可能会很有用:

tomas@EliteBook:~$ xsetwacom --list
Serial Wacom Tablet stylus          id: 16  type: STYLUS    
Serial Wacom Tablet eraser          id: 18  type: ERASER    
Serial Wacom Tablet touch           id: 19  type: TOUCH   

使用 id 16 我可以获得当前区域设置(18 和 19 应该在这里给出相同的结果):

tomas@EliteBook:~$ xsetwacom --get 16 Area
0 0 26312 16520

这个值的含义我将留给专家来决定。对我来说,重要的是要知道这意味着 100%。无论是否连接了外接显示器,这个值都保持不变。通过反复试验,我得到了一个不错的触摸屏校准结果xsetwacom --set 16 0 0 50000 22000。当你进一步研究它时,你就会明白为什么这是有道理的:将正确的校准定义为,将0 0 x y初始(我称之为 100%)设置定义为0 0 x0 y0。知道我的笔记本电脑的分辨率是 1280x800,外接显示器的分辨率是 1920x1080,外接显示器位于笔记本电脑的右侧,顶部对齐,你会注意到在水平方向上,正确的因数是我的总分辨率(对我来说是 1280+1920)与我想要的触摸屏分辨率(1280)的比例。这给出了一个因数,我将其定义为 a = 2.5。在垂直方向上,这是 1080 除以 800,或 b = 1.35。

你可能想再读一遍上面的句子。为了帮助你,请参阅此截图阿兰德的。

要获得水平区域 x 的完美值,只需将 x0 乘以因子 a。对垂直区域执行相同操作,y = b*y0,然后对所有触摸屏设备(笔、橡皮擦、触摸)重复此操作,一切就绪:

xsetwacom --set 16 Area 0 0 65780 22302
xsetwacom --set 18 Area 0 0 65780 22302
xsetwacom --set 19 Area 0 0 65780 22302

编辑:嗯,这很奇怪,手指/触摸所需的面积比其他设备小约 10 倍。

如果我遗漏了什么或者我不清楚,请给我发消息,我会尽力提供帮助。

相关内容