内容


为 Linux 安装触摸屏

如何安装并配置带有触摸屏输入的 PSOne LCD

KDE、GNOME/Nautilus、OpenWindows、WINE 等等 —— 有很多 GUI 都使得用户可以简化对于 Linux 应用程序强大功能的访问和使用。我们在这里面可以添加哪些组件来使 Linux 更加稳健地进入消费设备领域呢?答案是触摸屏。使用触摸屏,Linux 程序就可以成为很多设备的控制器,例如数字录像机、类似 TiVo 的个人录像机、媒体中心、智能房屋系统或者烤面包机的控制界面。这种可能性是无穷无尽的。

触摸屏提供了很多单独的打包解决方案。这就像传统的 CRT 和最近几年出现的 LCD 一样。在某些情况中,触摸屏已经集成到显示单元中了。在另外一些情况中(本文讨论的就是这种情况),触摸屏是独立的单元,具有特定的尺寸和目的。

本文将简要介绍如何准备安装并配置 LCD(图像屏幕)、modeline(一个配置行,告诉服务器如何驱动监视器)、触摸屏(用作输入)。本文还列出了一些参考资料来回答在集成触摸屏时可能遇到的其他问题。

安装 LCD

触摸屏只用作输入;因此,还需要一些东西来显示图像。除了显示用户界面以外,显示还用于进行校准,这可以通过以下两种方法实现:

  • 简单一点的方法是从任何供应商获取一个 LCD 屏幕,并将它连接到 PC 系统上。只需要确保连接可以正确操作显卡,可以是直接连接,也可以通过一个适配器。
  • 复杂一点儿的方法(也是在本文中介绍的方法)是获取一个 PSOne LCD,它的价格非常低。需要使用焊锡自己焊接一点线缆,如果按照这个修正方案(请参阅 参考资料)的提示,这并不是太困难。采用这种方法,并使用一个 PSOne LCD,这需要一个具有 CSYNC(复合同步)信号的显卡 —— 大部分 ATI 和 Matrox 显卡都具有这种信号。对于那些没有 CSYNC 信号的显卡来说,可以设计一个生成 CSYNC 信号的电路(请参阅 参考资料),但是通常购买一个具有这种信号的显卡更加容易。

连接电源

LCD 需要使用电源才能正常工作并点亮显示设备。就像 LCD 安装的情况一样,也有一种简单的方法和一种困难的方法:

  • 简单的方法是购买一个 LCD,它可以根据需要插到墙上的插座或车载适配器上。插到墙上的插座上非常简单,这是由于 PC 也都需要墙上的电源插座。
  • 困难的方法(也是我所选择的方法)是从 eBay 上购买一个车载电源适配器。它使用的是 12 伏的电压,这个电压也是在普通的计算机中通过电源提供的电压。我是按照 “Hooking up a Neon Light” 的提示简单地设计的,因为它们的功能是相同的(请参阅 参考资料)。在进行修改之后,它就可以直接插入到一个 PC 电源上了。同样,也需要焊接一点儿电路,但是这样最后就不需要使用另外一个墙上的插座了。

现在应该处理 modeline 了。

提醒:什么是 modeline?

modeline 是配置文件中的一个配置行,它可以为服务器提供有关所连接的计算机显示器的信息,以及如何在指定的显示分辨率下对其进行驱动的信息。(最初在 XFree86 上是在 XF86Config 中。)现在,在很多 Linux/UNIX® 版本中,modeline 都不再需要了,因为服务器会在启动时根据各种参数来计算配置,例如:

  • 服务器配置文件中的通用设置和直观设置
  • 通过 EDID 查询获得的监视器性能参数

EDID(Extended Display Identification Data) 是一种 VESA 标准数据格式,其中包含有关监视器及其性能的参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串。这些信息保存在 display 节中,用来通过一个 DDC(Display Data Channel)与系统进行通信,这是在显示器和 PC 图形适配器之间进行的。最新版本的 EDID 可以在 CRT、LCD 以及将来的显示器类型中使用,这是因为 EDID 提供了几乎所有显示参数的通用描述。

一个 modeline 有 10 个参数,首先是一个指定分辨率的标签。第 2 个参数指定的是像素时钟频率(单位为 MHz)。下面是两组 4 个数字。第 1 组指定了 x 分辨率(宽度)以及相关参数;第 2 组指定的是 y 分辨率(高度)。另外,还可以添加其他参数作为选项来控制水平和垂直的同步值,还有一些选项可以控制隔行模式和双屏模式。

那么我们为什么还需要不辞辛苦地利用 modeline 呢?这通常是为了一些旧的不常用的设备,或者不能精细地进行调节的显示硬件,此时可能只好手工设定 modeline。

