อะนาล็อกใหม่ของ Punto Switcher สำหรับ linux: xswitcher

การสิ้นสุดการสนับสนุน xneur ทำให้ฉันต้องทนทุกข์ทรมานในช่วงหกเดือนที่ผ่านมา (ด้วยการถือกำเนิดของ OpenSUSE 15.1 บนเดสก์ท็อปของฉัน: เมื่อเปิดใช้งาน xneur หน้าต่างจะสูญเสียโฟกัสและกะพริบตามเวลาที่ป้อนข้อมูลด้วยแป้นพิมพ์).

“โอ้ ให้ตายเถอะ ฉันเริ่มพิมพ์ผิดเลย์เอาต์อีกแล้ว” - ในงานของฉันสิ่งนี้เกิดขึ้นอย่างไม่เหมาะสมบ่อยครั้ง และมันไม่ได้เพิ่มอะไรเชิงบวกเลย

อะนาล็อกใหม่ของ Punto Switcher สำหรับ linux: xswitcher
ในขณะเดียวกัน ฉัน (ในฐานะวิศวกรออกแบบ) ก็สามารถกำหนดสิ่งที่ฉันต้องการได้อย่างชัดเจน แต่ฉันต้องการ (ก่อนอื่นจาก Punto Switcher จากนั้นต้องขอบคุณ Windows Vista ในที่สุดก็เปลี่ยนมาใช้ Linux จาก xneur) สิ่งเดียวเท่านั้น เมื่อตระหนักว่าขยะบนหน้าจออยู่ในรูปแบบที่ไม่ถูกต้อง (ซึ่งมักจะเกิดขึ้นเมื่อสิ้นสุดการพิมพ์คำใหม่) ให้กระทืบ "หยุดชั่วคราว/หยุด" และรับสิ่งที่คุณพิมพ์

ในขณะนี้ ผลิตภัณฑ์มีอัตราส่วนฟังก์ชันการทำงาน/ความซับซ้อนที่เหมาะสมที่สุด (จากมุมมองของฉัน) ถึงเวลาที่จะแบ่งปัน

ทล.ดร

จะมีรายละเอียดทางเทคนิคทุกประเภทในภายหลัง ดังนั้นก่อนอื่น - ลิงค์ "เพื่อสัมผัส" สำหรับผู้ที่ใจร้อน

ขณะนี้พฤติกรรมต่อไปนี้เป็นแบบฮาร์ดโค้ด:

  • “หยุดชั่วคราว/หยุด”: ถอยกลับคำสุดท้าย สลับเค้าโครงในหน้าต่างที่ใช้งานอยู่ (ระหว่าง 0 ถึง 1) แล้วหมุนอีกครั้ง
  • “ปล่อย Ctrl โดยไม่มีสิ่งใดเลย”: สลับเค้าโครงในหน้าต่างที่ใช้งานอยู่ (ระหว่าง 0 ถึง 1)
  • “Left Shift โดยไม่มีสิ่งใดเลย”: เปิดเค้าโครงหมายเลข 0 ในหน้าต่างที่ใช้งานอยู่
  • “ Right Shift โดยไม่มีสิ่งใดเลย”: เปิดเค้าโครงหมายเลข 1 ในหน้าต่างที่ใช้งานอยู่

จากนี้ไปฉันวางแผนที่จะปรับแต่งพฤติกรรม หากไม่มีคำติชม ก็ไม่น่าสนใจ (ฉันก็สบายดี) ฉันเชื่อว่าผู้ชมที่มีปัญหาคล้ายกันในHabréจะมีเปอร์เซ็นต์เพียงพอ

NB เพราะ ในเวอร์ชันปัจจุบัน คีย์ล็อกเกอร์จะแนบไปกับ "/dev/input/" โดยจะต้องเปิดใช้งาน xswitcher ด้วยสิทธิ์รูท:

chown root:root xswitcher
chmod +xs xswitcher

