Debian sid 環境で Bluetooth A2DP になかなか接続できない

最近 Debian sid amd64 環境で Bluetooth オーディオデバイスを接続するとHSP/HFP は選択できますが、音質のいい A2DP が選択肢に出てこないことが多いです。何度か接続し直すと A2DP が選択肢に出ることがあるという感じ。
数回に1回接続し直しで A2DP が利用できていた頃はまだ良かったのですが、最近は10回程接続し直しても駄目です。

続きを読む

BluetoorhヘッドセットのSONY MDR-ZX330BTが動かなくなって困る

BluetoothヘッドセットのSONY MDR-ZX330BTですが,充電しておいて充電ランプが消えているので充電が終わってるなとケーブルを外して電源ボタンを押したのですが電源が入りません…….
もしかして壊れた?リセットボタンとかアレばいいのになと思いながら充電ケーブル指し直したりまた電源ボタンを押したりしてみましたがうんともすんとも言いません.

続きを読む

Debian bullseyeでPipeWireに切り替えてPulseAudioに戻したらA2DPが使えなくなった

Debian BullseyeのサウンドサーバのPipeWireですが,experimentalだとかBullseyeのPipeWireは現在の状態を表すものではないとか書かれています.でもちょっと試したいことがあってDebian Wikiを見ながらPulseAudioからPipeWireに切り替えてみました.少し試したあと元のPuleAudioに戻したのですが,以前使えていたBluetooth A2DPに切り替えできなくなりました.

続きを読む

Bluetooth ヘッドセットが A2DP に切り替えられなくて困る

最近Bluetooth ヘッドセットで A2DP に切り替えが出来なくなっていました.オーディオプロファイルを A2DP にしようとすると変更に失敗します.

20200410 03:04:39 1847144

20200410 03:04:39 1847144 2

有線のヘッドホン(セリア製100円!)で使っていたのですが頭に合わなかったり不自由なので調べることに.
以下のページを見つけました.

どうも PulseAudio の自動切り替えがうまく行っていないようでこれを無効にすることで直りました.

具体的な設定は, /etc/pulse/default.pa ファイルの load-module module-bluetooth-policyauto_switch=false というオプションを付けでデーモンの再起動です.

/etc/pulse/default.pa を修正.
$ sudo git -C /etc diff /etc/pulse/default.pa
diff --git a/pulse/default.pa b/pulse/default.pa
index f670be0..494c1ce 100644
--- a/pulse/default.pa
+++ b/pulse/default.pa
@@ -64,7 +64,7 @@ load-module module-jackdbus-detect channels=2

 ### Automatically load driver modules for Bluetooth hardware
 .ifexists module-bluetooth-policy.so
-load-module module-bluetooth-policy
+load-module module-bluetooth-policy auto_switch=false
 .endif

 .ifexists module-bluetooth-discover.so
daemonを再起動(Pulseaudioは自動復帰した)
$ pulseaudio -k
$ sudo service bluetooth restart

この後ヘッドセットを接続し直すことでA2DPが使えるようになりました.

今使っているヘッドセットは Aukey EP-B26 で長時間使えていたのが良かったのですが,バッテリーがへたってしまっています.今はUSBケーブルで給電しながら使っています.有線なんだけど細いケーブル(100円ショップの巻取りUSB microBの中の線だけにしたもの)で小さなモバイルバッテリーをポケットに入れて使うと結構自由度高い感じです.

でも出来れば新調したいところ.同じものはもう売ってないようなのでこのへんとかかな?

AfterShokz も気になってるけどちょっとお高いですね.

環境
$ dpkg-query -W pulseaudio* bluez* blueman
blueman 2.1.2-1
bluez   5.53-0ubuntu2
bluez-alsa
bluez-audio
bluez-cups      5.53-0ubuntu2
bluez-gnome
bluez-input
bluez-network
bluez-obexd     5.53-0ubuntu2
bluez-serial
bluez-utils
pulseaudio      1:13.99.1-1ubuntu1
pulseaudio-module-bluetooth     1:13.99.1-1ubuntu1
pulseaudio-utils        1:13.99.1-1ubuntu1
$ lsb_release -dr
Description:    Ubuntu Focal Fossa (development branch)
Release:        20.04
$ uname -m
x86_64
$ lsusb -d 0a5c:217f
Bus 001 Device 016: ID 0a5c:217f Broadcom Corp. BCM2045B (BDC-2.1)
$ lspci | grep -i audio
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 06)

