Conecta-se ao dispositivo bluetooth a partir da linha de comando

17

Plano de fundo: estou usando meu fone de ouvido bluetooth como saída de áudio. Consegui fazê-lo funcionar com a longa lista de instruções na documentação da comunidade BluetoothHeadset , e automatizei o processo de ativação da fone de ouvido como saída de áudio padrão em um script, graças a outra pergunta .

No entanto, como uso o fone de ouvido bluetooth tanto no telefone quanto no computador (e o fone de ouvido não suporta duas conexões de entrada) para que o telefone não "roube" a conexão quando o aparelho está ligado, fone de ouvido em um modo de descoberta ao conectar-se ao computador (o telefone pode se conectar a ele automaticamente).

Portanto, mesmo que o fone de ouvido esteja emparelhado corretamente e em autoconectar o cenário "normal", sempre tenho que usar o pequeno ícone do bluetooth na área de notificação para conectar-se ao meu dispositivo (ver captura de tela).

O que eu quero evitar: Esta GUI para conectar a um dispositivo Bluetooth conhecido e emparelhado :

O que eu quero em vez disso: Eu quero fazer com que o bluetooth faça exatamente o que o clique do item de conexão na GUI faz, usando apenas a linha de comando. Eu quero usar a linha de comando para que eu possa fazer um único atalho de tecla para a ação, e não precisarei navegar na GUI toda vez que eu quiser estabelecer uma conexão com o dispositivo.

A pergunta: Como posso tentar conectar a um dispositivo bluetooth específico, conhecido e emparelhado da linha de comando?

Mais uma questão: Como sei se a conexão foi bem sucedida ou não?

    
por Ilari Kajaste 10.06.2011 / 10:23

2 respostas

8

daemon Bluetooth

Na instalação padrão, um daemon ( bluetoothd ) é executado em segundo plano (executado a partir do arquivo /etc/init.d/bluetooth ). Esse daemon toma cuidado ao reconhecer e conectar-se a dispositivos bluetooth conhecidos e pode ser cofigurado com arquivos de configuração em /etc/bluetooth . Para autoconectar um fone de ouvido, a seguinte linha em audio.conf deve ser descomentada (remover # ):

AutoConnect=true

Para reiniciar o tipo de daemon sudo /etc/init.d/bluetooth restart .

Observação: O uso da ferramenta de linha de comando sudo hcitool cc <MAC-Adress> não levou a uma conexão estável com um dispositivo conhecido no ambiente de teste aqui quando o daemon estava em execução.

DBus

Para conectar um fone de ouvido desconectado, mas presente fisicamente e emparelhado, podemos usar o D-Bus a partir de um script . Aqui está um exemplo em python:

#!/usr/bin/python
# Toggles headset connection

import dbus
from dbus.mainloop.glib import DBusGMainLoop

dbus_loop = DBusGMainLoop()
bus = dbus.SystemBus(mainloop=dbus_loop)

#Get dbus interface for headset
manager = bus.get_object('org.bluez', '/')
iface_m = dbus.Interface(manager, 'org.bluez.Manager')
adapterPath = iface_m.DefaultAdapter()
adapter = bus.get_object('org.bluez', adapterPath)
iface_a = dbus.Interface(adapter, 'org.bluez.Adapter')
devicePath = iface_a.ListDevices()[0]  # assuming first device
device = bus.get_object('org.bluez', devicePath)
iface_h = dbus.Interface(device, 'org.bluez.Headset')

#Check state of connection
connected = iface_h.IsConnected()
print 'Toggling connection. Please wait'
# toggle connection
if not connected:
    try:
        iface_h.Connect()
        print 'Connecting: ', devicePath
    except:
        print 'Device not found'
else:
    iface_h.Disconnect()
    print 'Disconnecting: ', devicePath

Caso tenhamos mais de um dispositivo Bluetooth, teremos que adaptar o devicePath apropriadamente, é claro. O exemplo acima conectará um Headset . Altere a interface para um protocolo diferente para qualquer outro serviço (por exemplo, AudioSink ).

Pulseaudio

Se você souber o endereço MAC do seu dispositivo Bluetooth, poderá conectá-lo como um coletor de saída para o pulseaudio:

pacmd set-default-sink bluez_sink.xx_xx_xx_xx_xx_xx

Onde xx_xx_xx_xx_xx_xx é o endereço MAC (substitua ':' por '_' para que o pulseaudio o reconheça).

Veja também esta resposta para mais detalhes.

    
por Takkat 10.06.2011 / 10:43
5

Eu uso este script para conectar meu dispositivo de áudio Bluetooth. Se o fone de ouvido já estiver emparelhado, você poderá conectar seu fone de ouvido da mesma maneira usando org.bluez.Headset.Connect / Disconnect no lugar de org.bluez.Audiosink.Connect / Desconectar .

#!/bin/bash

MAC_ADD="C8:84:47:10:11:CD"

MAC_ADD="dev_${MAC_ADD//:/_}"
BT_ADAPTER='dbus-send --system --print-reply --dest=org.bluez / \
org.bluez.Manager.DefaultAdapter|awk '/object path/ {print }''

BT_ADAPTER="${BT_ADAPTER//\"/}/$MAC_ADD"
echo "Connecting to $BT_ADAPTER..."

if [ "" == "on" ]; then
    dbus-send --print-reply --system --dest=org.bluez $BT_ADAPTER org.bluez.AudioSink.Connect
elif [ "" == "off" ]; then
    dbus-send --print-reply --system --dest=org.bluez $BT_ADAPTER org.bluez.AudioSink.Disconnect
fi

HTH!

    
por doublerebel 23.02.2013 / 17:50