/home/amgsk

TrackballをHyprlandでより快適に使う(追記あり)

· updatedAt: 2026/03/17 · amgsk
要約
  • Kensington SlimBlade Proを例に、Hyprlandとinput-remapperを使用してトラックボールの加速度やスクロール設定をカスタマイズする方法を紹介。
  • input-remapperでマウスボタンの同時押しコンビネーションを設定していたが、キーバインド成立前のクリックが発火してしまう問題があったため、evsieveに移行した。

Kensington SlimBlade Proを例に、Hyprlandとinput-remapperを使用してトラックボールの加速度やスクロール設定をカスタマイズする方法を紹介。

トラックボールは加速をONにして加速度をカスタムに設定することで、より快適な操作感を得ることができる(と思っている)
以下のようにHyprlandの設定ファイルhyprland.confにトラックボールの加速度や感度、スクロール設定を記述する。

ケンジントン公式のデバイスドライバでは、ボタン同時押しの設定が可能だが、当然Linuxでは利用できない。
そのためinput-remapperを使用して、複数ボタン同時押しの操作を実現している。

config例の重要なポイント

  • 加速度のプロファイルをカスタムに設定し、加速度のカーブを細かく調整することで、トラックボールの動きがより自然になるようにしている
  • スクロール方法をon_button_downに設定し、スクロールボタンを指定。トラックボールの特定のボタンを押しながら動かすことでスクロールができるようになる
  • input-remapperを利用する場合、デバイス名が仮想デバイスのものになるため、Hyprlandの設定ファイルでは仮想デバイスの名前を指定する必要がある
  • input-remapperが使用できない状況のために、フォールバックとして通常のデバイス名での設定も記述している

Hyprlandの設定例

nameは実際のデバイス名に合わせて適宜変更する必要がある。
hyprctrl devicesコマンドでデバイス名を確認できる。

hyprland.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Kensington SlimBlade Pro Trackball
# 冗長がやむを得ないので、最低限 加速度/感度/スクロール設定を変数にまとめている
$tb_accel = custom 1.5 0.0 0.5 1.0 2.5
$tb_sens = -0.2
$tb_scroll_factor = 0.4
$tb_scroll_button = 276 # btn:extra (physical middle via evsieve)

# こっちはinput remapperが使用できない場合の通常のデバイス指定
device {
    name = kensington-slimblade-pro(2.4ghz-receiver)-kensington-slimblade-pro-trackball(2.4ghz-receiver)
    accel_profile = $tb_accel
    sensitivity = $tb_sens
    natural_scroll = false
    scroll_method = on_button_down
    scroll_button = $tb_scroll_button
    scroll_factor = $tb_scroll_factor
}

# こっちはinput remapperによって作成された仮想デバイスの指定
device {
    name = input-remapper-kensington-slimblade-pro(2.4ghz-receiver)-kensington-sl-forwarde
    accel_profile = $tb_accel
    sensitivity = $tb_sens
    natural_scroll = false
    scroll_method = on_button_down
    scroll_button = $tb_scroll_button
    scroll_factor = $tb_scroll_factor
}

input-remapperの自動起動とプリセットのロード

Hyprlandの起動時にinput-remapperを自動で起動し、設定済みのプリセットをロードするには、hyprland.confに以下を追記する。

hyprland.conf
1
exec-once = input-remapper-control --command autoload

--command autoloadを指定することで、input-remapper-controlがデーモンを起動し、各デバイスに対して最後に使用したプリセットを自動的にロードしてくれる。

特定のプリセットを明示的にロードしたい場合は、以下のように指定できる。

hyprland.conf
1
exec-once = input-remapper-control --command start --device "Kensington SlimBlade Pro(2.4GHz Receiver)" --preset "プリセット名"

蛇足

トラックボールは物理的な接点があるため、潤滑油が必要である。 定期的に自分の手汗や顔面の油を利用して潤滑するのが良い。天然の油であるため無害だしコストもかからない。


(追記)input-remapperからevsieveへの移行

背景

input-remapperでマウスボタンの同時押しコンビネーションを設定していたが、以下のような問題があったため、evsieveに移行した。

  • キーバインド成立前のクリックが発火してしまう:例えばMiddle+Left+Sideの3ボタン同時押しでワークスペースを切り替える設定の場合、最初に押したボタンのクリックイベントが、コンビネーションが成立する前にアプリケーションに送信されてしまう
  • input-remapperはevdevレベルでデバイスをグラブして処理しているが、コンビネーション判定中にイベントを保留する仕組みが弱く、この問題の根本的な解決が難しかった
  • キーイベントを発する際のマウスフォーカスを意識すること無く、心理的安全性の高いコンビネーション操作を実現したい

