Powered by Drupal, an open source content management system

การใช้ TouchScreen บน mini2440/debian/X-Window

วิธีการใช้ Touch Screen บน X-Window ของ mini2440 ดูเหมือนจะเป็นปัญหาที่สับสน ด้วยเหตุที่ว่า

  • จะเซ็ทอัพ xorg.conf อย่างไร
  • X-Cursor มักจะวิ่งไปคนละทางกับการเคลื่อนตัวของปากกา และไม่ตรงจุด
  • ข้อมูลเกี่ยวกับเรื่องนี้บนเน็ทก็ไม่ค่อยจะครบถ้วนนัก

Driver ที่เกี่ยวกับ Touch screen จะมีอยู่สองตัวหลักๆคือ tslib และ evtouch  ซึ่งหลังจากที่ได้ทดสอบและไล่โคดทั้งสองตัวแล้วพบว่า

  • tslib ดูเหมือนจะถูกออกแบบมาให้ใช้กับ Qtopia มากกว่าที่จะเป็น X-Windows และ Algorithm ในการ Calibrate เป็นที่งงงวยมาก Scaling ที่ใช้ในโปรแกรมดูเหมือนจะไม่เหมาะกับ X-Window สุดท้ายทำได้อย่างมากที่สุดก็ใกล้เคียงแต่ไม่ตรงในระดับที่ใช้งานได้
  • evtouch ดูเหมาะสมกับ X-Window มากกว่าเนื่องจากการเซ็ทอัพค่าของการ Calibrate อยู่ในตัวไฟล์ xorg.conf เลย ปัญหาคือ โปรแกรม Calibrate ของ evtouch มีบั๊กและคำอธิบายก็งงงวยไม่แพ้กับ tslib ซึ่งถ้ารันโปรแกรม Calibrate ไม่ได้ก็ทำให้ไม่สามารถเซ็ทอัพได้ถูกต้องเช่นกัน

หลังจากงมกันอยู่พักใหญ่ สุดท้ายก็ประสบความสำเร็จในการใช้ touch screen ผ่าน evtouch ร่วมกับ mouse ได้อย่างไม่มีปัญหาด้วยสูตรสำเร็จดังนี้ครับ

 

1. ติดตั้ง evtouch driver ด้วยคำสั่ง

 

# apt-get install xserver-xorg-input-evtouch

 

 2. ตัว calibrate.sh ของ evtouch จะมีบั๊ก ซึ่งมันต้องการไฟล์ที่ชื่อ empty_cursor.xbm ซึ่งอยู่ที่ /usr/share/xf86-input-evtouch แต่กลับไปมองหาใน root directory ดังนั้นเราจำเป็นต้อง copy file ตัวนี้ไปไว้ที่ root ก่อนครับ

 

# cd /
# cp /usr/share/xf86-input-evtouch/empty_cursor.xbm .

 

3. แก้ไขไฟล์ /etc/X11/xorg.conf โดยเพิ่มเติมส่วนสีน้ำเงิน ดังนี้

 

section "ServerLayout"
        Identifier     "XFree86 Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" 
        InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "Touchpad0" "CorePointer"
        Option      "OffTime" "10"
EndSection
Section "InputDevice"
# Change "XkbModel" to "macintosh_old" if you are using
# the deprecated adb keycodes.
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option      "XkbModel" "pc105"
EndSection
 
Section "InputDevice"
        Identifier  "Touchpad0"
        Driver      "evtouch"
        Option "CorePointer" "true"
        Option "SendCoreEvents" "true"
        Option "Device" "/dev/input/event1"
        Option "DeviceName" "touchscreen"
        Option        "MoveLimit" "10"
        Option        "MinX"        "110"
        Option        "MinY"        "104"
        Option        "MaxX"        "915"
        Option        "MaxY"        "911"
        Option "Calibrate" "1"
        Option "ReportingMode" "Raw"
        Option "Emulate3Buttons"
        Option "Emulate3Timeout" "50"
EndSection
 
Section "InputDevice"
       Identifier  "Mouse0"
       Driver      "mouse"
EndSection
Section "Monitor"
        Identifier   "Monitor0"
        ModelName    "Monitor Model"
        DisplaySize 240 320
EndSection
Section "Device"
        #Option "ShadowFB"      "true"
        Identifier  "Card0"
        Driver      "fbdev"
        Option  "fbdev" "/dev/fb0"
EndSection
Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
EndSection

 

4. การ  Calibrate จะต้องใช้คีย์บอร์ดประกอบด้วย ดังนั้นให้เสียบ usb keyboard

 

5. เรียกใช้โปรแกรม Calibrate.sh

 

# cd /usr/lib/xf86-input-evtouch
# ./calibrate.sh

 

หน้าจอจะเปลี่ยนไปเป็นดังนี้

 

