Ein askubuntu-Beitrag enthält eine Antwort, die ich unten zusammenfassen werde.
Das Problem ist, dass xbindkeys die gesamte Maus erfasst, wodurch die Zuordnung von Modifizierern + Mausklicks unsicher wird. Die Antwort verwendet uinput über ein Python-uinput- Skript, um /dev/my-mouse
das Klicken mit der Daumen-Taste zu überwachen und die CtrlTaste an die virtuelle Tastatur zu senden . Hier sind die detaillierten Schritte:
1. Stellen Sie udev-Regeln ein
Für die Maus datei /etc/udev/rules.d/93-mxmouse.conf.rules
:
KERNEL=="event[0-9]*", SUBSYSTEM=="input", SUBSYSTEMS=="input", ATTRS=="Logitech Performance MX", SYMLINK+="my_mx_mouse", GROUP="mxgrabber", MODE="640"
Udev sucht nach Kernelgeräten mit Namen wie event5. Das SYMLINK dient zum Auffinden der Maus und ist für /dev/my_mx_mouse
die Gruppe lesbar mxgrabber
.
Um Hardware-Informationen zu finden, führen Sie Folgendes aus:
udevadm info -a -n /dev/input/eventX
Für uinput, datei /etc/udev/rules.d/94-mxkey.rules
:
KERNEL=="uinput", GROUP="mxgrabber", MODE="660"
Trennen und stecken Sie die Maus aus oder zwingen Sie udev, die Regeln mit auszulösen udevadm trigger
.
2. Aktivieren Sie das UINPUT-Modul
sudo modprobe uinput
Und in /etc/modules-load.d/uinput.conf
:
uinput
3. Neue Gruppe erstellen
sudo groupadd mxgrabber sudo usermod -aG mxgrabber your_login
4. Python-Skript
Installieren Sie python-uinput library
und python-evdev library
.
Das folgende Skript erfordert die Identifizierung des Event-Codes der Schaltfläche:
#!/usr/bin/python3.5 # -*- coding: utf-8 -*- """ Sort of mini driver. Read a specific InputDevice (my_mx_mouse), monitoring for special thumb button Use uinput (virtual driver) to create a mini keyboard Send ctrl keystroke on that keyboard """ from evdev import InputDevice, categorize, ecodes import uinput # Initialize keyboard, choosing used keys ctrl_keyboard = uinput.Device([ uinput.KEY_KEYBOARD, uinput.KEY_LEFTCTRL, uinput.KEY_F4, ]) # Sort of initialization click (not sure if mandatory) # ( "I'm-a-keyboard key" ) ctrl_keyboard.emit_click(uinput.KEY_KEYBOARD) # Useful to list input devices #for i in range(0,15): # dev = InputDevice('/dev/input/event{}'.format(i)) # print(dev) # Declare device patch. # I made a udev rule to assure it's always the same name dev = InputDevice('/dev/my_mx_mouse') #print(dev) ctrlkey_on = False # Infinite monitoring loop for event in dev.read_loop(): # My thumb button code (use "print(event)" to find) if event.code == 280 : # Button status, 1 is down, 0 is up if event.value == 1: ctrl_keyboard.emit(uinput.KEY_LEFTCTRL, 1) ctrlkey_on = True elif event.value == 0: ctrl_keyboard.emit(uinput.KEY_LEFTCTRL, 0) ctrlkey_on = False
5. Fertigstellung
Machen Sie die Python-Datei ausführbar und stellen Sie sicher, dass sie beim Start geladen wird.