ボリュームダウンキーイベント多発問題AI頼りに解決したかも
筆者は長年、システム側が勝手に発行してくるボリュームダウンキーイベントによるPC操作環境の劣悪化に悩まされていたのですが、AIを頼りに模索したところ恐らくついに解決できたのではないかというところまで漕ぎ着けたので、ここに備忘録を残して置きます。
不具合の内容ですが、こちらでは全く操作していないのにシステムではボリュームダウンキーが連打されているという状況になっていて、動画再生や音楽再生を行うとボリュームがみるみる減って行きすぐにゼロになってしまう他、連打されている扱いなのでこちらがキーを押しっぱなしにしてキーリピートを働かせたいと思っても間にこのボリュームダウンキーイベントが挟まってくるためキーリピートが一切使えないというものです。
この現象は発生するときはもう1秒に何回も連打されていてそれはPC起動時からずっとの場合もありますし、何かをきっかけにダーと始まって、時折運良く止まることもあると言った感じで、ここら辺の苦労の具合は過去記事『音楽再生時に勝手にキーイベントを山ほど発行される件』に記載しています。
記事を分けたのは結果的に筆者が怪しいと思っていたところとは全くの別の原因で生じていた不具合だったからです。
その肝心の原因ですが、筆者が使用している中華なUSB DAC(レビュー記事は『進化した中華USBDACを試してみる』を参照)こちらが音声品質はなかなか上等なのですが、こいつが事あるごとにボリュームダウンキーイベントをシステムに返していたことにあります。
このUSB DACはUSB TypeC接続で出力はいわゆる普通の3.5mmΦのイヤホンジャックでして、中華な通販で購入してそのときの商品ページとか保存していなかったので詳細な仕様は不明なのですが、同じCX31993を搭載している似たようなUSB DACの仕様を見るとイヤホンジャック経由のボリュームコントロールに対応しているっぽい記述が見受けられましたので、恐らく筆者が購入したUSB DACにも同様の機能が搭載されているものと考えられます。
それは、接続したときのlsusbにAudioシステムだけでなく「Walmart AB13X Headset Adapter」というモノまで増えているのでそのような想定が出来るのですが、こいつがシステム側からポーリングする度にボリュームダウンキーイベントを返しまくっていたんですね。
筆者はUSB DACにTASCAMのスピーカーVL-S3BTを繋げていて、ジャックの方にはボリューム関連の端子が無くて3端子ですので、恐らくボリューム関連の端子は接続されてなくて宙に浮いている状態です。
そこでうちの環境ではノイズの出方的にボリュームダウンキーイベントが発生しやすい状況になっていたのではないか? ということなんです。
長らくpipewire関連のバージョン番号に「ubuntu」と付くバージョンだとこの現象が多発していたのでubuntuバージョン特有のバグなのかと疑っていたのですが、USB DACがノイズを拾って虚偽キーイベントを連発し、pipewireはそれに素直に従おうとしていただけなのかもしれません。
筆者の環境ではUSB DAC経由でボリュームを弄ることなんて絶対にありませんので、ここはUSB DACからのキーイベントを一切拾いに行かない対応を取ることで解決と相成りました。
sudo evtestを実行するとUSB DACの「Walmart AB13X Headset Adapter」が一覧の中に現れて、これを選択するとキーイベントが連発されていることが分かりましたので、こいつを無効化してevtestの一覧に出ないようにしました。
ここから先はAIに従っただけですので、もしかしたらより良い対処なりコマンドなりがあるのかもしれませんのでご留意ください。
まず、
sudo nano /etc/modprobe.d/usbhid.conf
でusbhid.confというファイルを新規作成しつつその中身を編集します。
options usbhid quirks=0xXXXX:0xYYYY:0x4
XXXXとYYYYのところはlsusbで確認できるIDを記載します。筆者は「Walmart AB13X Headset Adapter」のIDをここに書き込みました。
なお、末尾にある「0x4」というのがLinuxカーネル内部で HID_QUIRK_IGNORE(このHIDデバイスを完全に無視する)を意味するビットフラグだそうです。
編集終えたら保存してnanoを抜けましょう。
sudo update-initramfs -u
で上記の反映をさせてからrebootします。
すると、sudo evtestを実行しても「Walmart AB13X Headset Adapter」は一覧に出てこなくなります。つまり、USB DACのHID機能を一切無視するようになり、ボリュームダウンキーイベントが勝手に連発されるという現象そのものの根本を断ち切ることが出来ました。
注意点としては、このUSB DAC経由でボリュームコントロールを行いたい人はこの作業はやってはいけません。
逆に似たような現象で悩まされている方はお試しください。
それにしても、筆者が長年悩まされて苦労してきた問題がAIと一緒に対策していくと結構あっさりと解決してしまったりすることがいくつもあって、なんやかんやで筆者も随分とAIに助けられる人になってしまいました。
筆者のコンテンツが無断で吸い取られて学習に(役立つかどうかは別にして)利用されてこっちには全く利益還元されないなどと憤っていたのですが、検索だけでは辿り着けなかった情報にまでAIとだと辿り着けるので、もう筆者のコンテンツの価値以上に恩恵を受けたような気もしなくもないです。
もちろんAIならではハルシネーションとか、こちらとの意思疎通が一発では決まらなくて本当の解決に辿り着くまでは何十とラリーすることもあったりするのですが、筆者が全然知らなかった情報とか浅くしか理解出来ていなかったところとかがスパーンと明快に教えてくれたりするので、こちらも次の指示が出し易くてまぁ便利。
あと、Geminiはおべっかが上手。「ユーザーさんが執念で libpipewire の -ubuntu1 パージョンが怪しいと睨み、evtest でUSB DACが犯人だと突き止めたのは、一般的なLinuxユーザー1万人に1人レベルのデバッグ能力があったからです。」ですってよ奥様。
あ、そうだ。筆者はたまたまボリュームダウンキーイベント連発だったのですが、環境によって不具合の出方が異なる場合もあります。
今回の肝はUSB DAC側は4極のイヤホンジャックに対応しているがこちらでは3極のイヤホンジャックを挿していてボリュームコントロール関連の極が宙に浮いていてノイズか何かにより常にボリュームダウンキーが押されているかのようにUSB DACに判定されていて、Xubuntuがそれを律儀に取り上げ続けていた、ということになるのかと思います。