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 ในซอร์ส ขั้นตอนคร่าวๆ ก็คือ
- ใส่ Option "Calibrate" "1" ใน /etc/X11/xorg.conf ตรง section ของ evtouch ข้างบน (อาจจะ comment MinX, MinY, MaxX, MaxY ออกก่อน)
- stop X server ทั้งหมด ถ้าเปิดอยู่
- เรียก ./calibrate.sh
- ใช้ stylus ไล่ลากตามขอบจอ เพื่อหาค่า MinX, MinY, MaxX, MaxY เมื่อคิดว่าได้ค่าแล้ว กด Enter
- รูปกากบาทที่ตำแหน่งต่างๆ บนจอ จะมีรูปหนึ่งเปลี่ยนเป็นสีแดง ให้แตะที่กากบาทนั้นตามลำดับจนครบ
- โปรแกรมจะปิดและเขียนค่าต่างๆ ลงในแฟ้ม out.txt ซึ่งสามารถเอาไปใช้ใน /etc/X11/xorg.conf ได้เลย
- ลบ 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 เร็วๆ ^_^
ป้ายกำกับ: driver, linux, touchscreen
1 ความเห็น:
ณ 30 ตุลาคม 2550 เวลา 14:51 , Unknown แถลง…
ถ้าต้องการทราบรายละเอียด Touchscreen
ACER 1716
NEC 72Vx
หรือจอทัสกรีน อื่นๆ
ดูเพิ่มเติมที่
www.touchscreen.is.in.th
ครับ
แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)
<< กลับหน้าแรก