Gostaria de iniciar o meu music player (Clementine) quando meu fone de ouvido bluetooth se conectar ao meu computador. Como detecto a conexão do dispositivo bluetooth para executar um script para iniciar o player?
16
Eu não gostei da abordagem de votação, então eu pesquisei no bluez e no DBus. Acabei escrevendo o seguinte script:
#!/usr/bin/python
import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject
import subprocess
# ID of the device we care about
DEV_ID = '00_1D_54_AB_DC_72'
dbus_loop = DBusGMainLoop()
bus = dbus.SystemBus(mainloop=dbus_loop)
# Figure out the path to the headset
man = bus.get_object('org.bluez', '/')
iface = dbus.Interface(man, 'org.bluez.Manager')
adapterPath = iface.DefaultAdapter()
headset = bus.get_object('org.bluez', adapterPath + '/dev_' + DEV_ID)
# ^^^ I'm not sure if that's kosher. But it works.
def cb(iface=None, mbr=None, path=None):
if ("org.bluez.Headset" == iface and path.find(DEV_ID) > -1):
print 'iface: %s' % iface
print 'mbr: %s' % mbr
print 'path: %s' % path
print "\n"
print "matched"
if mbr == "Connected":
subprocess.call(["clementine", "--play"])
print 'conn'
elif mbr == "Disconnected":
subprocess.call(["clementine", "--stop"])
print 'dconn'
headset.connect_to_signal("Connected", cb, interface_keyword='iface', member_keyword='mbr', path_keyword='path')
headset.connect_to_signal("Disconnected", cb, interface_keyword='iface', member_keyword='mbr', path_keyword='path')
loop = gobject.MainLoop()
loop.run()
DEV_ID
antes da conexão .. mas e se você quiser ser notificado de todos os eventos de conexão?Para descobrir uma conexão Bluetooth estabelecida com sucesso, podemos executar
Por isso, a conexão SDB será testada para uma conexão com o endereço MAC fornecido. Pode levar um tempo considerável até que a navegação atinja o tempo limite com um erro como
Não sabemos o objetivo exato do seu script, mas é mais provável que você deseje reproduzir áudio via Clementine quando um fone de ouvido foi conectado.
Então pudemos ver se existe um coletor de áudio Bluetooth com
Onde
xx_xx_xx_xx_xx_xx
está o endereço MAC (:
precisa ser substituído por_
). A saída informará se há um coletor de áudio Bluetooth disponível ou nada, se não houver.Veja esta resposta sobre como mudar o áudio para este coletor.
Stream2ip
Com o stream2ip , podemos definir um comando do shell ou um script a ser executado após o estabelecimento de uma conexão. Também existe uma opção para iniciar automaticamente um media player suportado após o estabelecimento de uma conexão:
O Stream2ip também tentará reconectar o fluxo de reprodução atualmente em execução ao dispositivo de áudio Bluetooth, caso a conexão seja interrompida.
fonte
sdptool browse <device-id>
faça uma pesquisa até obter um código de retorno 0 e, em seguida, iniciar meu script, certo? Existe uma maneira de fazer isso sem pesquisar?@Erigami Sua resposta ajudou muito, mas para fazê-lo funcionar, eu faria algumas alterações. Estou usando o ubuntu 14.04.
Ainda assim, se isso não funcionar, use e monitore o dbus do sistema.
d-feet
pode ser usado ainda mais. É uma ferramenta GUI para assistir objetos dbus.fonte
Aqui está outro exemplo para monitorar todos os dispositivos Bluetooth. Não é necessário especificar um endereço MAC específico. Essa abordagem torna a configuração xinput persistente, mesmo quando o login / saída, suspensão / ativação e conectar / desconectar o seu dispositivo bluetooth.
Eu tenho um teclado Bluetooth compacto Thinkpad e desejo executar um comando xinput sempre que o teclado estiver conectado para ajustar a velocidade do trackpoint. Aqui estão os passos.
Faça o download do código do bluetooth-ruunner do Github . Créditos concedidos aqui, quem primeiro escreveu isso para o Raspberry Pi. Modifique a seção a seguir do código para executar seus comamnds personalizados.
No meu caso, isso equivale a ligar do terminal.
Salve a modificação. Tente executar seus scripts
Conecte e desconecte seu dispositivo Bluethooth. Você deve ver a mensagem correspondente impressa na tela.
Agora, torne seu arquivo executável e copie-o em um dos diretórios do seu
$PATH
, digamos~/bin/
.Agora, certifique-se de executar o script de qualquer lugar do terminal (verifique se ele está no seu caminho de pesquisa).
Inicie
Startup Applications
o menu ubuntu. Adicione seus scripts à inicialização.Agora, resta apenas um problema: no momento em que você faz o login, os scripts podem não capturar o primeiro evento do bluetooth. Isso ocorre porque o dispositivo bluetooth pode estar conectado antes que o script seja inicializado em segundo plano.
Para resolver isso, adicione seu comando personalizado diretamente no
Startup Applications
. No meu caso, é o seguinte comando:E agora você poderá desfrutar do seu dispositivo Bluetooth com o Ubuntu.
fonte
Você escreve "quando o fone de ouvido se conecta ao seu computador". Como isso é feito automaticamente? Quando você precisar acioná-lo manualmente, poderá transformá-lo em um script e, em seguida, executá-lo depois que a conexão for estabelecida. Foi o que fiz para definir o dispositivo de saída padrão para o meu receptor bluetooth (para que eu possa alterar o volume com as teclas de hardware):
Onde
bluetooth-connect
fica assim: https://github.com/sblask/dotfiles/blob/c39d37ad67947b358b4a079cb41ae6f9e4a081d8/.bin/bluetooth-connect.symlink Supõe que tudo foi emparelhado e está pronto para conexão. Você encontra o endereço MAC no blueman ou executandopacmd list-sinks | grep -e 'name:' -e 'index'
quando o dispositivo bluetooth está conectado. Você gostaria de correrbluetooth-connect && your-script
.your-script
só será executado quando a conexão foi estabelecida com sucesso.fonte