ubuntuでマウス速度を自動設定

Posted on 日 09 10月 2022 in 開発環境

ubuntuは設定画面から「マウスの速度」を設定できます。

しかし、High DPIディスプレイを使っていると設定画面からできる最大速度より速くしたくなります。

ここでは、ターミナルを起動したときにマウスの速度を設定画面で設定できる最大値以上にする方法を説明します。

方法

デバイスの情報を調べる

まず、目的のデバイスのidと名称を調べます。

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]    Virtual core XTEST pointer                id=4    [slave  pointer  (2)]    Logitech MX Ergo Multi-Device Trackball   id=12   [slave  pointer  (2)] Virtual core keyboard                         id=3    [master keyboard (2)]
     Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
     Power Button                              id=6    [slave  keyboard (3)]
     Power Button                              id=7    [slave  keyboard (3)]
     PFU Limited HHKB-Classic                  id=8    [slave  keyboard (3)]
     PFU Limited HHKB-Classic Consumer Control id=9    [slave  keyboard (3)]
     PFU Limited HHKB-Classic Keyboard         id=10   [slave  keyboard (3)]
     HD Pro Webcam C920                        id=11   [slave  keyboard (3)]

私の場合、id=12で名前はLogitech MX Ergo Multi-Device Trackballでした。

次に、このマウスに設定できるパラメーターを調べます。

$ xinput list-props 12
Device 'Logitech MX Ergo Multi-Device Trackball ':
        Device Enabled (156):   1
        Coordinate Transformation Matrix (158): 5.000000, 0.000000, 0.000000, 0.000000, 5.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Natural Scrolling Enabled (508):       0
        libinput Natural Scrolling Enabled Default (509):       0
        libinput Scroll Methods Available (510):        0, 0, 1
        libinput Scroll Method Enabled (511):   0, 0, 0
        libinput Scroll Method Enabled Default (512):   0, 0, 0
        libinput Button Scrolling Button (513): 0
        libinput Button Scrolling Button Default (514): 2
        libinput Button Scrolling Button Lock Enabled (515):    0
        libinput Button Scrolling Button Lock Enabled Default (516):    0
        libinput Middle Emulation Enabled (517):        0
        libinput Middle Emulation Enabled Default (518):        0
        libinput Rotation Angle (519):  0.000000
        libinput Rotation Angle Default (520):  0.000000
        libinput Accel Speed (521):     1.000000
        libinput Accel Speed Default (522):     0.000000
        libinput Accel Profiles Available (523):        1, 1
        libinput Accel Profile Enabled (524):   1, 0
        libinput Accel Profile Enabled Default (525):   1, 0
        libinput Left Handed Enabled (526):     0
        libinput Left Handed Enabled Default (527):     0
        libinput Send Events Modes Available (276):     1, 0
        libinput Send Events Mode Enabled (277):        0, 0
        libinput Send Events Mode Enabled Default (278):        0, 0
        Device Node (279):      "/dev/input/event18"
        Device Product ID (280):        1133, 45085
        libinput Drag Lock Buttons (528):       <no items>
        libinput Horizontal Scroll Enabled (529):       1
        libinput Scrolling Pixel Distance (530):        15
        libinput Scrolling Pixel Distance Default (531):        15
        libinput High Resolution Wheel Scroll Enabled (532):    1

ここで、マウス速度のパラメーターは、 Coordinate Transformation Matrix (158) です。

マウス速度を設定する

マウス速度を設定するには、下のようなコマンドを実行すればよいです。

xinput set-prop 12 158 5 0 0 0 5 0 0 0 1

ここで、12はデバイスのid、158はパラメーターのid、5はマウス速度です。

そのため、~/.zshrc~/.bashrcなどに上のコマンドを書き加えておけば、ターミナルを起動するごとにマウスの速度を設定することができます。

ちなみに、~/.profileに上のコマンドを書かない理由は、bluetoothマウスだとしばらく動かさないとPCとの接続が切れその結果マウス速度がリセットされてしまうことがあるためです。 言い換えると、bluetooth接続が切れるたびにログアウトしないとマウス速度を設定できなくなるからです。

マウスのidが再起動ごとに変わる場合

その場合、マウスのidが12以外のこともあるため上のコードを少し変更する必要があります。

若干汚いコードですが、下のコードを使いました。

MX_ID=$(xinput list | grep MX | cut -f2 | cut -d'=' -f2)
xinput set-prop ${MX_ID} 158 5 0 0 0 5 0 0 0 1

まず、xinput listでデバイスidと名前の一覧を表示します。 その結果をパイプでつなぎ、grep MXでMXが含まれる行を検索します。 その後、idだけを取り出せるようにcut -f2 | cut -d'=' -f2としています。

上のようにすれば、MX_IDには私の使っているマウスのIDが代入され、そのMX_IDをxinputで使うことで、idが変わっても同じスクリプトでマウスの速度を設定できます。

謝辞

上の情報を教えてくださったvim-jpの方々に感謝します。

参考サイト

以下3つは試していないが参考サイト。