เล่นเมาส์หลายตัวบน Xorg 7.5

AttachmentSize
Image icon 20100121-mouse-prefs.png28.53 KB

หลังจากที่ Xorg 7.5 ได้เข้าสู่ Debian sid มาระยะหนึ่งแล้ว ก็มาลองของใหม่อย่างหนึ่งที่มากับ Xorg รุ่นนี้กัน คือ XInput2 ซึ่งรองรับ Multi-Pointer X (MPX) คือการใช้อุปกรณ์ชี้ (เมาส์, ทัชแพด, แทร็กบอล, สไตลัส) ได้มากกว่าหนึ่งตัวพร้อมกัน โดยแต่ละอุปกรณ์สามารถมีเคอร์เซอร์แยกกันบนจอภาพได้

คำเตือน: โปรแกรมส่วนใหญ่บน X Window ในปัจจุบัน ยังคงทำงานบนข้อสมมุติว่าระบบมีอุปกรณ์ชี้เพียงตัวเดียว แม้จะใช้หลายตัวประกอบกัน ก็ยังคงควบคุมตัวชี้บนจอภาพตัวเดียวกัน ดังนั้น การใช้งานความสามารถนี้จึงยังไม่สมบูรณ์แบบ ขอให้ทำใจไว้ก่อน ว่าจะพบปัญหาบ้าง

ก่อนอื่น ติดตั้งแพกเกจสำหรับคำสั่งตั้งค่าก่อน คือ xinput

# aptitude install xinput

จากนั้น ลองตรวจดูอุปกรณ์อินพุตที่ตรวจพบในระบบก่อน:

$ xinput list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ "Logitech USB-PS/2 Optical Mouse"       	id=11	[slave  pointer  (2)]
⎜   ↳ "SynPS/2 Synaptics TouchPad"            	id=13	[slave  pointer  (2)]
⎜   ↳ "Macintosh mouse button emulation"      	id=14	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ "Power Button"                          	id=6	[slave  keyboard (3)]
    ↳ "Video Bus"                             	id=7	[slave  keyboard (3)]
    ↳ "Power Button"                          	id=8	[slave  keyboard (3)]
    ↳ "Sleep Button"                          	id=9	[slave  keyboard (3)]
    ↳ "Logitech Logitech USB Keyboard"        	id=10	[slave  keyboard (3)]
    ↳ "AT Translated Set 2 keyboard"          	id=12	[slave  keyboard (3)]
    ↳ "ACPI Virtual Keyboard Device"          	id=15	[slave  keyboard (3)]

ดูที่หัวข้อ Virtual core pointer เครื่องผมมีเมาส์ USB-PS/2 Logitecth (id=11) ต่ออยู่ แล้วก็มีทัชแพด SynPS/2 Synaptics (id=13) ที่มาก้บโน้ตบุ๊กด้วย

ก่อนตั้งค่า บนจอภาพมีตัวชี้แค่ตัวเดียว ถ้าผมเลื่อนเมาส์หรือลูบทัชแพดพร้อมกัน ก็จะเห็นการแย่งกันเลื่อนตัวชี้บนจอภาพ

ผมจะตั้งค่าให้อุปกรณ์ทั้งสองมีตัวชี้บนจอภาพแยกกัน

เริ่มจากสร้าง master input device ตัวใหม่ ตั้งชื่อว่า Aux

$ xinput create-master Aux

ลองตรวจสอบดู จะพบหัวข้อใหม่ คือ Aux pointer และ Aux keyboard เพิ่มเข้ามา

$ xinput list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ "Logitech USB-PS/2 Optical Mouse"       	id=11	[slave  pointer  (2)]
⎜   ↳ "SynPS/2 Synaptics TouchPad"            	id=13	[slave  pointer  (2)]
⎜   ↳ "Macintosh mouse button emulation"      	id=14	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ "Power Button"                          	id=6	[slave  keyboard (3)]
    ↳ "Video Bus"                             	id=7	[slave  keyboard (3)]
    ↳ "Power Button"                          	id=8	[slave  keyboard (3)]
    ↳ "Sleep Button"                          	id=9	[slave  keyboard (3)]
    ↳ "Logitech Logitech USB Keyboard"        	id=10	[slave  keyboard (3)]
    ↳ "AT Translated Set 2 keyboard"          	id=12	[slave  keyboard (3)]
    ↳ "ACPI Virtual Keyboard Device"          	id=15	[slave  keyboard (3)]
⎡ Aux pointer                             	id=16	[master pointer  (17)]
⎜   ↳ Aux XTEST pointer                       	id=18	[slave  pointer  (16)]
⎣ Aux keyboard                            	id=17	[master keyboard (16)]
    ↳ Aux XTEST keyboard                      	id=19	[slave  keyboard (17)]

จากนั้น ก็จับทัชแพดเชื่อมเข้ากับ Aux pointer เสีย โดยอ้าง ID ของทัชแพด คือ 13

