เหตุใดคำสั่ง xte เหล่านี้จึงทำงานในเทอร์มินัล แต่ไม่ใช่เมื่อถูกโยงกับ xbindkeys


18

xteคำสั่งนี้เมื่อฉันรันในเทอร์มินัลทริกเกอร์โหมด Expo:

xte 'keydown Super_L' 'key S' 'keyup Super_L'

อย่างไรก็ตามเมื่อฉันใส่มันลงในไฟล์. xbindkeysrc ของฉัน:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
  b:11

ไม่มีอะไรเกิดขึ้นเมื่อฉันคลิกปุ่ม การเชื่อมโยงต่อไปนี้ทำให้ตัวอักษร X ปรากฏในคอนโซลของฉันเมื่อฉันกดปุ่ม 11:

"xte 'key X'"
  b:11

เหตุใด Expo จึงไม่ทำงาน


นี่คือเอาท์พุท verbose xbindkeys -n -vเมื่อคลิกปุ่ม 11:

กดปุ่ม!
e.xbutton.button = 11
e.xbutton.state = 16
"xte 'keydown Super_L' 'key W' 'keyup Super_L'"
    m: 0x0 + b: 11 (เมาส์)
มีหน้าจอ 0 สำหรับหน้าต่าง 2bb
เริ่มโปรแกรมด้วยการเรียก fork + exec
ปล่อยปุ่ม!
e.xbutton.button = 11
e.xbutton.state = 16

และไม่มีอะไรเกิดขึ้น สิ่งนี้เกี่ยวข้องกับวิธีxbindkeysดำเนินการคำสั่งหรือไม่? (การโทรด้วยส้อม + exec)


ลองหมายเลขสอง

expo.sh:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'

การเรียกใช้สคริปต์นี้จากบรรทัดคำสั่งจะเป็นการเปิดใช้งาน Expo ผูกมันใน xbindkeys:

"sh ~/expo.sh"
  b:11

คลิกที่ปุ่มเมาส์ 11:

กดปุ่ม!
e.xbutton.button = 11
e.xbutton.state = 16
"sh ~ / expo.sh"
    m: 0x0 + b: 11 (เมาส์)
มีหน้าจอ 0 สำหรับหน้าต่าง 2bb
เริ่มโปรแกรมด้วยการเรียก fork + exec

ไม่มีอะไรเกิดขึ้น!


1
คุณพยายามกด <Super> <S> หรือไม่ ฉันรู้ว่า xbindkeys + xte สามารถเลือกได้บางครั้ง
เซ ธ

@ เซท: ถูกต้อง มีวิธีใดบ้างที่จะหลีกเลี่ยงความพิถีพิถัน?
Hubro

1
ลอง'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'ดู
เซ ธ

@Seth: ทำไม่แตกต่างฉันกลัว :(
Hubro

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

คำตอบ:


17

อีกวิธีที่ง่ายกว่า: แทนที่จะใช้เพียง "b: 11" ในคำจำกัดความของ xbindkeys ให้ใช้ "b: 11 + release" มันจะรอจนกว่าคุณจะปล่อยปุ่มเพื่อเริ่มต้นคำสั่ง

ตัวอย่าง:

"sh ~/expo.sh"
  b:11 + release

2
Hubro ควรจะกลับมาที่นี่และทำเครื่องหมายนี้เป็นคำตอบที่ถูกต้อง ...
เดวิด Ljung เมดิสันดาวฤกษ์

7

นี่มันแปลกมาก ปรากฎว่าถ้าปุ่มเมาส์ของฉันยังคงกด (ยังไม่ออก) เมื่อการSuper+Wกดแป้นถูกจำลองจะไม่มีอะไรเกิดขึ้น ฉันไม่รู้ว่าใครควรตำหนิเรื่องนั้น (บางทีชินนามอน?) ฉันได้แก้ไขมันโดยเพิ่มความล่าช้าสั้น ๆ ในxteคำสั่ง:

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

ตอนนี้ก็รอ 0.1 Super+Sวินาทีก่อนที่จะเลียนแบบ หากฉันกดปุ่มเมาส์ค้างไว้นานกว่า 0.1 วินาทีจะไม่มีอะไรเกิดขึ้น

นี่คือคำตอบวิธีแก้ปัญหา ฉันชอบคำตอบที่เหมาะสม


Hubro โปรดดูคำตอบที่ได้รับคะแนนสูงกว่าโดย user215129 และทำเครื่องหมายว่าถูกต้อง
David Ljung Madison Stellar

1
@DavidLjungMadison ไม่มันไม่ใช่คำตอบสำหรับคำถามของฉัน แต่เป็นคำแนะนำสำหรับการแก้ไข
Hubro

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

1
ถ้าอย่างนั้นคุณก็ยังไม่เข้าใจ ปัญหาคือการที่คุณกำลังพยายามที่จะพิมพ์แป้นขณะที่กดปุ่มลงและสิ่งที่เปิดตัวเอ็กซ์โปที่กำลังมองหา Super-S, ไม่ Btn-2 + Super-S การแก้ไขของคุณเป็นวิธีแก้ปัญหาเพราะไม่สามารถแก้ปัญหาได้โดยการรับประกันว่าปุ่มทำงานและไม่ทำงานในหลาย ๆ สถานการณ์ การแก้ปัญหาคือ (เช่นในกรณีที่เกี่ยวข้องกับเหตุการณ์ของเมาส์) เพื่อรอการปล่อยปุ่มก่อนที่จะเรียกคำสั่งใด ๆ สิ่งนี้ทำให้มั่นใจได้ว่าปุ่มไม่ได้ผสมกับการกดแป้นพิมพ์
David Ljung Madison Stellar

2
สามารถยืนยันได้ว่า user215129 คำตอบนั้นไม่ถูกต้องและไม่ตอบคำถาม การตรวจสอบปัญหาของฉันเองในตอนนี้และในกรณีของฉันการเปลี่ยนเป็นรีลีสหรือล่าช้าไม่ใช่ตัวเลือกเนื่องจากฉันต้องการให้มันดำเนินการในขณะที่กดปุ่ม โปรดดู: askubuntu.com/questions/984054/…
Ethuil UI

2

ฉันประสบปัญหาเดียวกัน

"xte 'key b'"

ทำงานในคอนโซล แต่ไม่ได้อยู่ในไฟล์พารามิเตอร์ xbindkeys ฉันเปลี่ยน b ด้วยรหัส keysym ของเขาโดยใช้คำสั่ง "xev" เพื่อรับมัน:

"xte 'key Ox62'"

มันใช้งานได้สำหรับฉัน



1

มีปัญหาที่คล้ายกันในขณะที่ใช้ sxhkcd keymapper ปรากฎว่ามีการตรวจพบปุ่มลัดที่แท้จริงของคุณในขณะที่ยังกดอยู่

มีวิธีแก้ปัญหาบางอย่าง:

  • มองหากิจกรรมที่วางจำหน่าย
  • เพิ่มsleep 0.2ต่อหน้าคำสั่งของคุณ
  • ใช้ทางลัดพร้อมปุ่มนำ
  • ปล่อยตัวดัดแปลงทางลัดหน้าลำดับ xte ของคุณ

อย่างไรก็ตามคุณไม่สามารถรับการกระทำแบบเรียลไทม์ด้วย =)

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