xbindkeys auf einer Tastatur?

xbindkeys auf einer Tastatur?

Ich habe das aktuelle Setup:

  • Eine PS2-Tastatur
  • Eine USB-Tastatur

Dann benutze ich dies:

xinput --create-master SecondKeyboard

xinput --reattach "Keyboard Id" "Master Id"

um sie zu trennen.

Ich dachte, ich könnte einfach ein benutzerdefiniertes Layout erstellen und voilà, eine Tastatur zum Schreiben und eine andere für Tastenkombinationen. Dann stellte ich fest, dass xkb es nicht zulässt, Layouts zu erstellen, bei denen mehrere Tasten gedrückt werden (d. h. wenn man drückt capslockund es ctrl+ alt+ ausführt f4).

Mein Gedanke war also, xbindkeys nur auf einer der Tastaturen laufen zu lassen, da sie unterschiedliche IDs haben. Kann ich das realisieren?

Antwort1

Kurze Zusammenfassung der verschiedenen beteiligten Ebenen:

Ihre Tastatur generiert Scancodes. Diese werden von den Eingabeebenen des Kernels auf Tastencodeereignisse abgebildet /dev/input/eventX. Der X- evdevTreiber nimmt diese Ereignisse entgegen und übersetzt sie in Keysyms. Dann macht die XInput-Erweiterung alle Ereignisse von Slaves der virtuellen Kerntastatur als normale X-Ereignisse verfügbar, während die anderen Ereignisse nur als XInput-Ereignisse verfügbar sind.

Sie haben also folgende Möglichkeiten:

1) Richten Sie eine benutzerdefinierte Zuordnung von Scancode zu Keycode ein. Diese Zuordnungen erfolgen pro Gerät, daher ist dies tatsächlich möglich, aber dies erfolgt über ein IOCTL, und es scheint keine vorgefertigten Tools dafür zu geben, außer demhwdbin udev. Anschließend können Sie die neuen Tastenkombinationen in verwenden xkb. Beide Tastaturen bleiben als Kerntastaturen erhalten.

2) Erweitern Sie es xbindkeys, um XInput-Ereignisse zu verstehen, sodass Sie es verwenden können, um Ereignisse von einer Nicht-Kerntastatur zu binden. Dies erfordert Programmierung, sollte aber vergleichsweise unkompliziert sein. Entkoppeln Sie in diesem Fall eine Tastatur von der Kerntastatur, wie Sie es bereits getan haben.

verwandte Informationen