evsieveとは

evsieveはLinuxのevdevイベントを直接操作するユーティリティ。コマンドライン引数だけで設定が完結し、systemdサービスとしても軽量に動作する。

evsieveの--hook--withholdの組み合わせにより、ボタンイベントを一時保留してからコンビネーション判定を行い、成立しなければ遅延リリース、成立すれば元のクリックを抑制するという動作が実現できる。

セットアップ

インストール(Arch Linux)

1
yay -S evsieve

systemdサービスの作成

/etc/systemd/system/evsieve-trackball.serviceを作成する。 evdevデバイスへのアクセスにはroot権限が必要なため、システムレベルのサービスとして配置する。

evsieve-trackball.service
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[Unit]
Description=Evsieve trackball button remapping for Kensington SlimBlade Pro
After=systemd-udevd.service

[Service]
Type=simple
ExecStart=/usr/bin/evsieve --input /dev/input/by-id/usb-Kensington_SlimBlade_Pro_2.4GHz_Receiver__Kensington_SlimBlade_Pro_Trackball_2.4GHz_Receiver_-event-mouse grab --hook btn:middle btn:side send-key=key:f13 --hook btn:middle btn:right send-key=key:f14 --hook btn:right btn:side send-key=key:f15 --hook btn:side btn:left send-key=key:f16 --withhold btn:side --map btn:middle btn:extra --map btn:side btn:middle --output name=evsieve-trackball
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

各オプションの意味:

  • grab — デバイスを排他的に取得し、他のプロセス(libinput等)に生のイベントが流れないようにする
  • --hook btn:middle btn:side send-key=key:f13 — MiddleとSideの同時押しでF13キーを送信
  • --withhold btn:side — Sideボタンのイベントを一時保留し、フック成立時は元のクリックを抑制する。フックが不成立なら通常通りイベントを通過させる
  • --map btn:middle btn:extra / --map btn:side btn:middle — 物理的なMiddle(大玉横のボタン)をbtn:extra(276)に、物理的なSide(上部ボタン)をbtn:middleに再マッピングする。これによりbtn:side(戻るボタン)はどの物理ボタンからも出力されなくなり、Sideボタンはフックの修飾キーとしてのみ機能する
  • --output name=evsieve-trackball — 仮想デバイス名を指定して出力

ワークスペースのスイッチを行なった時、そのスイッチ先のワークスペースにブラウザが有る場合、意図せずbtn:sideが効いてしまう現象が合った。
やむなく、btn:side単独のキー挙動を無効化して、マウス上のModキーとして動作するようにした。 戻るボタンはhyprlandの設定で、alt+btn:rightで行うこととする。

サービスの有効化

1
2
sudo systemctl daemon-reload
sudo systemctl enable --now evsieve-trackball.service

Hyprlandの設定変更

仮想デバイスの設定

evsieveがデバイスをグラブして仮想デバイスとして再出力するため、Hyprland側では仮想デバイス名で設定を記述する必要がある。

hyprland.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Evsieve virtual trackball device
device {
    name = evsieve-trackball-1
    accel_profile = $tb_accel
    sensitivity = $tb_sens
    natural_scroll = false
    scroll_method = on_button_down
    scroll_button = $tb_scroll_button
    scroll_factor = $tb_scroll_factor
}

キーバインドの設定

evsieveが送信するF13〜F16キーをHyprlandのキーバインドに割り当てる。 evsieveの仮想キーボードから送信されるキーイベントは、keysym(F13)ではなくkeycode指定(code:XXX)で照合する必要がある。

hyprland.conf
1
2
3
4
5
6
7
# Trackball button combos (via evsieve)
# Middle+Side → F13 → workspace prev, Middle+Right → F14 → workspace next
bind = , code:191, workspace, -1
bind = , code:192, workspace, +1
# Side+Right → F15 → kill window (現在は無効化)
#bind = , code:193, killactive
bind = , code:194, exec, grim -g "$(slurp)" -t ppm - | satty -f -  # Side+Left → F16 → screenshot

kensington slimblade pro

キー動作アクション
Middle + Sideevsieve F13 (code:191)ワークスペース前へ
Middle + Rightevsieve F14 (code:192)ワークスペース次へ
Side + Leftevsieve F16 (code:194)スクリーンショット(slurp + satty)
Middle + Movelibinput (btn:extra経由)スクロール

input-remapperの無効化

evsieveに移行した場合、input-remapperは不要になったため、以下のコマンドでサービスを無効化する。

1
sudo systemctl disable input-remapper.service

hyprland.confからinput-remapper-control --command autoloadの行も削除する。

EOF