Tło: Używam zestawu słuchawkowego Bluetooth jako wyjścia audio. Udało mi się go uruchomić dzięki długiej liście instrukcji na temat dokumentacji społeczności BluetoothHeadset i zautomatyzowałem proces aktywacji zestawu słuchawkowego jako domyślnego wyjścia audio w skrypcie, dzięki innym pytaniom .
Ponieważ jednak używam zestawu słuchawkowego Bluetooth zarówno z telefonem, jak i komputerem (a zestaw słuchawkowy nie obsługuje dwóch połączeń wejściowych), aby telefon nie „kradł” połączenia po włączeniu zestawu słuchawkowego, zmuszam zestaw słuchawkowy do tryb wykrywania podczas łączenia się z komputerem (telefon automatycznie łączy się z nim).
Więc nawet jeśli zestaw słuchawkowy jest sparowany ok i w „normalnym” przypadku automatycznego połączenia, zawsze muszę używać małej ikony bluetooth w obszarze powiadomień, aby faktycznie połączyć się z moim urządzeniem (patrz zrzut ekranu).
Czego chcę uniknąć: Ten GUI do łączenia ze znanym i sparowanym urządzeniem Bluetooth:
Co chcę zamiast tego: chciałbym, aby bluetooth robił dokładnie to, co robi kliknięcie elementu połączenia w GUI, tylko przy użyciu wiersza polecenia. Chcę użyć wiersza polecenia, dzięki czemu mogę wykonać pojedynczy skrót klawiaturowy dla akcji i nie będę musiał nawigować w interfejsie GUI za każdym razem, gdy chcę ustanowić połączenie z urządzeniem.
Pytanie: Jak mogę spróbować połączyć się z określonym, znanym i sparowanym urządzeniem Bluetooth z wiersza poleceń?
Dalsze pytanie: Jak sprawdzić, czy połączenie się powiodło, czy nie?
źródło
Odpowiedzi:
Demon Bluetooth
W domyślnej instalacji w tle działa demon ( bluetoothd ) (uruchamiany z pliku
/etc/init.d/bluetooth
). Ten demon dba o rozpoznawanie i łączenie się ze znanymi urządzeniami Bluetooth i może być skonfigurowany z plikami konfiguracyjnymi w/etc/bluetooth
. W przypadku automatycznego łączenia zestawu słuchawkowegoaudio.conf
należy odkomentować (usunąć#
):Aby zrestartować typ demona
sudo /etc/init.d/bluetooth restart
.Uwaga: Użycie narzędzia wiersza poleceń
sudo hcitool cc <MAC-Adress>
nie doprowadziło do stabilnego połączenia ze znanym urządzeniem w środowisku testowym, gdy demon był uruchomiony.DBus
Aby podłączyć odłączony, ale fizycznie obecny i sparowany zestaw słuchawkowy, możemy użyć D-Bus ze skryptu. Oto przykład w pythonie:
W przypadku, gdy mamy więcej niż jedno urządzenie Bluetooth, musimy
devicePath
oczywiście odpowiednio się dostosować . Powyższy przykład połączy aHeadset
. Zmień interfejs na inny protokół dla dowolnej innej usługi (npAudioSink
.).Pulseaudio
Jeśli znasz adres MAC urządzenia Bluetooth, możesz podłączyć go jako zlew wyjściowy dla pulseaudio poprzez:
Gdzie xx_xx_xx_xx_xx_xx to adres MAC (zamień „:” na „_”, aby pulseaudio go rozpoznał).
Zobacz także tę odpowiedź, aby uzyskać więcej informacji.
źródło
Sink bluez_sink.xx_xx_xx_xx_xx_xx does not exist.
wypróbowane wielkie i małe litery.bt
lub nieblue
jest wymienione wpacmd list-sinks
. (Podaje tylko 1 zlew dostępny.)Używam tego skryptu, aby podłączyć urządzenie audio Bluetooth. Jeśli zestaw słuchawkowy jest już sparowany, połączenie powinno być możliwe w ten sam sposób za pomocą org.bluez.Headset.Connect / Disconnect zamiast org.bluez.Audiosink.Connect / Disconnect .
HTH!
źródło
16.04
, dziękuję! inni, nie zapomnij przekazaćon
opcji do skryptu!Używam i3 jako menedżera okien, więc nie mam dostępnej ikony zasobnika bluetooth. Z jakiegoś powodu przycisk wyboru w ustawieniach jedności nie jest wrażliwy, dlatego potrzebuję sposobu, aby to zrobić od czasu do czasu, gdy moje słuchawki się nie łączą.
Wydaje się, że
bluez
nie zmienili dbus API . Wydaje się, że wykorzystująca odpowiedźorg.bluez.Manager
już nie działa. Zamiast tego zaleca się użycieObjectManager
.Oto zaktualizowany skrypt Pythona, który połączy pierwszy znaleziony niepodłączony zestaw słuchawkowy Bluetooth (przypuszczalnie lista obejmuje wszystkie sparowane urządzenia?):
ten przykład, podobnie jak inny przykład w tym wątku, używa
dbus
pakietu python. Na Ubuntu 16.04 zainstalowałem to przezapt-get install python-dbus
.Jeśli chcesz spełnić inne kryteria, ten dokument wydaje się wyświetlać listę właściwości, które mogą być sprawdzane przez dbus.
Mam zapisany skrypt, w
~/.local/bin/bt-connect-headset
którym jest on,PATH
więc mogę go uruchomić z programu uruchamiającego i3. Ustaw go jako wykonywalny (chmod +x bt-connect-headset
), jeśli zamierzasz używać go jako polecenia.Ten skrypt został przetestowany tylko na aktualnym Ubuntu 16.04 od 28.09.2018.
źródło
2360344
zamiast tego użyłem klasy urządzenia0x240404
.Disconnect()
metody. Nie próbowałem, ale to pewnie bezpieczny zakład;).first unconnected bluetooth headset
: czy zawsze będzie używać zestawu słuchawkowego (jeśli jest zasilany) przed innymi urządzeniami, takimi jak głośniki bluetooth (bez względu na pozycję na liście)? Tak dzieje się w moim przypadku. - Ponadto, aby się rozłączyć, nie mogę tego zrobić, po prostu zmieniając ostatnią linię naadapter.Disconnect()
.)Po wypróbowaniu niektórych z powyższych (skrypty nie działały dla mnie) znalazłem następujące rozwiązanie.
Najpierw dowiedz się, jaki jest adres MAC urządzenia, z którym chcesz się połączyć
to wejdzie do powłoki i wyświetli listę wszystkich dostępnych urządzeń z adresem. („quit”, aby wyjść z powłoki i wrócić do monitu)
Następnie podłącz urządzenie Bluetooth: XX: XX: XX: XX: XX: XX:
rozłączyć
szukałem tego od dłuższego czasu - nic nie działało, poczułem ulgę, gdy się dowiedziałem. Myślałem, że inni też mogą chcieć o tym wiedzieć. :))
źródło
~$ bluetoothctl Agent registered [UE BOOM 2]#
. Potemdisconnect "UE BOOM 2" Device UE BOOM 2 not available
.bluetoothctl
? Musisz podać polecenia z adresem MAC urządzenia - który jest kombinacją wartości HEX w formacie XX: XX: XX: XX: XX: XX, gdzie X jest literą lub cyfrą.echo -e 'connect CC:AF:78:AF:59:03' | bluetoothctl
uzyskać:Agent registered [bluetooth]# connect CC:AF:78:AF:59:03 Device CC:AF:78:AF:59:03 not available