Raspberry Pi Zero Wのbluetoothを無効にする

てことでRaspberry Pi Zero WのBluetoothも無効にしたいなと.
環境はRaspbian stretch lite 2017-09-07で確認しました.

PCで設定した以下のblacklistの手順でもokなはずですが,config.txtで無効にする方法がありそうだと調べてみました.

まずは定番のeLinux

  • RPiconfig – eLinux.org

    There's lots more documentation of available overlays in /boot/config/README. See source on Github for more.

てことでGithubを見に行きます.

それらしいものがありました :)

Name:   pi3-disable-bt
Info:   Disable Pi3 Bluetooth and restore UART0/ttyAMA0 over GPIOs 14 & 15
        N.B. To disable the systemd service that initialises the modem so it
        doesn't use the UART, use 'sudo systemctl disable hciuart'.
Load:   dtoverlay=pi3-disable-bt
Params: <None>

早速設定してみます.

$ echo 'dtoverlay=pi3-disable-bt' | sudo tee -a /boot/config.txt
dtoverlay=pi3-disable-bt

な感じで /boot/config.txt に追記して再起動しました.
lsmodを設定前と比較するとこんな感じで居なくなっています.

$ diff lsmod lsmod_pi3-disable-bt
2,6d1
< cmac                    3134  1
< bnep                   11949  2
< hci_uart               21190  1
< btbcm                   7885  1 hci_uart
< bluetooth             374820  24 hci_uart,bnep,btbcm
9d3
< snd_bcm2835            23131  0
10a5,6
> snd_bcm2835            23131  0
> rfkill                 21373  4 cfg80211
12d7
< rfkill                 21373  6 bluetooth,cfg80211
16d10
< fixed                   3029  0
18a13
> fixed                   3029  0

moduleのblacklistを設定するよりお手軽ですね :)

恐らくRaspberry Pi 3 Bでも同様の設定は使えると思います.(持ってないので未確認)

bluetoothを無効にする(Debian sid amd64)

Bluetooth経由でスマホからPCまで乗っ取れる攻撃手法が発覚 ~Bluetoothがオンになっているだけで攻撃可能 – PC Watch

BT搭載デバイスは、ペアリング済みのデバイスだけでなく、つねにあらゆるデバイスからの着信接続を探知しているため、デバイスをまったくペアリングせずにBT接続を確立できる。このため、BlueBorneは攻撃を検知されない潜在的攻撃となっている。

 BlueBorne攻撃では、まず周囲のアクティブなBT接続を探知する。このさい、ペアリングのための「発見可能」モードでなくても、BTがオンになっていれば識別が可能となる。

とても怖いです.
手元の端末ではPCとAndroidをBluetoothテザリングをよく利用しています.

PCの対応状況を確認(2017-09-13時点)すると,Debianは未だ未対応.Ubuntuは14.04 LTS, 16.04 LTS, 17.04がリリース済みでした.

とりあえず,手元で使っているDebian sid amd64とRaspberry Pi Zero WのRaspbian stretchでBluetoothを無効にしておくことにしました.


blueman-appletで設定

PCではblueman-appletを利用しています.
システムトレイ上のアイコンを右クリックして
Turn off Bluetooth
を行うと無効に出来てBluetoothのLEDも消灯します.
でも再起動でOnになるので起動のたびに設定しないといけない&そのタイミングで攻撃をされるかもしれないのであまりよろしくない感じがします.


moduleをblucklistに入れて無効にする

Bluetoothのモジュールを読み込まないようにしてみます.これならBluetoothは動作しないはずです.

まずはlsmodコマンドでbluetooth関連モジュールを確認します.手元のLenovo x200の場合は以下のようになりました.

x200のbluetooth module確認