确定正确的 modeline 设置

如果使用简单的方法来安装 LCD,那么屏幕可能在 Linux OS 启动时就可以自动识别了;如果是这样,就可以开始设置触摸屏了。如果采用困难的方法,或者没有自动识别出 LCD,那么可能需要建立定制的 modeline。不同的 modeline 可以通过查询 Google 获得,也可以查看制造厂商的规格说明,或者自己试验在正确的配置文件中包含的 modeline。如果正在安装一个 PSOne LCD,那么找出正确的 modeline 的最简单方法是使用基于 Windows 的 PC,并使用 PowerStrip 工具(其中提供了对多种显卡的高级多屏显示的可编程硬件支持;请参阅 参考资料)。

如果知道 LCD 的专用分辨率,就可以首先试用一下这些值。对于 PSOne LCD 来说,可以首先尝试一下 640x480i(Arcade)。从这里开始,可能需要修改扫描频率(PowerStrip 工具可以修改这个设置),直到获得稳定的图像为止。

表 1 列出了为 PSOne LCD 的不同显卡所使用的适当 modeline —— 我发现这些值都可以通过在互联网上进行搜索获得。我无法获得所有的显卡,因此这里使用的唯一显卡是 ATI 9600XT。如果您发现这些设置中有错误,并且希望对这个清单贡献自己的力量,请给我发 e-mail。

表 1. Linux modeline
CardNTSC/PALModeline
Matrox MystiqueNTSC"640x480" 12.954 640 680 744 816 480 496 504 528 interlace +hsync +vsync
Matrox Millenium G200NTSC"640x480" 13.193 640 688 752 832 480 492 500 524 interlace -hsync -vsync
Matrox Millenium G200PAL"720x576" 14.875 720 736 800 896 576 602 606 668 interlace +hsync +vsync
ATI 7000NTSC"640x480" 12.175 640 664 720 784 480 486 493 524 interlace +hsync +vsync
ATI 7000PAL"720x576" 14.950 720 763 859 920 576 580 584 588 interlace +hsync +vsync
ATI 9600XTNTSC"640x480" 13.582 640 704 768 864 480 486 493 524 interlace -hsync -vsync
ATI 9700PAL"720x576" 14.881 720 781 829 960 576 606 610 646 interlace +hsync +vsync
EPIA 800NTSC"640x480" 13.678 640 672 736 800 480 486 494 524 interlace composite

modeline 的位置

现在已经确定了正确的 modeline 设置,这些信息需要放到两个位置。第一个位置是 xorg.conf 配置文件,第二个位置是 boot 参数。接下来让我们对它们进行一下介绍。

xorg.conf 配置文件

清单 1 是一个样例 xorg.conf 配置文件。可以对这个文件简单地进行修改,从而通过添加另外一个 Monitor/Screen 标识符来实现一个双头的显示设置。另外,请注意一下 ForceMinDotClock 选项。ATI 9600XT 报告说自己的最小的点时钟是 20M,但是实际上可以更低。这个选项让我们可以在 modeline 中设置更低的点时钟。PSOne LCD 需要一个更低的点时钟(范围是 12M-15M)来驱动显示器。根据自己使用的 LCD ,可以包括这些设置,也可以不包括这些设置。

这个清单还包括了 touchkit 的必要设置。对于我使用的 touchkit 来说,设备和驱动程序可以从安装手册中获得。根据决定使用的触摸屏的厂商不同,设置可能会有所不同。

清单 1. xorg.conf 配置文件
# Xorg configuration created by system-config-display
Section "ServerLayout"
    Identifier     "Single head configuration"
    Screen      0  "Screen0" Absolute 0 0
#   Screen      1  "Screen1" Absolute 640 0
    InputDevice    "Mouse0" "CorePointer"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "TKPANEL" "SendCoreEvents"
    Option         "AllowMouseOpenFail" "true"
EndSection
Section "Files"
    RgbPath      "/usr/X11R6/lib/X11/rgb"
    FontPath     "unix/:7100"
EndSection
Section "Module"
    Load  "dbe"
    Load  "extmod"
    Load  "fbdevhw"
    Load  "glx"
    Load  "record"
    Load  "freetype"
    Load  "type1"
    Load  "dri"
    Load  "v4l"
EndSection
Section "InputDevice"
    Identifier  "Keyboard0"
    Driver      "kbd"
    Option          "XkbModel" "pc105"
    Option          "XkbLayout" "us"
EndSection
Section "InputDevice"
    Identifier  "Mouse0"
    Driver      "mouse"
    Option          "Protocol" "IMPS/2"
    Option          "Device" "/dev/input/mice"
    Option          "ZAxisMapping" "4 5"
    Option          "Emulate3Buttons" "yes"
