การจัดการคีย์ X และตัวชี้คว้าบนบรรทัดคำสั่ง


20

เครื่องมือบรรทัดคำสั่งใดที่มีอยู่ในรายการและจัดการคว้าเซิร์ฟเวอร์ X (นั่นคือการคว้าในคีย์และตัวชี้คว้ากล่าวคือ จำกัด การใช้คีย์หรือปุ่มเมาส์เฉพาะกับแอปพลิเคชันเฉพาะหรือการทำให้ตัวชี้เมาส์ค้างอยู่ในพื้นที่หน้าจอเฉพาะ) ฉันกำลังมองหาxgrabยูทิลิตี้สมมุติฐานที่จะ แสดงสิ่งที่ชอบ

Key     0x00f00ba5  0x123   0
Button  0x00f00ba5  2       
Pointer 0x00abcdef  

หมายความว่าได้มีการเรียกร้องให้XGrabKey(display, 0x123, 0, 0x00f00ba5, ...)และอื่น ๆ ที่มีXGrabButton, XGrabPointer, XGrabKeyboard, XGrabServer(ถ้าเป็นไปได้) รูปแบบการแสดงผลไม่เป็นไรสิ่งที่ฉันต้องการคือวิธีที่จะดูว่าใครกำลังคว้าอะไรบ้างและอาจจะมีวิธียกเลิกการจับพวกนี้ (ถ้าเป็นไปได้ฉันไม่แน่ใจว่า X11 API อนุญาตหรือไม่)

คำตอบ:


21

รุ่นล่าสุดของ X (เซิร์ฟเวอร์ X.org ≥1.11) สนับสนุนการแก้จุดบกพร่องหลาย keysyms แนะนำในนี้กระทำการ เมื่อถูกเรียกสิ่งเหล่านี้จะดำเนินการที่เกี่ยวข้องกับการคว้า

โดยค่าเริ่มต้น ( อย่างน้อยในรุ่นล่าสุด ) สิ่งเหล่านี้จะถูกปิดใช้งาน (ไม่อยู่ในคีย์แม็พเริ่มต้น)

อย่างไรก็ตามหากคุณxdotoolติดตั้งเป็นไปได้ที่จะเรียกพวกเขาโดยดำเนินการในบรรทัดคำสั่ง:

xdotool key NameOfKey

ที่NameOfKeyเป็น keysym ที่คุณต้องการเปิดใช้งาน xdotool key XF86LogGrabInfoยกตัวอย่างเช่นการพิมพ์รายชื่อคว้าที่ใช้งานไปยังเซิร์ฟเวอร์เอ็กซ์บันทึกการใช้งาน

keysyms ที่เกี่ยวข้องคือ:

โปรดทราบว่าXF86LogGrabInfoจะแสดงเฉพาะรายการที่ใช้งานอยู่เท่านั้นไม่ใช่แบบที่ไม่โต้ตอบเช่นการหยิบกุญแจที่ไม่ได้กดในปัจจุบัน หากคุณต้องการได้รับข้อมูลเกี่ยวกับการคว้าแบบพาสซีฟคุณต้องเปิดใช้งานการคว้า: เรียกใช้xdotool key XF86LogGrabInfoในขณะที่กดปุ่มคอร์ดหรือปุ่มเมาส์ผสมกันที่คุณสนใจ ทำสิ่งที่ชอบ:

  1. วิ่ง sleep 1; xdotool key XF86LogGrabInfo
  2. ภายใน 1 วินาทีให้กดปุ่มผสมคอร์ดหรือปุ่มเมาส์
  3. หลังจาก 1 วินาทีปล่อยปุ่ม / ปุ่ม
  4. ตรวจสอบข้อมูล“ Active grab …” ในบันทึก X server (บ่อยครั้ง/var/log/Xorg.0.log)

2
การทดสอบบน Debian wheezy ด้วย Xorg 1.12.4 xdotool key XF86LogGrabInfoทริกเกอร์เพียงสองรายการในบันทึก X:“ การพิมพ์อุปกรณ์ที่ใช้งานอยู่ในปัจจุบันทั้งหมด:” ทันทีตามด้วย“ รายการสิ้นสุดของอุปกรณ์ที่ใช้งานคว้า” ถึงกระนั้นผู้จัดการหน้าต่างของฉันก็สามารถหยิบกุญแจได้ คุณเคยเห็นงานนี้สำหรับกุญแจคว้า?
Gilles 'หยุดความชั่วร้าย'

