我很快就要开始攻读博士学位,重点研究建模。我很幸运,我的导师给我提供了一台笔记本电脑。由于除了制作和运行模型外,我还要记录会议纪要,有时也许还要讲课,所以我们考虑买一台触摸屏笔记本电脑。
由于合同原因,我只能选择惠普或戴尔。我们找到了一款不错的笔记本电脑,可以在这里。这里最重要的一点可能是图形芯片是 Intel HD Graphics 3000。
理想情况下,我会在会议和讲座期间只使用触摸屏,并将笔记本电脑扩展到外部显示器以进行建模。在后一种情况下,我仍然会使用笔记本电脑屏幕来绘制图表。目前我担心两点:
笔记本电脑触摸屏能与 Ubuntu 11.10 兼容吗?尽管 AskUbuntu 和谷歌搜索上的类似问题都表明这不会有问题,但我还是想在购买笔记本电脑之前确定一下。如果我需要切换回 Windows 才能使用触摸屏,那真是太浪费了。
如果触摸屏可以工作,那么当我连接外接显示器时它还能工作吗?我发现了一个类似的问题(参见如何在双显示器系统上校准触摸屏?) 但不幸的是,这个问题至今还没有得到解答。
如果您可以告诉我任何可能有帮助的信息(有效或无效的不同设置等),请告诉我。
答案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 倍。
如果我遗漏了什么或者我不清楚,请给我发消息,我会尽力提供帮助。