MousePods wykorzystuje ruch słuchawek AirPods jako wejście myszy w Linuksie, bez komputera Apple. Projekt wymienia AirPods 3 i AirPods Pro 2 jako modele sprawdzone sprzętowo. W przypadku AirPods 3 jego autorzy opisują też konkretny problem z odbiorczym MTU Bluetooth, którego zmiana pozwoliła systemowi ujawnić dane z czujników.

Jak MousePods przekłada ruch słuchawek na ruch kursora

Ciemny interfejs MousePods pokazuje model słuchawki z kolorowymi osiami orientacji, niebieski punkt kursora oraz wykres trzech składowych ruchu.

MousePods to otwarta aplikacja w Pythonie stworzona przez Matteo Gaudioso. Odczytuje ruch obsługiwanych AirPods przez Bluetooth i może przekazać go jako wejście myszy w Linuksie. Tryb myszy wykorzystuje ruch głowy albo ruch słuchawki trzymanej w dłoni. Aplikacja tworzy wirtualne urządzenie wejściowe przez /dev/uinput.

Interfejs pokazuje orientację słuchawki, położenie kursora i wykresy ruchu. Dzięki temu można zobaczyć, jak program przedstawia dane czujników i sterowanie kursorem.

Przed próbą użycia MousePods sprawdź status konkretnego modelu i trybu: projekt osobno oznacza funkcje sprawdzone sprzętowo, symulowane i eksperymentalne.

Co zmieniło się w obsłudze czujników AirPods 3

Dla AirPods 3 o numerach A2564/A2565 projekt opisuje połączenie Apple RemoteHID przez AACP, na kanale RTBuddy 0x800. W tym modelu słuchawki nie korzystają z komendy startowej SensorDataWX używanej przez nowsze modele, jak podaje dokumentacja odkryć MousePods.

Kluczowa okazała się odbiorcza MTU L2CAP, czyli maksymalny rozmiar jednostki danych odbieranej w tym kanale Bluetooth. W opisanym teście domyślna wartość w Linuksie wynosiła 672 bajty; przy niej słuchawki nie ogłaszały deskryptorów czujników ruchu. Po zwiększeniu MTU do 2582 bajtów deskryptory stały się widoczne. Projekt wskazuje 2582 bajty jako wartość używaną przez iOS.

Te ustalenia dotyczą testu AirPods 3 z firmware’em o wersji marketingowej 6296592, na Ubuntu 24.04, BlueZ 5.72 i Pythonie 3.12. W tym środowisku projekt zmierzył strumień ruchu sięgający około 210 Hz, a za praktyczne ustawienie uznał około 100 Hz. Przy częstotliwości bliskiej 180 Hz odnotował 12 przerw trwających 50 ms w ciągu 23 sekund, gdy łącze obsługiwało równocześnie A2DP i mysz Bluetooth.

Które modele i tryby wymienia projekt

MousePods oznacza AirPods 3 i AirPods Pro 2 jako sprawdzone na sprzęcie. AirPods 2, AirPods Pro 1 i AirPods Max są wymienione jako nieprzetestowane. Projekt opisuje wspólny protokół AirPods 4 i modeli Pro, ale nie zalicza AirPods 4 do modeli sprawdzonych przez MousePods. Dla AirPods Pro 2 podaje strumień około 100 Hz przy domyślnym interwale 10 ms. Szczegóły statusu modeli i funkcji znajdują się na stronie projektu MousePods.

Status zależy też od trybu. Projekt oznacza sterowanie myszą ruchem głowy lub słuchawki jako sprawdzone sprzętowo. Tryb wskaźnika z kalibracją narożników ekranu jest opisany jako przetestowany wyłącznie w symulacji, a tryb przesuwania słuchawki po stole pozostaje eksperymentalny. Czujniki AirPods 3 są wyłączone, gdy słuchawki leżą w etui.

MousePods może wysyłać dane śledzenia głowy do opentrack; strona projektu opisuje tę ścieżkę jako sprawdzoną offline. Repozytorium osobno opisuje test współtwórcy bezpośredniej integracji Steam/Proton: z AirPods Pro 2 na Bazzite w Assetto Corsa i Euro Truck Simulator 2. To inna ścieżka niż wyjście opentrack.

Czego MousePods wymaga w Linuksie

Projekt wymaga Linuksa z BlueZ, sparowanych AirPods oraz prawa zapisu do /dev/uinput. Podaje, że nie jest potrzebny ani komputer Apple, ani dostęp roota. Wymagane jest Python 3.10 lub nowszy; test AirPods 3 opisany wyżej przeprowadzono z Pythonem 3.12.

Instrukcja projektu przewiduje sklonowanie repozytorium, utworzenie środowiska wirtualnego Pythona, instalację zależności z requirements.txt i uruchomienie airpods_mouse_controller.py --ui.