โปรดทราบ: เจ้าของไฟล์ที่มี suid จะต้องเป็น root เพราะ ใครก็ตามที่เป็นเจ้าของจะถูกฟ้องร้องเมื่อเริ่มต้น

Paranoids (ฉันไม่มีข้อยกเว้น) สามารถโคลนนิ่งได้ GIT และประกอบถึงที่ เช่นนั้น:

go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"

### X11 headers for OpenSUSE/deb-based
zypper install libX11-devel libXmu-devel
apt-get install libx11-dev libxmu-dev

cd "x switcher/src/"
go build -o xswitcher -ldflags "-s -w" --tags static_all src/*.go

เพิ่มเริ่มอัตโนมัติเพื่อลิ้มรส (ขึ้นอยู่กับ DE)

ใช้งานได้ “ไม่ต้องกินโจ๊ก” (CPU 30 วินาทีต่อวัน, 12 MB ใน RSS)

รายละเอียด

ตอนนี้ - รายละเอียด

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

รหัส xswitcher เขียนด้วยภาษา golang โดยมีการรวม C น้อยที่สุด สันนิษฐานว่าแนวทางนี้จะส่งผลให้เกิดความพยายามน้อยที่สุด (จนถึงตอนนี้ก็มี) ในขณะที่ยังคงรักษาความสามารถในการเชื่อมต่อสิ่งที่ขาดหายไปโดยใช้ cgo

ข้อความนี้มีความคิดเห็นว่ายืมมาจากไหนและเพราะเหตุใด เพราะ รหัส xneur “ไม่ได้สร้างแรงบันดาลใจให้ฉัน” ฉันถือเป็นจุดเริ่มต้น โลโลสวิตช์เกอร์.

การใช้ "/dev/input/" มีทั้งข้อดี (มองเห็นทุกสิ่งได้ รวมถึงปุ่มทำซ้ำอัตโนมัติที่กดไว้) และข้อเสีย ข้อเสียคือ:

  • การทำซ้ำอัตโนมัติ (เหตุการณ์ที่มีรหัส “2”) ไม่มีความสัมพันธ์กับการทำซ้ำด้วย x
  • มองไม่เห็นอินพุตผ่านอินเทอร์เฟซ X11 (นี่คือวิธีการทำงานของ VNC เป็นต้น)
  • ต้องการราก

ในทางกลับกัน คุณสามารถสมัครรับกิจกรรม X ผ่านทาง "XSelectExtensionEvent()" ได้ คุณสามารถมองที่ รหัสอินพุต. ฉันไม่พบอะไรแบบนี้เลย และการใช้งานคร่าวๆ ก็ใช้โค้ด C หลายร้อยบรรทัดในทันที เอาไว้ก่อนแล้วกัน

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

ข้อบกพร่องที่รู้จัก

  • เราไม่รู้อะไรเกี่ยวกับอินพุต "คอมโพสิต" (ตัวอย่าง: ½) มันไม่จำเป็นในตอนนี้
  • เรากำลังเล่นวินที่ถูกต้องไม่ถูกต้อง ในกรณีของฉัน มันทำลายการเน้นย้ำ
  • ไม่มีการแยกวิเคราะห์อินพุตที่ชัดเจน แต่มีฟังก์ชันหลายอย่างแทน: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence() ขอบคุณ nsmcan สำหรับการดูแลของคุณ: แก้ไขในโค้ดและที่นี่ ด้วยความน่าจะเป็นที่แน่นอนคุณสามารถพบข้อบกพร่องเมื่อทำการเปลี่ยน
    ณ จุดนี้ฉันไม่รู้ "วิธีการ" และยินดีรับข้อเสนอแนะใดๆ
  • (โอ้พระเจ้า) การใช้ช่องทางการแข่งขัน (keyboardEvents, MiceEvents)

ข้อสรุป

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

โชคดี!

ที่มา: will.com

เพิ่มความคิดเห็น