askubuntuの投稿には、以下に要約する回答が含まれています。
問題は、xbindkeysがマウス全体を取得し、modifers + mouseクリックマッピングが不確実になることです。答えは、python-uinputスクリプト経由でuinputを使用して、サムボタンの/dev/my-mouseクリックを監視し、Ctrlキーを仮想キーボードに送信します。詳細な手順は次のとおりです。
1. udevルールを作成する
マウスの場合、ファイル/etc/udev/rules.d/93-mxmouse.conf.rules:
KERNEL=="event[0-9]*", SUBSYSTEM=="input", SUBSYSTEMS=="input", 
ATTRS{name}=="Logitech Performance MX", SYMLINK+="my_mx_mouse", 
GROUP="mxgrabber", MODE="640"
Udevは、event5などの名前を持つカーネルデバイスを探します。SYMLINKは/dev/my_mx_mouse、グループで読み取り可能なマウスを見つけるためのものmxgrabberです。
ハードウェア情報を見つけるには、次のようなものを実行します。
udevadm info -a -n /dev/input/eventX
uinputの場合、ファイル/etc/udev/rules.d/94-mxkey.rules:
KERNEL=="uinput", GROUP="mxgrabber", MODE="660"
マウスを取り外して接続するか、を使用してudevにルールを強制的にトリガーさせますudevadm trigger。
2. UINPUTモジュールを有効にする
sudo modprobe uinput
そして/etc/modules-load.d/uinput.conf:
uinput
3.新しいグループを作成する
sudo groupadd mxgrabber
sudo usermod -aG mxgrabber your_login
4. Pythonスクリプト
インストールpython-uinput libraryしpython-evdev libraryます。
以下のスクリプトでは、ボタンのevent.codeを識別する必要があります。
#!/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.仕上げ
Pythonファイルを実行可能にし、起動時にロードされるようにします。