$ lsmod|grep -i bluetooth
bluetooth             544768  14 btrtl,btintel,bnep,btbcm,rfcomm,btusb
crc16                  16384  2 bluetooth,ext4
rfkill                 24576  6 bluetooth,thinkpad_acpi,cfg80211

モジュールをロードしないように /etc/modprobe.d/blacklist.conf というファイルに blacklist <modulename> という形式で書いていきます.

x200 blacklistに設定

$ echo 'blacklist btrtl
> blacklist btintel
> blacklist bnep
> blacklist btbcm
> blacklist rfcomm
> blacklist btusb
> blacklist bluetooth' | sudo tee -a /etc/modprobe.d/blacklist.conf

設定したら再起動してモジュールが読み込まれないのを確認します.

再起動してmoduleがloadされないのを確認

$ lsmod|grep -i bluetooth

しかしPCのBluetooth LEDインジケーターが消えません.動作上は問題ないでしょうけどちょっと気持ち悪いです.
GPIO辺り探すと消せそうですが面倒.


BIOSで無効にする

PCによっては設定できないかもですが,BIOSで無効にします.これだとLEDインジケーターも光らないので良い感じです.


https://farm5.staticflickr.com/4435/37206157365_ab607c3943.jpg


物理的にモジュールを取り外す

これが一番確実でしょうがそう待たずにセキュリティ修正は降りてくると思うので今回は見送りました.

BluemanだけでNetworkManagerを使わずBluetooth tetheringを使う

最近の自転車移動でThinkpad X200を運んでいるのですがちょっと重い. PC使うかわからないようなときも持ち運んでいるのですが重いし壊しそうだしであまり良くない. 最近値崩れしたKINGJIM PORTABOOK(XMC10)や小さくて可愛いGPD-WINとかほしいのですがお金ない.てことで昔買ってあまり使っていないFujitsu FMV-U8250 + 外部キーボードで荷物の軽量化出来ないかなと.

ちなみにGPD-WINを日本で利用する人の技適問題は以下の辺りから買うと大丈夫のよう.(他は多分NG)

ということでとりあえずFujitsu FMV-U8250にUSB-Bluetoothアダプタを接続してBluetooth外部キーボードとBluetooth tetheringな環境を整えようと思ったのですが,OSをDevuan jessieにしてBluemanで繋ごうとすると,

Connection Failed: the name org.freedesktop.NetworkManager was not provided by ant .service files

というエラーで接続できませんでした. NetworkManagerに依存しているようです.

しかしいまのネットワークマネージャーはWicdでNetworkManagerは入っていません.どうにかならないかなーとBluemanの設定を見るとそれらしいものを発見.

  • View -> Local Service
  • NetworkのPAN SupportとDUN SupportをそれぞれBluemanに

blueman01

blueman02

これでNetworkManagerのない環境でもBluetooth tetheringで繋がるようになりました :)

ちなみにX200(9セルバッテリ)の重量は1.7kg近く,FMV-U8250(大容量バッテリ)はで700g近く+キーボード420g…….体積は結構減ってるけど案外軽くなってませんね.キーボードが案外重いです.使い勝手も大分落ちるし微妙?

PulseAudioでライン入力を使う

PCの熱が辛い

最近暖かくなってきました.NotePCにあまり仕事をさせていなくてもCPU温度は65~75度くらい.

$ acpi -ti
Thermal 0: ok, 71.0 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 99.0 degrees C

Flash動画をブラウザ経由で再生すると初めのうちはそうでもないけどすぐに130%くらいCPUを使ってPCの動作重く&CPU熱くなります(特にニコ生TS).そして最近は100度を超えてシャットダウンしてしまうように.

  • 再生初め

$ top -bn1 | grep -A 3 PID
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
21114 mk        20   0 1114852 214732 103616 S  43.8  1.3   0:13.54 plugin-containe
22343 mk         9 -11  588044  12992   9416 S  12.5  0.1   1:30.03 pulseaudio
 3816 mk        20   0  561012 172172 147924 S   6.2  1.1   1:51.02 Xorg
  • 暫く経ったら

$ top -bn1 | grep -A 3 PID
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
21114 mk        20   0 1168452 241256 125892 S 147.1  1.5   2:12.09 plugin-containe
25291 mk        20   0   43820   3936   3176 R  17.6  0.0   0:00.03 top
 3816 mk        20   0  574540 171532 146696 S  11.8  1.1   2:08.95 Xorg