6. ให้ใช้ปากกาแตะตรงมุมล่างซ้ายที่สุดของจอที่ชี้โดยจุด A (ไม่ใช่ตรงเครื่องหมาย X นะครับ แต่เป็นมุมสุดท้ายที่จอสว่างก่อนมืด) จะมีตัวหนังสือปรากฏบอกตำแหน่ง Min x,y

 

7. ใช้ปากกาแตะตรงมุมบนขวาที่สุดของจอที่ชี้โดยจุด B ตัวหนังสือจะบอกตำแหน่ง Max x,y

 
8. ให้เคาะ Enter ที่คีย์บอร์ด usb หนึ่งครั้ง ลูกศรตรงกลางที่หายไปจะปรากฏขึ้นอีกครั้งหนึ่ง

 
9. ทำการแตะจุด X ที่หน้าจอทีละครั้งเท่านั้น ตามลำดับหมายเลขดังภาพ

10. ไฟล์ /usr/lib/xf86-input-evtouch/out.txt ที่เก็บค่าของการ Calibrate จะถูกสร้างขึ้นหน้าตาคล้ายๆดังนี้ 

 

        Option        "MinX"        "110"
        Option        "MinY"        "104"
        Option        "MaxX"        "915"
        Option        "MaxY"        "911"
        Option        "x0"        "2"
        Option        "y0"        "5"
        Option        "x1"        "-2"
        Option        "y1"        "1"
        Option        "x2"        "-4"
        Option        "y2"        "1"
        Option        "x3"        "1"
        Option        "y3"        "5"
        Option        "x4"        "-2"
        Option        "y4"        "5"
        Option        "x5"        "-3"
        Option        "y5"        "-2"
        Option        "x6"        "1"
        Option        "y6"        "2"
        Option        "x7"        "-1"
        Option        "y7"        "2"
        Option        "x8"        "-2"
        Option        "y8"        "2"

 

11. ให้เรานำค่าที่ได้จากข้อ 10 ไปใส่ใน /etc/X11/xorg.conf

 

!!!โปรดสังเกตุ

  • Option "SwapY" "1" ที่เพิ่มเติมขึ้นมา เนื่องจาก evtouch ให้ตำแหน่ง 0,0 อยู่มุมล่างของจอ เราจำเป็นต้องกลับค่าเวลาใช้งานกับ X-Window
  • เพิ่มตัวอักษร # หน้า Option "Calibrate" "1" เพื่อ Comment แปลว่าเรากลับไปสู่โหมดใช้งานตามปกติ หากจะ Calibrate ครั้งต่อไปต้องเอา # ออก

ผลสุดท้ายจะเป็นดังนี้

 

section "ServerLayout"
        Identifier     "XFree86 Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" 
        InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "Touchpad0" "CorePointer"
        Option      "OffTime" "10"
EndSection
 
Section "InputDevice"
# Change "XkbModel" to "macintosh_old" if you are using
# the deprecated adb keycodes.
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option      "XkbModel" "pc105"
EndSection
 
Section "InputDevice"
        Identifier  "Touchpad0"
        Driver      "evtouch"
        Option "CorePointer" "true"
        Option "SendCoreEvents" "true"
        Option "Device" "/dev/input/event1"
        Option "DeviceName" "touchscreen"
        Option        "MoveLimit" "10"

        Option        "MinX"        "110"
        Option        "MinY"        "104"
        Option        "MaxX"        "915"
        Option        "MaxY"        "911"
        Option        "x0"        "2"
        Option        "y0"        "5"
        Option        "x1"        "-2"
        Option        "y1"        "1"
        Option        "x2"        "-4"
        Option        "y2"        "1"
        Option        "x3"        "1"
        Option        "y3"        "5"
        Option        "x4"        "-2"
        Option        "y4"        "5"
        Option        "x5"        "-3"
        Option        "y5"        "-2"
        Option        "x6"        "1"
        Option        "y6"        "2"
        Option        "x7"        "-1"
        Option        "y7"        "2"
        Option        "x8"        "-2"
        Option        "y8"        "2"
        Option "SwapY" "1"

#        Option "Calibrate" "1"
        Option "ReportingMode" "Raw"
        Option "Emulate3Buttons"
        Option "Emulate3Timeout" "50"
EndSection

 
Section "InputDevice"
       Identifier  "Mouse0"
       Driver      "mouse"
EndSection
Section "Monitor"
        Identifier   "Monitor0"
        ModelName    "Monitor Model"
        DisplaySize 240 320
EndSection
Section "Device"
        #Option "ShadowFB"      "true"
        Identifier  "Card0"
        Driver      "fbdev"
        Option  "fbdev" "/dev/fb0"
EndSection
Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
EndSection

 

12. ครับเพียงเท่านี้เราก็จะสามารถใช้งาน Touch Screen ร่วมกับ Mouse บน X-Window ได้อย่างถูกต้อง ทดสอบโดยคำสั่ง

 

# X&

อ้างอิง http://www.conan.de/touchscreen/evtouch.html