Xbindkeys ทำงานไม่ถูกต้อง


10

ฉันมีปัญหานิดหน่อย ผมอยากที่จะทำการแมปองบางอย่างที่ฉันกำลังที่ใช้ในการออกจากระบบก่อนหน้าของฉัน xbindkeysแต่ฉันไม่สามารถได้รับมันในการทำงานอย่างถูกต้องกับ

xbindkeys รับรู้การรวมกัน แต่อย่างใดคำสั่งไม่ได้เรียก

ถ้าฉันใช้คำสั่ง

xdotool key braceleft

มันส่งสัญญาณที่ถูกต้อง{ในคอนโซลให้ฉัน อย่างไรก็ตามถ้าฉันใช้คำสั่งเดียวกันใน xbindkeys ไม่มีอะไรเกิดขึ้น หากฉันเปลี่ยนคำสั่งด้วยการfirefoxทำงานอย่างถูกต้องและเปิด firefox ดังนั้นฉันเดาว่าใช้xbindkeysงานได้

ฉันต้องการบรรลุสิ่งต่อไปนี้:

ฉันต้องการพิมพ์อักขระ{ไปยังหน้าต่างที่ใช้งานอยู่ด้วย Alt_R+ 7หรือAlt_Left+ Ctrl+ 7ดังนั้นฉันจึงสามารถใช้ทั้งสองได้ ฉันรู้ว่าAlt_R(AltGr) เป็นวิธีที่เหมาะสม แต่สำหรับแป้นพิมพ์ภาษาเยอรมันมันยากที่จะพิมพ์ braceleft ด้วยปุ่มAltGr(Alt_R) ดังนั้นฉันจึงต้องใช้Alt_L+ Control+ 7แทน (เหมือนกับที่ฉันคุ้นเคยกับระบบก่อนหน้านี้) ฉันทำให้มันทำงานอย่างถูกต้องใน 12.04 แต่ฉันไม่สามารถทำงานได้ใน 14.04

ข้อเสนอแนะใด ๆ ฉันลองหลายคำสั่ง พวกเขาทั้งหมดทำงานในคอนโซล แต่ไม่ทำงานเมื่อดำเนินการโดย xbindkeys

xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'

นี่คือการกำหนดค่าของฉันซึ่งจะไม่ทำงาน

"xdotool key braceleft"
Control+Alt + 7

อย่างไรก็ตามการทำงานนี้:

"firefox"
Control+Alt + 7

โซลูชันแก้ไข

ในขณะที่ฉันลองอีกหลายสิ่งฉันสังเกตว่า xdotool ดูเหมือนจะเริ่มเร็วเกินไป ฉันเปลี่ยนการตั้งค่าเช่นนี้:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

ตอนนี้มันจะส่ง {ลงชื่อที่ถูกต้องไปยังหน้าต่างที่ใช้งานอยู่ ตอนนี้สิ่งเดียวที่เหลืออยู่คือการลดการนอนหลับและการหน่วงเวลาเป็นค่าที่ใช้งานได้เพราะ 1 วินาทีดูเหมือนจะนานเกินไป :)

** ข้อมูลเพิ่มเติม ** ตอนนี้ฉันจัดการเพื่อหาค่าที่เหมาะสม อย่างไรก็ตามจะใช้งานได้เฉพาะในกรณีที่คุณปล่อยปุ่มจนกว่าระยะเวลาสลีปจะสิ้นสุด หากคุณช้าเกินไปหากไม่ได้ผล

นี่คือการกำหนดค่าปัจจุบันของฉันสำหรับอักขระ AltGr เยอรมันที่ไม่สะดวกทั้งหมด

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

อย่างไรก็ตามหากคุณต้องการพิมพ์เครื่องหมาย @ หลายรายการ (ตัวอย่าง) คุณต้องกด Ctrl + Alt + Q ตามที่ต้องการ แต่ปล่อยปุ่มทั้งหมดแล้วกดอีกครั้ง อย่างไรก็ตามเรื่องนี้ดีกว่าไม่มีตัวเลือก Control + Alt แทน AltGr แต่มันก็ไม่ได้มีประสิทธิภาพเท่าที่ผมเคยใช้ บางทีฉันอาจจะหาทางแก้ปัญหานี้ด้วย


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

คุณเคยคิดวิธีxdotoolการทำซ้ำกุญแจในขณะที่กดค้างไว้?
Farzher

พูดตามตรงฉันไม่ได้ลองตอนนี้ ฉันได้รับ League of Legends สำเร็จอย่างราบรื่นด้วย 60fps (ใน 12.04 มันจะไม่เริ่มเลย) ดังนั้นเมื่อฉันอยู่ที่บ้านฉันเล่นตลอดเวลา
Ello

ฉันไม่ได้รับช็อตคัตที่ใช้งานได้นานหลายวัน วิธีแก้ปัญหานั้นง่าย: เดสก์ท็อป Ubuntu ของฉันมีทางลัดก่อน xbindkeys เพียงแก้ไขการตั้งค่า kayboard เพิ่มทางลัดที่กำหนดเองใหม่พร้อมการดำเนินการxdotool getactivewindow key Home
BurninLeo

ดูเหมือนว่าคุณกำลังพยายามจำลองเค้าโครงแป้นพิมพ์ภาษาเยอรมัน ทำไมคุณไม่เปลี่ยนรูปแบบแป้นพิมพ์ในการตั้งค่าระบบ?
Rapti

คำตอบ:


4

ปัญหาxdotoolคือในขณะที่กดปุ่มจริง Xorg ซ้ำ ๆ ส่งกิจกรรม keypress (ดูxevผลลัพธ์) เพื่อเอาชนะสิ่งนี้คุณต้องปิดคุณสมบัติการทำซ้ำชั่วคราวจากนั้นสร้างเหตุการณ์ KeyRelease ในคีย์ที่หยุดทำงาน

แทน

"sleep 0.2 && xdotool type --delay 15 '{'"
  Control+Alt + 7

ลองต่อไปนี้:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7

ขอบคุณสำหรับการตอบกลับของคุณ แต่ฉันใช้ Manjaro กับ XFCE ในตอนนี้และที่นั่นทำงานนอกกรอบจึงไม่จำเป็นต้องนอนหลับ
Ello

@Ello คำตอบเหล่านี้ไม่เพียง แต่สำหรับคุณเท่านั้นดังนั้นทางออกที่เป็นสากลที่สุดก็คือความนิยม
midenok

3

ในขณะที่ฉันลองอีกหลายสิ่งฉันสังเกตว่า xdotool ดูเหมือนจะเริ่มเร็วเกินไป ฉันเปลี่ยนการตั้งค่าเช่นนี้:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

ตอนนี้มันจะส่ง {ลงชื่อที่ถูกต้องไปยังหน้าต่างที่ใช้งานอยู่ ตอนนี้สิ่งเดียวที่เหลืออยู่คือการลดการนอนหลับและการหน่วงเวลาเป็นค่าที่ใช้งานได้เพราะ 1 วินาทีดูเหมือนจะนานเกินไป :)

** ข้อมูลเพิ่มเติม ** ตอนนี้ฉันจัดการเพื่อหาค่าที่เหมาะสม อย่างไรก็ตามจะใช้งานได้เฉพาะในกรณีที่คุณปล่อยปุ่มจนกว่าระยะเวลาสลีปจะสิ้นสุด หากคุณช้าเกินไปหากไม่ได้ผล

นี่คือการกำหนดค่าปัจจุบันของฉันสำหรับอักขระ AltGr เยอรมันที่ไม่สะดวกทั้งหมด

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

อย่างไรก็ตามหากคุณต้องการพิมพ์เครื่องหมาย @ หลายรายการ (ตัวอย่าง) คุณต้องกด Ctrl + Alt + Q ตามที่ต้องการ แต่ปล่อยปุ่มทั้งหมดแล้วกดอีกครั้ง อย่างไรก็ตามเรื่องนี้ดีกว่าไม่มีตัวเลือก Control + Alt แทน AltGr แต่มันก็ไม่ได้มีประสิทธิภาพเท่าที่ผมเคยใช้ บางทีฉันอาจจะหาทางแก้ปัญหานี้ด้วย


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

แทนที่จะsleepคิดว่าคุณต้องการที่จะเพิ่ม+ releaseเข้าไปในคอมโบหลัก ที่จะบอกxbindkeysให้รอจนกว่าจะปล่อยกุญแจก่อนที่จะเรียกคำสั่ง
wjandrea

3

ในฐานะที่เป็นเอกสารในคำถามที่คล้ายกัน ( ทำไมคำสั่ง Xte เหล่านี้ทำงานใน terminal แต่ไม่เมื่อผูกพันกับ xbindkeys ) คุณสามารถถามxbindkeysกับเหตุการณ์ไกปล่อย (ขึ้นกุญแจ):

"xdotool key braceleft"
   Release+Control+Alt + 7

ด้วยวิธีนี้ไม่มีข้อขัดแย้งระหว่างปุ่มที่ใช้สำหรับทางลัดและปุ่มที่ส่ง


2

ฉันเพิ่งมีปัญหานี้ที่ผมพยายามที่จะจำลองสื่อเล่น / หยุดชั่วคราว (XF86AudioPlay) กุญแจสำคัญในการใช้ Ctrl + กรัมหลังจากการวิจัยบางอย่างก็ปรากฏไม่เพียง แต่ฉันจะต้องยกเลิกการออกควบคุมแต่ยังกรัมสำคัญ (ซึ่งเป็น สิ่งที่ต้องการsleep 0.1ความล่าช้าในการเริ่มต้นด้วย) ถ้าฉันยกเลิกคีย์เหล่านี้ทั้งสองโดยใช้keyupภายใน xdotool เช่นเดียวกับ --clearmodifiers switch มันทำงานได้ นี่คือคำสั่งใหม่ของฉันในไฟล์. xbindkeys.rc ของฉัน:

"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g

1

ไม่แน่ใจว่าทำไมมันไม่ทำงานด้วยxbindkeysฉันเดาว่าคุณต้องระบุหน้าต่างที่จะเขียน คุณสามารถใช้xvkbdแทนได้

  1. ติดตั้ง xvkbd

    sudo apt-get install xvkbd
    
  2. เพิ่มลงใน.xbindkeysrcไฟล์ของคุณ

    "xvkbd -text '{'"
    Control+Alt + 7
    

ว่าควรจะทำงาน


หมายเหตุ

ด้วยเหตุผลบางอย่างในเครื่องของฉันxvkbdคือการใช้หนึ่งในรูปแบบทุติยภูมิของฉัน (สเปน) แทนหนึ่งหลักของฉัน (สหรัฐอเมริกาอังกฤษ) และสาเหตุนี้จะพิมพ์จริง{ "หากคุณมีปัญหานี้เพียงแค่ลองเล่นดูเพื่อหาว่าคีย์ใดสอดคล้อง{กับการใช้เลย์เอาต์ อีกทางหนึ่งคุณสามารถขุดลึกลงไปและหาว่าxvkbdได้รับการlocaleตั้งค่าจากที่ไหน


ยังไม่ทำงาน แม้จะมีตัวละครที่เหมาะสม ถ้าฉันเขียน xvkbd-text 'apple' ในคอนโซลมันพิมพ์ apple ถ้าฉันรันมันผ่าน xbindkeys ไม่มีอะไรเกิดขึ้น ถ้าฉันดู xbindkeys -v จะเห็นว่ามันจำคำสั่งที่กดไว้ได้แล้ว
Ello

ฉันได้ไปทำงาน แต่มีอย่างอื่น
Ello

@ ยอดเยี่ยมมาก! คุณใช้อะไร มันทำงานได้ดีสำหรับฉัน คุณสามารถโพสต์คำตอบเพื่ออธิบายวิธีการแก้ปัญหาของคุณ
terdon

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