LinuxのPipeWireを利用していてBluetoothのヘッドホンが音飛びする場合の対処(かもしれない)

Bluetooth Audio とLinux。なんとなく相性悪そうなやつですね。ただのイメージですが。

症状

音楽の再生時に音飛び(一時的に音が消える)減少が発生する。Bluetooth AudioのCodecが何であっても関係がない状態。SBCとかでも発生している。再生できる時もあるが基本的にはブツブツな感じ

  • PipeWire audio ( POP_OS 22.04 )
  • Bluetooth Audio head set

解決方法

Flatpakで入っている(ここが一番怪しいけど)ため以下の cd $HOME/.local/share/flatpak/runtime/org.freedesktop.Platform/x86_64/21.08/3e9184ebb14aa1a827518493704b7d45fb80136bcb31b6fac096f55be53048f3/files/share/pipewire/media-session.d/ ディレクトリに入っているファイルを修正する。ローカルに普通に入っている場合には /etc/pipewire などにあるはず

alsa-monitor.conf → session.suspend-timeout-seconds = 0 # 0 disables suspend
bluez-monitor.conf → session.suspend-timeout-seconds = 0 # 0 disables suspend

サスペンドしてしまうことによる原因がありそうなのでこの値を0に変更

pipewire.conf  → default.clock.rate = 44100 # default.clock.rate = 48000

これも何処かに書いてあったので修正(※こちらはなくても良いかもしれない)して、PCを再起動

結果

音飛びは減りました(というかほぼなくなりました)正確にどの対処であるとかほんとにFlatpakの場所を見ているのかとか確認していませんが状況的には改善していますのであっていたのかな。しばらく使っていてダメそうならまた原因を探したいと思います。

LinuxでFlatpakのアプリ上でのカーソルが小さすぎる場合の対処

HiDPIや最近の大型の画面で利用している場合にカーソルのサイズを変えたりした際にFlatpak上のアプリではカーソルの大きさに影響がないことがあります。

以下のコマンドでFlatpak側からもローカルのファイルシステムの変更が見えるようにすることで解消することがある(解消した)ので紹介しておきます(※なんでiconsを見ると「サイズ」の問題が解消するのかはわかってないですが)

flatpak --user override --filesystem=/home/$USER/.icons/:ro
flatpak --user override --filesystem=/usr/share/icons/:ro

xremapを利用して特殊なショートカットをマッピングしてみる(Alt+c → Shift+Ctrl+c など )

スペースキーの左側の「ALT」キーを普段は「Katakana」キーにマッピングしています。これでIME側の設定で日本語を解除するのに利用しています(USキーボードを使用しておりmacosでの挙動を模倣しています)
やりたいことは次のようになります。

ショートカット変更後のキー
Katakana + cShift + Ctrl + c
Katakana + cShift + Ctrl + v

macOSでは、キーと Ctrl キーの使い分けがきちんと出来ておりTerminalとかでコピーとCtrl+cをうまく分離しています。Linuxではこれらを避けるために多くのアプリは Shift + Ctrl + c にショートカットが割り当てられていることが多いです。

WaylandもXでもどちらでも利用できる xremap というツールでこれを実現できました。

普段 macの場合には Karabiner Elements を利用してコマンドキーを一回押した場合に Hiragana / Katakana にしています。Linuxでも同様に ALT_R を Katakana にしています。そのため、うまくこのキーを利用したいので、

キー1回長押し
KatakanaKatakanaAlt_R

に設定するようにします。そしてこのAlt_Rのショートカットを設定するようにします。

ショートカット変更後のキー
Alt_R + cShift + Ctrl + c
Alt_R + cShift + Ctrl + v

今回は、Alt_Rという装飾キーmodifiersを利用しました。Katakanaキーを直接virtual_modifiersにしていすると単体でKatakanaキーが有効化できなくなったので一旦Alt_Rを経由して実現しています。

modmap:
  - remap:
      Katakana:
        held: Alt_R
        alone: Katakana
        alone_timeout_millis: 100

keymap:
  - remap:
      Alt_R-c : SHIFT-CTRL-c
      Alt_R-v : SHIFT-CTRL-v

xremap自体はバイナリで提供されておりダウンロードしてすぐに使えますのでまずは試してみるのが良いですね。他にも色々なことができそうなのでもう少し色々見てみたいと思います。

参考