EndSection
Section "InputDevice"
    Identifier  "TKPANEL"
    Driver      "touchkit"
    Option      "Device" "/dev/tkdat0"
    Option      "DebugLevel" "0"
EndSection
Section "Monitor"
    Identifier   "Monitor0"
    VendorName   "Monitor Vendor"
    ModelName    "LCD Panel 640x480i"
    HorizSync    15.720
    Option          "dpms"
    Modeline     "640x480" 13.582 640 704 768 864 480 486 493 524 interlace -hsync -vsync
EndSection
Section "Device"
    Identifier  "Videocard0"
    Driver      "radeon"
    VendorName  "Videocard vendor"
    BoardName   "ATI Radeon 9600"
    Option      "ForceMinDotClock" "13M"
EndSection
Section "Screen"
    Identifier "Screen0"
    Device     "Videocard0"
    Monitor    "Monitor0"
    DefaultDepth     16
    SubSection "Display"
        Viewport   0 0
        Depth     16
        Modes    "640x480"
    EndSubSection
EndSection
Section "DRI"
    Group        0
    Mode         0666
EndSection

内核启动选项

包含这些选项的第二个位置是在启动时,这样内核就可以正确显示这些信息了。确定要提供哪些选项的最佳方法是使用 Framebuffer Howto 中第 18 节(请参阅 参考资料)的介绍。使用清单 1 中的 xorg.conf 文件和 Framebuffer Howto 第 18 节的介绍,可以找到下面(正确的)video 启动参数的设置:

清单 2. 内核启动参数
kernel /vmlinuz-2.6.11-1.27_FC3 ro root=/dev/VGROOT/LVROOT rhgb quiet vga=0x301
video=radeonfb:xres:640,yres:480,depth:16,left:96,right:64,hslen:64,upper:31,
                                               lower:6,vslen:7,pixclock:13582

需要将这个 video 选项添加到适当的启动配置文件中(对于 GRUB 来说是 menu.lst,对于 LILO 来说是 lilo.conf)。video 选项直到 rhgb(Red Hat Graphical Boot)启动时才会生效。vga=0x301 将图形模式设置为 640x480(请参阅 Howto 中的 5.3 节)。虽然这并没有提供对于 PSOne 屏幕所需要的信息,但是这使得在 rhgb 之前出现的文本的可读性更好。

设置触摸屏

第一件要做的事情是安装触摸屏软件。对于我所使用的触摸屏来说,需要从 eGalax 上下载软件(请参阅 参考资料)。我使用了 FC3 发行版本,因此就下载了一个 FC3 映像文件。我所做的唯一修改是将编译过程指向 X 服务器的 x86_64 include 文件。在 touchkit_drv.o 文件的 makefile 中添加了 -I/usr/X11R6/lib64/Server/include。这个安装是为 32 位的系统设置的,因此只有在希望获得一个严格的 64 位系统时才需要这样做。

清单 3 给出了 xorg.conf 配置文件的两行内容。第一行告诉 X 服务器将所有的核心事件发送给 TKPANEL 设备和鼠标(这样就可以同时使用它们了)。第二行告诉 X 服务器如果没有鼠标,仍然要启动 X 显示。这样,在系统没有连接鼠标时,就可以使用这个触摸屏了。

清单 3. xorg.conf 文件中的两个重要行
    InputDevice    "TKPANEL" "SendCoreEvents"
    Option         "AllowMouseOpenFail" "true"

可能需要使用 touchcfg 配置工具来配置触摸屏(也可以使用其他适合您的触摸屏的工具)。图 1 是 touchcfg 工具的截屏图。

图 1. touchcfg 配置工具
touchcfg 配置工具
touchcfg 配置工具

从这个工具中,我们可以使用刻度来告诉触摸屏显示的边缘在什么地方。更精细的点刻度(25pt 而不是 4 pt)可以为屏幕位置提供更好的近似值。这个工具还让您可以执行简单的画图测试,并设置双击的速度和范围。其他触摸屏配置工具的特性可能更多,也可能比较少。

当这个过程完成时,您的工作也就完成了。当机器重新启动时,触摸屏就可以像普通的鼠标一样正常工作了。可以通过将手指放在文本上来选择文本和图标。按下手指就代表鼠标右击事件。图 2 和图 3 给出了 LCD 的启动屏幕。

图 2. rhgb 屏幕
rhgb 屏幕
rhgb 屏幕
图 3. 启动到 KDE
启动到 KDE
启动到 KDE

相关主题

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=101584
ArticleTitle=为 Linux 安装触摸屏
publish-date=01092006