話說藍牙明明有開放標準,但Apple卻搞一些私有化的東西,使部份功能僅能在Apple生產的裝置上使用,其他系統的用戶只能使用基本功能。比如Android手機用戶只能透過長按AirPods按鈕切換降造模式,不能透過手機端控制。
現在AirPods的藍牙訊號已經被開源社群逆向破解出來了,讓Android機能讀到AirPods電量,不過這還不夠——
有個開源專案叫做LibrePods,最早叫做ALN - AirPodsLikeNormal,宣稱能夠「讓AirPods從Apple生態系中解放」。
LibrePods這個專案,實現了查看電量、配對動畫、偵測耳朵、個人化音訊、切換降噪與通透模式、單耳降噪、適應性音訊、對話感知、頭部動作、用滑桿控制音量的功能。
如下圖,在電腦與手機間切換AirPods連線,手機會跳出AirPods打開的動畫。這裡播放的是兩個樂團版本的〈Re:Re:〉
作者是以AirPods Pro 2為基準下去開發的,因此以上功能要看硬體是否有支援才能使用。這些功能需要AirPods 4或者AirPods Pro 2以上才能使用。像我是AirPods Pro第一代就只能使用降噪。
除了查看AirPods電量的基本功能之外,作者還試圖把macOS和iOS才有的功能帶到其他系統,那就是接續互通(handoff)
目前支援系統為Android與Linux。
也就是說,能夠讓Root過的Android手機與Linux電腦連接到AirPods,在兩個裝置之間自動切換耳機的功能。
1. 安裝Linux版LibrePods客戶端#
目前沒有發行版打包,需要參考Github指示手動編譯
- Ubuntu安裝以下依賴套件
sudo apt-get install qt6-base-dev qt6-declarative-dev qt6-connectivity-dev qt6-multimedia-dev \
qml6-module-qtquick-controls qml6-module-qtqml-workerscript qml6-module-qtquick-templates \
qml6-module-qtquick-window qml6-module-qtquick-layouts
- 編譯
git clone https://github.com/kavishdevar/librepods.git --depth=1
cd librepods/linux
# 輸入手機的藍牙MAC位址,可以在系統設定配對藍牙的時候看到
export PHONE_MAC_ADDRESS="XX:XX:XX:XX:XX:XX"
mkdir build
cd build
cmake ..
make -j $(nproc)
- 執行
./librepods
GNOME桌面需要安裝AppIndicator and KStatusNotifierItem Support才能看到系統匣面板。
開啟後連線到AirPods,可以切換降噪模式。
2. 安裝Android版LibrePods客戶端#
因為Android的藍牙有bug,所以需要Root權限修補。
在Magisk啟用Zygisk,或者刷入Zygisk Standalone模組
刷入LSPosed
在LSPosed界面啟用LibrePods
開啟APP,獲取要求的權限就可以了
3. 「接續互通」的操作邏輯#
開啟藍牙,將Android手機與Linux電腦配對
將AirPods與Android手機配對
暫時取消連線
將AirPods與Linux電腦配對
在電腦LibrePods面板開啟Cross-Device Connectivity with Android,這樣兩邊客戶端就都能看到AirPods電量。
順帶一提,想要同步手機與電腦通知的,可以裝KDE Connect。
接著,LibrePods兩邊的客戶端會偵測哪邊正在播放音樂,或者有來電,然後自動切換過去。例如手機開始播放Youtube,幾秒後電腦就會斷訊,然後跑到手機那邊。這依賴手機端LibrePods的事件偵測設定,我是設定只有在手機播放音樂的時候才切換。這個切換的時機有時候很吃運氣。
不過反過來的情況似乎有問題,就是手機停止播放了,卻沒自動切換到電腦這邊。需要手動到藍牙面板點一下AirPods連線。
4. 搭配Spotify Connect使用?#
搭配Spotify Connect的機制,達成跨裝置播放同一首歌的操作。
在電腦與手機間切換音樂。用起來有點hacky。
因為Spotify Connect作用的時候,兩邊會同時播放音樂(有一邊只有進度條但沒聲音),這會導致LibrePods自動切換的判斷混亂。
需要在系統設定手動斷線AirPods,另一部裝置才能存取AirPods。並將LibrePods手機APP的事件判斷全部關閉