Theppitak's blog

My personal blog.

29 มกราคม 2550

Touchscreen for Linux

ผิดแผนแทบทุกอย่างสำหรับเดือนนี้ นี่ถ้าได้เขียน New Year Resolution ไป คงแห้วตั้งแต่ต้นปี

แต่ก็ใช่จะเลวร้ายอะไรมาก งานของโรงเรียนที่รับมา ก็ทำให้ได้ประสบการณ์การเซ็ตลินุกซ์ในอีกแบบหนึ่ง แต่ในช่วงระหว่างนั้น ก็แว้บเข้ากรุงเทพฯ ไปพบ debian developer มา พร้อมกับไปเซ็ตเครื่อง LTN ใหม่พร้อมกับอ๊อทและเด่นสินด้วย

ทยอยบันทึกทีละเรื่องดีกว่า.. เรื่องแรกคือการเซ็ต touchscreen บนลินุกซ์ จอภาพที่ใช้ คือ Acer AL1716 ซึ่งจะมี USB port สำหรับสัญญาณ touchscreen พอเสียบปุ๊บ kernel จะรายงานชนิดอุปกรณ์ว่า

input: eGalax Inc. USB TouchController as /class/input/input0
usbcore: registered new driver usbtouchscreen

แล้วพอ start X server ก็จะมี input จาก touch screen เข้ามาทาง /dev/input/mice ทันที แต่ปัญหาก็คือ พิกัดตำแหน่งจะเพี้ยน ซึ่งเราคงอาศัย event ดิบๆ แบบนี้ไม่ได้ ต้องลงไดรเวอร์เพิ่ม

จากการค้นเว็บ พบไดรเวอร์สำหรับ eGalax touchscreen อยู่สองชุด คือ touchkit และ evtouch ซึ่งพออ่าน mini-howto เขาบอกว่า touchkit ค่อนข้างจะไม่เวิร์ก เลยลอง evtouch ตามเขาก่อน ซึ่งก็ปรากฏว่าใช้การได้ ตกลงเลยไม่ได้ลอง touchkit

ลองหาใน debian ก่อน.. มีไดรเวอร์สำหรับ touchscreen หลายตัวใน debian (เช่น xserver-xorg-input-{elo2300,elographics,magictouch,microtouch,mutouch,palmax}) แต่ evtouch นั้น มีคน ITP ไว้ แต่ดูเหมือนจะยัง ขาด sponsor เลยตกลงดาวน์โหลดซอร์สมาคอมไพล์เอา

ระบบ build เป็น GNU autotools อยู่แล้ว เลยง่าย build เสร็จ ก็ติดตั้ง evtouch_drv.so ลงที่ /usr/lib/xorg/modules/input/ แล้วไปแก้ /etc/X11/xorg.conf โดยเพิ่ม Section "InputDevice" ประมาณนี้:

Section "InputDevice"
    Identifier    "Touchscreen"
    Driver        "evtouch"
    Option        "Device"    "/dev/input/event0"
    Option        "MinX"    "124"
    Option        "MinY"    "81"
    Option        "MaxX"    "1909"
    Option        "MaxY"    "1965"
EndSection

พร้อมกับเพิ่มบรรทัดนี้ใน Section "ServerLayout" ด้วย:

    InputDevice    "Touchscreen" "CorePointer"

ในส่วน Section "InputDevice" นั้น ตรงชื่ออุปกรณ์ "/dev/input/event0" สามารถดูรายละเอียดอุปกรณ์ต่างๆ ได้ที่ /proc/bus/input/devices ส่วนค่า MinX, MinY, MaxX, MaxY นั้น ต้อง calibrate เอา ซึ่งใน README ในซอร์สบอกว่าโปรแกรม calibrate ไม่ได้ทดสอบ และใน Makefile.am ก็ comment ไว้ แต่ด้วยความดันทุรัง ก็ uncomment แล้ว automake ซะ จากนั้นก็ configure และคอมไพล์ใหม่อีกครั้ง จะได้โปรแกรม ev_calibrate ออกมา

อ่านวิธี calibrate ได้จาก README.calibrate ในซอร์ส ขั้นตอนคร่าวๆ ก็คือ

  1. ใส่ Option "Calibrate" "1" ใน /etc/X11/xorg.conf ตรง section ของ evtouch ข้างบน (อาจจะ comment MinX, MinY, MaxX, MaxY ออกก่อน)
  2. stop X server ทั้งหมด ถ้าเปิดอยู่
  3. เรียก ./calibrate.sh
  4. ใช้ stylus ไล่ลากตามขอบจอ เพื่อหาค่า MinX, MinY, MaxX, MaxY เมื่อคิดว่าได้ค่าแล้ว กด Enter
  5. รูปกากบาทที่ตำแหน่งต่างๆ บนจอ จะมีรูปหนึ่งเปลี่ยนเป็นสีแดง ให้แตะที่กากบาทนั้นตามลำดับจนครบ
  6. โปรแกรมจะปิดและเขียนค่าต่างๆ ลงในแฟ้ม out.txt ซึ่งสามารถเอาไปใช้ใน /etc/X11/xorg.conf ได้เลย
  7. ลบ Option "Calibrate" "1" ออกจาก /etc/X11/xorg.conf แล้ว restart X

ปัญหาที่พบและวิธีแก้:

  • พิกัด X สลับกับ Y เหมือนกับจอมันหมุนไป -> ใช้ Option "Rotate" "CW" (สำหรับหมุนจอตามเข็มนาฬิกา หรือ "CCW" สำหรับการหมุนทวนเข็มนาฬิกา)
  • แตะแล้ว event มันเบิ้ล ทำให้ได้ double click แทนตลอด -> ตัด mouse InputDevice ออกจาก Section "ServerLayout" เพราทำให้ะเกิด event สองทาง ทั้งจาก /dev/input/eventX และ /dev/input/mice
  • reboot แล้ว ใช้ touchscreen ไม่ได้ เนื่องจาก /dev/input/eventX เปลี่ยนไปเป็นค่าอื่น ขึ้นอยู่กับลำดับการทำงานขณะบูต -> ใช้ /dev/input/by-path/* แทน ซึ่ง device ตรงนั้น จะแทนอุปกรณ์โดยตรง โดยเป็น symlink ไปยัง /dev/input/eventX ที่ตรงกัน
  • อื่นๆ -> ดู Advanced Configuration ได้จาก เว็บของ evtouch แล้วปรับละเอียดเอา

/me ลุ้นให้ evtouch ได้ debian sponsor เร็วๆ ^_^

ป้ายกำกับ: , ,

1 ความเห็น:

  • 30 ตุลาคม 2550 14:51 , Blogger kiattikul แถลง…

    ถ้าต้องการทราบรายละเอียด Touchscreen
    ACER 1716
    NEC 72Vx
    หรือจอทัสกรีน อื่นๆ
    ดูเพิ่มเติมที่
    www.touchscreen.is.in.th

    ครับ

     

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem