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 Card NTSC/PAL Modeline Matrox Mystique NTSC "640x480" 12.954 640 680 744 816 480 496 504 528 interlace +hsync +vsync Matrox Millenium G200 NTSC "640x480" 13.193 640 688 752 832 480 492 500 524 interlace -hsync -vsync Matrox Millenium G200 PAL "720x576" 14.875 720 736 800 896 576 602 606 668 interlace +hsync +vsync ATI 7000 NTSC "640x480" 12.175 640 664 720 784 480 486 493 524 interlace +hsync +vsync ATI 7000 PAL "720x576" 14.950 720 763 859 920 576 580 584 588 interlace +hsync +vsync ATI 9600XT NTSC "640x480" 13.582 640 704 768 864 480 486 493 524 interlace -hsync -vsync ATI 9700 PAL "720x576" 14.881 720 781 829 960 576 606 610 646 interlace +hsync +vsync EPIA 800 NTSC "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 配置工具
從這個工具中,我們可以使用刻度來告訴觸摸屏顯示的邊緣在什麼地方。更精細的點刻度(25pt 而不是 4 pt)可以為屏幕位置提供更好的近似值。這個工具還讓您可以執行簡單的畫圖測試,並設置雙擊的速度和范圍。其他觸摸屏配置工具的特性可能更多,也可能比較少。
當這個過程完成時,您的工作也就完成了。當機器重新啟動時,觸摸屏就可以像普通的鼠標一樣正常工作了。可以通過將手指放在文本上來選擇文本和圖標。按下手指就代表鼠標右擊事件。圖 2 和圖 3 給出了 LCD 的啟動屏幕。
圖 2. rhgb 屏幕
圖 3. 啟動到 KDE