Xbindkeys funktionieren nicht richtig

8

Ich habe ein kleines Problem. Ich wollte einige Hotkeys neu zuordnen, die ich von meinem vorherigen System gewohnt bin, aber ich kann es nicht richtig zum Laufen bringen xbindkeys.

xbindkeys erkennt die Kombination, aber irgendwie wird der Befehl nicht ausgelöst.

Wenn ich den Befehl benutze

xdotool key braceleft

Es gibt mir das richtige {Zeichen in der Konsole aus. Wenn ich jedoch denselben Befehl in xbindkeys verwende, passiert nichts. Wenn ich den Befehl durch firefoxihn ersetze , funktioniert er ordnungsgemäß und öffnet Firefox, also denke ich, xbindkeysfunktioniert.

Ich möchte Folgendes erreichen:

Ich möchte das Zeichen {mit Alt_R+ 7oder Alt_Left+ Ctrl+ in das aktive Fenster eingeben, 7damit ich beide verwenden kann. Ich weiß, dass Alt_R(AltGr) der richtige Weg ist, aber auf deutschen Tastaturen ist es irgendwie schwierig, das Braceleft mit der AltGr(Alt_R) -Taste einzugeben, sodass ich stattdessen Alt_L+ Control+ 7verwenden muss (wie ich es in meinem vorherigen System gewohnt war). Ich habe es irgendwie in 12.04 zum Laufen gebracht, aber ich kann es in 14.04 nicht zum Laufen bringen.

Irgendwelche Vorschläge? Ich habe mehrere Befehle ausprobiert. Alle von ihnen arbeiteten in der Konsole, aber keiner von ihnen funktionierte, wenn sie von xbindkeys ausgeführt wurden

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

Dies ist meine Konfiguration, die nicht funktioniert

"xdotool key braceleft"
Control+Alt + 7

Dies funktioniert jedoch:

"firefox"
Control+Alt + 7

Lösungsbearbeitung

Als ich einige andere Dinge ausprobierte, bemerkte ich, dass xdotool zu früh auszulösen scheint. Ich habe die Konfiguration folgendermaßen geändert:

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

JETZT sendet es das richtige {Zeichen an das aktive Fenster. Jetzt müssen Sie nur noch den Schlaf und die Verzögerung auf einen brauchbaren Wert reduzieren, da 1 Sekunde etwas zu lang erscheint :)

** Zusatzinfo ** Nun habe ich es geschafft, geeignete Werte zu finden. Dies funktioniert jedoch nur, wenn Sie die Tasten loslassen, bis die Schlafdauer abgelaufen ist. Wenn Sie zu langsam sind, funktioniert es nicht.

Dies ist meine aktuelle Konfiguration für alle unbequemen deutschen AltGr-Zeichen

"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

Wenn Sie jedoch (zum Beispiel) mehrere @ -Zeichen eingeben möchten, müssen Sie Strg + Alt + Q wie vorgesehen drücken, aber alle Tasten loslassen und dann erneut drücken. Dies ist jedoch viel, viel besser, als nicht die Option Strg + Alt anstelle von AltGr zu haben, aber es ist nicht so effektiv, wie ich es auch verwendet habe. Vielleicht finde ich auch dafür eine Lösung.

Ello
quelle
Huh, das ist ein guter Fund! Es gibt kein Wiederholungslimit für die Beantwortung Ihrer eigenen Frage, nur ein Zeitlimit . Es wäre großartig, wenn Sie in 6 Stunden zurückkommen und dies als Antwort posten könnten. Das gibt Ihnen auch einen Repräsentanten, wenn Sie sich darum kümmern. Wenn es Sie wirklich nicht interessiert, werde ich Ihre Lösung in ein paar Tagen in meine Antwort aufnehmen.
Terdon
Haben Sie jemals herausgefunden, wie Sie xdotooldie Taste bei gedrückter Taste wiederholen können?
Farzher
Um ehrlich zu sein, habe ich es bis jetzt nicht versucht. Ich habe League of Legends erfolgreich dazu gebracht, mit 60 fps reibungslos zu laufen (in 12.04 würde es überhaupt nicht starten), so dass ich, wenn ich zu Hause bin, die ganze Zeit gespielt habe.
Ello
Ich habe tagelang keine Abkürzungen zum Laufen gebracht. Die Lösung war einfach: Mein Ubuntu-Desktop erhielt die Verknüpfungen vor xbindkeys. Bearbeiten Sie einfach die Kayboard-Einstellungen und fügen Sie eine neue benutzerdefinierte Verknüpfung mit Aktion hinzuxdotool getactivewindow key Home
BurninLeo
Sieht so aus, als würden Sie versuchen, ein deutsches Tastaturlayout zu simulieren. Warum ändern Sie nicht einfach Ihr Tastaturlayout in den Systemeinstellungen?
Rapti

Antworten:

4

Das Problem dabei xdotoolist, dass Xorg beim Drücken der realen Tasten wiederholt Tastendruckereignisse sendet (siehe xevAusgabe). Um dies zu überwinden, müssen Sie die Wiederholungsfunktion vorübergehend deaktivieren und dann ein KeyRelease-Ereignis für einen Schlüssel generieren, der nicht verfügbar war.

Anstatt

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

Versuche Folgendes:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7
midenok
quelle
Vielen Dank für Ihre Antwort, aber ich verwende Manjaro jetzt mit XFCE und da hat es sofort funktioniert, sodass kein Schlaf erforderlich ist.
Ello
@Ello, diese Antworten sind nicht nur für Sie, daher wird die universellste Lösung geschätzt.
Midenok
3

Als ich einige andere Dinge ausprobierte, bemerkte ich, dass xdotool zu früh auszulösen scheint. Ich habe die Konfiguration folgendermaßen geändert:

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

JETZT sendet es das richtige {Zeichen an das aktive Fenster. Jetzt müssen Sie nur noch den Schlaf und die Verzögerung auf einen brauchbaren Wert reduzieren, da 1 Sekunde etwas zu lang erscheint :)

** Zusatzinfo ** Nun habe ich es geschafft, geeignete Werte zu finden. Dies funktioniert jedoch nur, wenn Sie die Tasten loslassen, bis die Schlafdauer abgelaufen ist. Wenn Sie zu langsam sind, funktioniert es nicht.

Dies ist meine aktuelle Konfiguration für alle unbequemen deutschen AltGr-Zeichen

"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

Wenn Sie jedoch (zum Beispiel) mehrere @ -Zeichen eingeben möchten, müssen Sie Strg + Alt + Q wie vorgesehen drücken, aber alle Tasten loslassen und dann erneut drücken. Dies ist jedoch viel, viel besser, als nicht die Option Strg + Alt anstelle von AltGr zu haben, aber es ist nicht so effektiv, wie ich es auch verwendet habe. Vielleicht finde ich auch dafür eine Lösung.

Ello
quelle
Das ist sehr seltsam, ich bin froh, dass du es herausgefunden hast, aber ich kann wirklich nicht herausfinden, warum es passiert. Wie auch immer, danke, dass Sie sich die Zeit genommen haben, dies zu posten, es könnte der nächsten Person mit dem gleichen Problem helfen.
Terdon
Stattdessen sleepdenke ich, dass Sie + releasezu den Schlüsselkombinationen hinzufügen möchten . Das sagt xbindkeys, dass Sie warten müssen, bis die Taste losgelassen wird, bevor Sie den Befehl auslösen.
Wjandrea
2

Vor kurzem hatte ich dieses Problem, wo ich versuchte , die Medien Play / Pause (XF86AudioPlay) Taste Strg + G. Nach einigen Recherchen zu simulieren, schien es nicht nur ich brauche die auszulöschen Kontrolle , aber auch die g - Taste (die was brauchte die sleep 0.1Verzögerung zu Beginn). Wenn ich beide Schlüssel mit keyupxdotool sowie mit dem Schalter --clearmodifiers aufhebe, funktioniert dies. Dies ist mein neuer Befehl in meiner .xbindkeys.rc-Datei:

"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g
QuickishFM
quelle
1

xbindkeysIch bin mir nicht sicher, warum es nicht funktioniert . Ich vermute, Sie müssen das Fenster angeben, in das geschrieben werden soll. Als Problemumgehung können Sie xvkbdstattdessen verwenden.

  1. Installieren xvkbd

    sudo apt-get install xvkbd
    
  2. Fügen Sie dies Ihrer .xbindkeysrcDatei hinzu

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

Das sollte funktionieren.


ANMERKUNGEN

Aus irgendeinem Grund wird auf meinem Computer xvkbdeines meiner sekundären Layouts (Spanisch) anstelle meines Hauptlayouts (US-Englisch) verwendet, und dies führt {dazu, dass tatsächlich gedruckt wird ". Wenn Sie auch dieses Problem haben, spielen Sie einfach ein wenig herum, um herauszufinden, welche Taste {dem verwendeten Layout entspricht. Alternativ können Sie tiefer graben und herausfinden, woher xvkbddie localeEinstellungen stammen.

Terdon
quelle
funktioniert immer noch nicht. auch mit richtigen Charakteren. Wenn ich xvkbd -text 'apple' in die Konsole schreibe, druckt es apple. Wenn ich es über xbindkeys ausführe, passiert nichts. Wenn ich mir xbindkeys -v ansehe, sehe ich, dass es den gedrückten Befehl erkannt hat
Ello
Ich habe es zum Laufen gebracht, aber mit etwas anderem
Ello
@Ello toll! Was hast du benutzt? Es hat gut funktioniert für mich. Könnten Sie eine Antwort auf Ihre Lösung posten und diese akzeptieren?
Terdon
Ich habe meinen Beitrag geändert, ich kann meine eigenen Fragen nicht beantworten, weil ich keinen guten Ruf habe. Entschuldigung
Ello