※plugin-containeがpepperflashのプロセス.

pepperflashをAdobe Flash Playerに変更するとましになったような気もしましたがよくクラッシュする&スクリーンセーバ自動抑制機能などもないようなのでちょっと使いづらいです.

$ sudo update-alternatives --config flash-mozilla.so
alternative flash-mozilla.so (/usr/lib/mozilla/plugins/flash-mozilla.so を提供) には 2 個の選択肢があります。

  選択肢    パス                                                                          優先度  状態
------------------------------------------------------------
* 0            /usr/lib/browser-plugin-freshplayer-pepperflash/libfreshwrapper-flashplayer.so   70        自動モード
  1            /usr/lib/browser-plugin-freshplayer-pepperflash/libfreshwrapper-flashplayer.so   70        手動モード
  2            /usr/lib/flashplugin-nonfree/libflashplayer.so                                   50        手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:

スマホやChromeCastで動画再生を試みる&PC経由でBluetoothヘッドセットで音声を聞きたい

スマホやChromeCastで再生して外部ディスプレイに映すようにしたらどうだろうと試してみるとニコニコ動画/生放送は画質が悪くなってしまうけど他のサービスでは良さそうです.しかし音声をBluetoothヘッドセットで聞きたいです.それもPCと一緒に.
ということで,以下のような接続を試してみました.PC(Debian)でのBluetoothはblueman-appletを,音声デバイスの切り替えなどはpavucontrolを,Bluetooth音声のプロファイルはA2DPを利用しています.

  • ○ Android → Bluetooth → PC(Debian) → Bluetooth HeadSet

  • ○ iOS → Bluetooth → PC(Debian) → Bluetooth HeadSet

  • ✘ Android → 3.5mmライン → PC(Debian) → Bluetooth HeadSet

  • ✘ iOS → 3.5mmライン → PC(Debian) → Bluetooth HeadSet

  • ✘ ChromeCast → HDMI → HDMIモニタ → 3.5mmライン → PC(Debian) → Bluetooth HeadSet

Bluetooth ではうまく行くのですが,3.5mmライン入力がうまく行きません.ChromeCastはBluetoothが使えないのでちょっと困ります.
ライン入力の波形は出ているしレコーダアプリでラインからの音の録音は出来るのでPCに音は流れてきているようです.

以下のFAQページによると`module-loopback`モジュールを読み込むと良いようです.

以下のようにすると反映されてライン入力からの音が出るようになりました.

$ pactl load-module module-loopback

ログアウトすると設定は消えるので以下の辺りの設定ファイルに書いておくと良さそうです.

$ man default.pa|grep -A5 'SYNOPSIS'
SYNOPSIS
       ~/.config/pulse/default.pa

       /etc/pulse/default.pa

       /etc/pulse/system.pa

/etc/pulse/default.pa~/.config/pulse/default.pa にコピーして編集してPulseAudioを再起動して反映出来ました.

$ mkdir -p ~/.config/pulse
$ cp /etc/pulse/default.pa ~/.config/pulse/default.pa
$ vi ~/.config/pulse/default.pa
$ diff /etc/pulse/default.pa ~/.config/pulse/default.pa
167a168,170
>
> # 3.5mm Juck In
> load-module module-loopback
$ /usr/bin/pulseaudio -k
$ /usr/bin/pulseaudio --start --log-target=syslog

再起動しても問題無さそうです.
とりあえずこの状態でライン入力からの音声とPCの音声が同時にBluetoothヘッドセットで聞ける状態になりました.

しかし問題点がひとつ.ライン入力とBluetooth(A2DP)入力を同時に行おうとするとライン入力の音が聞こえなくなってしまいます.これは要調査ですね…….

<追記>

~/.config/pulse/default.pa の以下をコメントアウトで行けてるよう.これ出力側だけかと思ってたんですが入力も効くんですかね.

> #load-module module-switch-on-connect

てことでライン入力とBluetooth入力とPCの音声が全部同時に出力できるようになりました :)

</追記>

環境