เหตุการณ์เมาส์ทำงานใน linux อย่างไร


25

นี่เป็นเรื่องที่แปลกประหลาดส่วนใหญ่ฉันพยายามเข้าใจว่าการจัดการเหตุการณ์ทำงานในระดับต่ำดังนั้นโปรดอย่าอ้างอิงฉันกับซอฟต์แวร์ที่จะทำเพื่อฉัน

ถ้าเช่นฉันต้องการเขียนโปรแกรมใน C / C ++ ที่ตอบสนองต่อการคลิกเมาส์ฉันคิดว่าฉันต้องใช้การเรียกของระบบเพื่อขอฟังก์ชั่นบางอย่างกับเคอร์เนลหรือบางทีคุณอาจต้องตรวจสอบสถานะของเมาส์อย่างต่อเนื่อง ฉันไม่รู้

ฉันคิดว่าเป็นไปได้เนื่องจากทุกอย่างเป็นไปได้ใน C / C ++ อยู่ในระดับต่ำมากฉันส่วนใหญ่สนใจในการทำงานแม้ว่าฉันอาจจะไม่ต้องใช้ตัวเอง

คำถามคือมันทำงานอย่างไรใน linux, มีการเรียกระบบ, ไลบรารี c, หรือไม่?

คำตอบ:


28

หากคุณกำลังเขียนโปรแกรมในโลกแห่งความจริงที่ใช้เมาส์ใน Linux คุณมักจะเขียนแอปพลิเคชั่น X และในกรณีนี้คุณควรถามเซิร์ฟเวอร์ X สำหรับกิจกรรมเมาส์ Qt , GTKและlibsdlเป็นห้องสมุด C ยอดนิยมที่ให้ฟังก์ชั่นสำหรับการเข้าถึงเมาส์แป้นพิมพ์กราฟิกตัวจับเวลาและคุณสมบัติอื่น ๆ ที่จำเป็นสำหรับการเขียนโปรแกรม GUI Ncursesเป็นไลบรารีที่คล้ายกันสำหรับแอปพลิเคชันเทอร์มินัล

แต่ถ้าคุณกำลังสำรวจระบบของคุณหรือคุณไม่สามารถใช้ X ด้วยเหตุผลใดก็ตามนี่คือวิธีการทำงานที่อินเตอร์เฟสเคอร์เนล

แนวคิดหลักในปรัชญา UNIX คือ "ทุกอย่างเป็นไฟล์" โดยเฉพาะอย่างยิ่งสิ่งต่าง ๆ ที่เป็นไปได้ควรเข้าถึงได้ผ่านการโทรของระบบเดียวกับที่คุณใช้เพื่อทำงานกับไฟล์ ดังนั้นเคอร์เนลอินเตอร์เฟสกับเมาส์จึงเป็นไฟล์อุปกรณ์ คุณopen()เป็นตัวเลือกโทรpoll()หรือselect()บนเพื่อดูว่ามีข้อมูลเข้ามาและread()อ่านข้อมูล

ในครั้งก่อน-USB, แฟ้มอุปกรณ์เฉพาะมักจะเป็นพอร์ตอนุกรมเช่น/dev/ttyS0หรือพอร์ต PS / /dev/psaux2, คุณได้คุยกับเม้าส์โดยใช้โพรโทคอลฮาร์ดแวร์ใด ๆ วันนี้/dev/input/*ระบบย่อยเป็นที่ต้องการเนื่องจากเป็นวิธีการจัดการอุปกรณ์อินพุตที่เป็นอิสระและเป็นเอกภาพ โดยเฉพาะอย่างยิ่ง/dev/input/miceจะให้กิจกรรมจากเมาส์ใด ๆ ที่ติดอยู่กับระบบของคุณและ/dev/input/mouseNจะให้กิจกรรมจากเมาส์เฉพาะ ในลีนุกซ์รุ่นใหม่ส่วนใหญ่ไฟล์เหล่านี้จะถูกสร้างขึ้นแบบไดนามิกเมื่อคุณต่อเมาส์

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณจะอ่านหรือเขียนไปยังไฟล์อุปกรณ์เมาส์คุณสามารถเริ่มต้นด้วยinput / input.txtในเอกสารประกอบเคอร์เนล ดูเฉพาะในหัวข้อ 3.2.2 (mousedev) และ 3.2.4 (evdev) และส่วนที่ 4 และ 5


8

โดยทั่วไปข้อมูลจากอุปกรณ์ฮาร์ดแวร์มีการสัมผัสกับการใช้งานผ่านแฟ้มอุปกรณ์ สำหรับเมาส์บนระบบ Linux ที่ทันสมัยอุปกรณ์นี้/dev/mice(อุปกรณ์นี้รวบรวมกิจกรรมจากเมาส์ที่เชื่อมต่อทั้งหมดนอกจากนี้ยังมีอุปกรณ์ที่เกี่ยวข้องกับเมาส์แต่ละตัว)

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

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.