$  xinput reattach 13 "Aux pointer"

ลองตรวจสอบดู จะพบว่าทัชแพดย้ายไปอยู่ในหมวด Aux pointer แล้ว

$ xinput list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ "Logitech USB-PS/2 Optical Mouse"       	id=11	[slave  pointer  (2)]
⎜   ↳ "Macintosh mouse button emulation"      	id=14	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ "Power Button"                          	id=6	[slave  keyboard (3)]
    ↳ "Video Bus"                             	id=7	[slave  keyboard (3)]
    ↳ "Power Button"                          	id=8	[slave  keyboard (3)]
    ↳ "Sleep Button"                          	id=9	[slave  keyboard (3)]
    ↳ "Logitech Logitech USB Keyboard"        	id=10	[slave  keyboard (3)]
    ↳ "AT Translated Set 2 keyboard"          	id=12	[slave  keyboard (3)]
    ↳ "ACPI Virtual Keyboard Device"          	id=15	[slave  keyboard (3)]
⎡ Aux pointer                             	id=16	[master pointer  (17)]
⎜   ↳ "SynPS/2 Synaptics TouchPad"            	id=13	[slave  pointer  (16)]
⎜   ↳ Aux XTEST pointer                       	id=18	[slave  pointer  (16)]
⎣ Aux keyboard                            	id=17	[master keyboard (16)]
    ↳ Aux XTEST keyboard                      	id=19	[slave  keyboard (17)]

พร้อมกับบนจอภาพ จะมีตัวชี้แยกเป็นสองตัว เมื่อขยับเมาส์กับลูบทัชแพดพร้อมกัน ก็จะไม่กวนกันอีก แยกตัวชี้ของใครของมัน

พอแยกอุปกรณ์เป็นสองแล้ว ก็สามารถใช้เมาส์มือขวา ใช้ทัชแพดมือซ้ายได้ ซึ่งตรงนี้ก็สามารถไป config ทัชแพดได้สองวิธี คืออาจจะ map ปุ่มใหม่ สลับปุ่มซ้าย-ขวาเสีย หรือไม่ก็ใช้การแตะทัชแพดแทนการคลิกไปตามปกติ

ถ้าจะสลับปุ่มทัชแพด:

$ xinput set-button-map 13 3 2 1

จะเป็นการกำหนดปุ่มใหม่ให้อุปกรณ์ ID 13 (ทัชแพดในกรณีของเครื่องผม) โดย assign ให้ปุ่ม 1, 2, 3 คลิกแล้วได้เป็นปุ่ม 3, 2, 1 ตามลำดับ

แต่ถ้าจะใช้การแตะทัชแพดแทนการคลิก ถ้าคุณเซ็ตไว้อยู่แล้วก็ไม่ต้องทำอะไร แต่ถ้ายังไม่เซ็ต ก็เซ็ตได้ที่ preferences ของ GNOME โดยไปที่เมนู:

System -> Preferences -> Mouse
(ระบบ -> ปรับแต่งพื้นโต๊ะ -> เมาส์)

เลือกแท็บ Touchpad แล้วตั้งค่าตามที่ต้องการ (Enable mouse clicks with touchpad และอาจ Enable horizontal scrolling ด้วยก็ได้)

GNOME Mouse Preferences

ใน เว็บที่มา เขายังมีโปรแกรม xicursorset ที่เขียนเองด้วยภาษาซี เพื่อตั้งรูปร่างของตัวใช้ให้ต่างกันด้วย ก็อาจจะ clone ซอร์สมาคอมไพล์เองได้ครับ แต่สำหรับผม ตัวชี้รูปร่างเหมือนกันก็ไม่เป็นไร

เล่นแล้วได้ประโยชน์อะไร? ผมลองใช้อยู่พักหนึ่ง ก็เห็นประโยชน์เวลาใช้โปรแกรมทั้งหลายที่มี palette แยก เช่น Glade, GIMP, Inkscape, Fontforge เวลามีตัวชี้ตัวเดียว เรามักต้องเลื่อนเมาส์สลับไป ๆ มา ๆ ระหว่างงานของเรากับตัว palette พอมีสองตัว เราก็สามารถทำงานสองมือได้ เช่น มือขวาชี้อยู่ที่ตัวงาน มือซ้ายเลือกเครื่องมือ, หรือในกรณีของ Glade ที่รวมเป็นหน้าต่างเดียว ทำให้ต้อง scroll ช่องหน้าต่างกลางบ่อย ๆ ก็อาจจะใช้มือขวาเลือกวิดเจ็ต มือซ้ายใช้ scroll ช่องหน้าต่างกลางด้วยการลูบที่ขอบทัชแพดก็ได้ โดยไม่ต้องเลื่อนตัวชี้ไป ๆ มา ๆ

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

ที่มา : Poor Man's Multi-Touch: using multiple mice with Xorg

Topic: 
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้