4
@Gilles - ไม่คุณจะไม่ได้รับผลลัพธ์ใด ๆ หากคุณเรียกใช้แบบนั้น ... ลองเรียกใช้ด้วยsleep 2; xdotool key "XF86LogGrabInfo"และกดปุ่มเริ่มทันที (เช่นปุ่ม "Win") อย่างรวดเร็วแล้วคุณจะเห็นผลลัพธ์ใน Xorg.log หรือใช้xdotoolเพื่อกดปุ่ม + XF86LogGrabInfoในเวลาเดียวกันเช่นที่นี่
don_crissti

@don_crissti อ่าเข้าใจแล้วXF86LogGrabInfoพิมพ์ข้อมูลเกี่ยวกับกุญแจที่กดอยู่ในปัจจุบันเท่านั้น? ที่ จำกัด ประโยชน์ของมัน ฉันต้องการเขียนรายการทุกรายการ - ทุกรายการแบบพาสซีฟหากฉันเข้าใจคำศัพท์อย่างถูกต้อง
Gilles 'ดังนั้นหยุดความชั่วร้าย'

อาจมีวิธีที่ชาญฉลาดในการรวมสิ่งนี้เข้ากับการค้นหาคีย์ผสมโดยละเอียดซึ่งหวังว่าจะไม่มีแป้นพิมพ์เสมือนจริง แน่นอนนอกความรู้ของฉัน
Adam Katz

ขอบคุณ! สิ่งนี้ช่วยให้ฉันค้นพบว่าxfsettingsdขโมยทางลัดWin+ ของฉัน L
มิเคล

8

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

  1. บนแพลตฟอร์มทั้งหมด แต่ด้วย Xorg 1.11 และต่อมา (หรือรุ่นเก่ากับแพทช์ที่ใช้) map องเพื่อการถ่ายโอนข้อมูลคว้าบันทึกเป็นอธิบายไว้ในหมายเหตุประกอบแพทช์เหล่านี้
  2. บน Solaris 11 (ทั้ง Solaris 11 ด่วน 2,010.11 หรือที่เกิดขึ้นจริง Solaris 11 ปล่อย), ใช้สคริปต์ดีบักเช่น/usr/demo/Xserver/mdb/list_Xserver_devicegrab_clientที่กล่าวไว้ในข้อมูลคว้าจาก X เซิร์ฟเวอร์ นอกจากนี้ยังมีอีกหนึ่งที่นี่เพื่อคว้าเซิร์ฟเวอร์ซึ่งปุ่มลัด Xorg 1.11 ยังไม่ครอบคลุม

1ดูที่http://tronche.com/gui/x/xlib/input/pointer-grabbing.htmlเพื่อดูคำจำกัดความของการใช้งานกับการจับแบบแฝง


4

นี่คือส่วนเสริมของคำตอบของหอยทากเครื่องกล -

รายการในบันทึก Xorg อาจไม่สามารถถอดรหัสได้ ฉันเขียนโปรแกรมที่วิเคราะห์คำเหล่านั้นและนำเสนอในรูปแบบที่มนุษย์สามารถอ่านได้:

https://gist.github.com/CyberShadow/6412d11aea64144f8905cc0b8196f38e

หากต้องการใช้ให้เรียกใช้ครั้งแรกxdotool key XF86LogGrabInfoตามที่อธิบายไว้ในคำตอบของหอยทากเครื่องกล จากนั้นเรียกใช้โปรแกรมที่ลิงก์ด้านบน หากไฟล์บันทึก Xorg ของคุณไม่ได้อยู่ที่/var/log/Xorg.0.logคุณสามารถระบุตำแหน่งโดยใช้--xorg-logตัวเลือก ดู--helpรายละเอียดที่


1
ส่วนสำคัญที่กล่าวถึงที่นี่เป็นโปรแกรมในภาษา D เพื่อให้ได้ไฟล์ที่ปฏิบัติการหนึ่งสามารถติดตั้งแพคเกจ gdc (GNU D คอมไพเลอร์) และจากนั้นเรียกใช้libx11-dev gdc -o xorg-show-grabs xorg-show-grabs.d -lX11
Stéphane Gourichon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.