Macbook Proのキーボードのチャタリングが直らなくてキレたのでソフトウェア的に直した話

タイトルの通りです。
つい3ヶ月ほど前に購入したMacbook Pro 2018ですが、キーボードの特定のキーが一定確率で2回押されてしまうという不具合を踏みました。
調べてみると何件か同様の症状を訴えている記事を見かけたので、よくあるハードウェアの不具合なんだなと思い無償の修理に出しました。
修理までの対応は電話を通じてとても丁寧にやっていただき、商品も配送修理に出してからわずか2日で帰ってきたのでその対応の速さにはとても感謝しています。
修理から戻ってきた時のMacはキーボードの交換をはじめ他の場所もピカピカになっていて、問題のチャタリングも無くなっていました。
やっとあの症状から解放されたとこの時は安心していました。

しかし...
修理から戻ってきて1ヶ月ほどたち、作業をしているとまた例の症状が現れたではありませんか。
もちろんまた修理に出せば無償でやってくれてすぐ返ってくるでしょう。でもなんかまた手続きをするのが面倒臭かったので、ソフトウェア的な解決手段が何かないかなと考えてみました。

調べてみると、まずKarabinerというMacにインストールできるキーボード操作ツールが引っかかってきました。これの設定ファイルにある「連続して反応する時間の最小値」みたいのを設定すればチャタリングは回避できるようでした。早速インストールしてその設定を探してみたのですがそんなものはどこにもない。
他の更新時期の新しいサイトをみたらわかったのですが、その機能は少し前のアップデートで削除されたようでした。やれやれ。

そのあとに見つけたサイトがチャタリングを抑制するプログラムを裏で走らせておくというものです。参考にしたのは以下のサイトです。

macOSのチャタリングをソフトウェアで対応する:株式会社サブスレッド

基本的にこのサイトに書かれている通り、レポジトリをgit cloneしてmakeしたファイルを実行すれば指定した間隔以下の入力を無視することができます。
半信半疑でやってみましたが、思ったよりうまくいったので驚きました。
僕はしきい値の変更を行いました。デフォルトの値(100ms)だとたまにチャタリングがすり抜けてしまうことがあったため、値を120msに変更しました。
やり方ですが、レポジトリ内のdebounce.mを開き、15行目にあった以下の部分を書き換え、再びmakeを行います。

...
#import <Foundation/Foundation.h>
#import <AppKit/NSEvent.h>

#define DEBOUNCE_DELAY 100 // ここの数値を変える
#define SYNTHETIC_KB_ID 666
..

こうしてチャタリングが解消することを確認し、これをdaemonを用いて起動時に毎回自動で立ち上がるように設定したのですが、先ほどのページ通りに行なってもうまく動きませんでした。
おそらく実行権限などの問題と思われますが、とりあえず実行ファイルのパスを/usr/local/binではなく自分でcloneしたディレクトリに設定することで無事動くようになりました。例えば、.plistファイルの中身を下のような感じに書き換えます。

    <array>
        <string>/Users/username/debounce-mac/debounce</string>
    </array>

これでとりあえずチャタリングは回避できました。あまりに高速に同じキーを押さない限り、正しいものが入力されないということはないと思います。
このまましばらく使ってみて、やっぱり使いづらさが出てくるようならもう一度無償修理にでも出そうと思います。

この記事が同一の症状が出てる人の参考になればなーと思ってます。 バタフライキーボード、色々問題点が多いらしいのでこういう不具合が減ってくれるといいのですが...