トラックボールマウスをカスタマイズしたら後悔した

宝の持ち腐れ状態だったトラックボールマウス「ロジクールMX ERGOアドバンス ワイヤレス トラックボール」を、MacBookトラックパッド並の便利さを追求してカスタマイズしました。トラックボールに興味がある方もない方も、よければ御覧ください。

トラックボールをカスタマイズすると…

ボタンひとつでMission Controlを開けたり

f:id:isshi-hasegawa:20210620192410g:plain

ジェスチャーでデスクトップを移動したり

f:id:isshi-hasegawa:20210620192415g:plain

ボールを転がしてスクロールしたりすることが可能です。

f:id:isshi-hasegawa:20210620192412g:plain

動作を確認した環境はmacOS Big Sur バージョン 11.4です。

MX ERGOとトラックボールについて

本商品はロジクールのハイエンドマウスです。ボールを転がしてマウスポインタを操作できます。マウス自体を動かさないため、手首や腕の腱鞘炎を予防できるらしいです。詳細はロジクールの公式サイトや、以下のレビューなどを御覧ください。

筆者は2018年頃から使っていますが、いまだに壊れる気配がありません。フル充電で4か月稼働という惹句にも偽り無く、2021年現在もバッテリーがヘタっている様子はありません。ポインタの効きが悪くなっても、ボールを外して掃除してあげれば元通りです。耐用年数を考えれば、意外と安い商品かもしれません。

余談ですが、ここまで壊れにくいとメーカーは儲からないんじゃないでしょうか。せめて次世代機がリリースされたら筆者は買い替えたいと思います。ちなみにMX ERGOは2017年発売で、給電用の端子がmicro USB Type-Bです。次世代機はおそらくType-Cにアップグレードされるでしょう。

いまさらカスタマイズした理由

急に話が変わりますが、ずっと欲しかった外付けキーボードをようやく購入しました。購入したのはHappy Hacking Keyboard Professional HYBRID Type-S 英語配列/墨です。

しかしながら、机が狭いために尊師スタイルを導入し、パームレストを置いたところMacBook Proトラックパッドが完全にふさがってしまいました。

これには少し戸惑いました。そこで、「そういえば(めんどくさがって放置してたけど)MX ERGOってボタン割当てとか色々できたような…」と思い出したのがカスタマイズまでの経緯です。

右クリック+トラックボールで画面スクロール

実は、もともと少しだけカスタマイズしていました。右クリック+トラックボールをころころすることで画面スクロールできるよう設定していたんです。これはWindows環境なら専用のフリーウェアを使って簡単に実現できる機能ですが、Mac環境では少し複雑な設定が必要です。下記の記事でも詳細に解説されています。

まず、HammerspoonというMacの自動化を行えるツールをインストールします。 KarabinderのGitHubのissueのコメントに、Lua言語で書かれたスクリプトがあるので、これをHammerspoonのコンソールにコピペして実行し、Reload configしましょう。

-- HANDLE SCROLLING

local deferred = false

overrideRightMouseDown = hs.eventtap.new({ hs.eventtap.event.types.rightMouseDown }, function(e)
    --print("down"))
    deferred = true
    return true
end)

overrideRightMouseUp = hs.eventtap.new({ hs.eventtap.event.types.rightMouseUp }, function(e)
    -- print("up"))
    if (deferred) then
        overrideRightMouseDown:stop()
        overrideRightMouseUp:stop()
        hs.eventtap.rightClick(e:location())
        overrideRightMouseDown:start()
        overrideRightMouseUp:start()
        return true
    end

    return false
end)

local oldmousepos = {}
local scrollmult = -4   -- negative multiplier makes mouse work like traditional scrollwheel
dragRightToScroll = hs.eventtap.new({ hs.eventtap.event.types.rightMouseDragged }, function(e)
    -- print("scroll");

    deferred = false

    oldmousepos = hs.mouse.getAbsolutePosition()

    local dx = e:getProperty(hs.eventtap.event.properties['mouseEventDeltaX'])
    local dy = e:getProperty(hs.eventtap.event.properties['mouseEventDeltaY'])
    local scroll = hs.eventtap.event.newScrollEvent({dx * scrollmult, dy * scrollmult},{},'pixel')

    -- put the mouse back
    hs.mouse.setAbsolutePosition(oldmousepos)

    return true, {scroll}
end)

overrideRightMouseDown:start()
overrideRightMouseUp:start()
dragRightToScroll:start()

以下のように37行目のdxdyを、-dx-dyに記述を変更することで、ボールを転がした方向にスクロールするか、反転方向にスクロールさせるかを調整できます。ですが次の方法がオススメです。

local scroll = hs.eventtap.event.newScrollEvent({-dx * scrollmult, -dy * scrollmult},{},'pixel')

Scroll Reverserをインストールして調整することができます。筆者は下のように設定しています。

f:id:isshi-hasegawa:20210620192400p:plain

これで右クリックしながらころころしてスクロールできるはずです。

拡張ボタン設定

今回取り組んだのはこちらです。 Logicool Optionsをインストールすることで、ショートカットやジェスチャーを拡張ボタンに割り当てることができます。筆者は下記の記事を参考に設定しました。

割当可能なボタンは6か所です。 f:id:isshi-hasegawa:20210620193650p:plain

筆者の設定を例として公開します。

  1. プレシジョンモードボタンをMission Controlに割り当てています。 f:id:isshi-hasegawa:20210620193756p:plain

  2. 拡張ボタンの1をShift+Ctrl+Tabに、2をCtrl+Tabに割り当てています。これにより、高速でChromeのタブ移動が可能です。 f:id:isshi-hasegawa:20210620194325p:plainf:id:isshi-hasegawa:20210620194605p:plain

  3. マウスホイールを左に倒すのをCommand+、右に倒すのをCommand+に割り当てています。これにより、テキスト入力中ならキャレットを行頭や行末に移動できます。また、Chromeならブラウザの戻るや進むといったアクションを行うことができます。 f:id:isshi-hasegawa:20210620215612p:plainf:id:isshi-hasegawa:20210620215637p:plain

  4. 最後に、マウスホイールの押し込みです。 f:id:isshi-hasegawa:20210620215813p:plain マウスホイールの押し込み自体には中央ボタン(Chromeのタブ削除など)を割り当てています。また、押し込みながら上下左右いずれかにボールを転がすことで、ジェスチャーを起動するよう設定しています。押し込みながら上に転がせば音量を上げるように、押し込みながら右に転がせば右側のデスクトップへ移動できるようにしています。上下は音量の変更ではなく輝度の変更としてもいいかもしれません。 f:id:isshi-hasegawa:20210620220115p:plain

まとめ

別にトラックパッドがふさがってなかったとしても生産性爆上がりだったので、ちゃんと自分が使っている道具に向き合って、さっさとカスタマイズしておけばよかったです。

「なぜオレはあんなムダな時間を……」

MX ERGOと結構長い付き合いですが、これからもさらに愛着が湧きそうです。

また、質問やコメントいただけると嬉しいです。

その他の参考情報

上記リンク以外にも参考にさせて頂きました。 感謝申し上げます。

追記(2021年7月13日)

M1 MacBookだと、スリープ復帰後にスクロールやボタン、アプリケーションごとのカスタマイズが初期化されてしまう不具合が時折発生します。筆者は再起動することで対応していたのですが、下記の記事の方法でLogicool Optionsをアクティビティモニターから強制終了することで、再起動せずに済みます。

MX Master 3がM1 MacBook Proのスリープ復帰後に正しく接続しないときの対処法 | ゴリミー