Como selecionar o dispositivo Bluetooth usando a linha de comando?

3

Eu tenho dois trackpads Bluetooth, um no trabalho e outro em casa. Existe uma maneira de selecionar um ou outro na linha de comando. Meu fluxo de trabalho atual está indo para o menu bluetooth, passando para casa ou escritório e clicando em Conectar , mas eu gostaria de poder fazer isso no terminal.

nachocab
fonte
Você pode esclarecer sua resposta para sabermos o que você já tentou na linha de comando? Caso contrário, você pode obter muitas sugestões / respostas desperdiçadas. Além disso, se for relevante, você pode querer expandir o motivo pelo qual deseja se conectar através do terminal - peço porque, para se locomover, pode haver outras opções melhores para contorná-lo, em vez de usar o terminal.
Monomeeth

Respostas:

2

AFIK, não há construído em utilitário de linha de comando para gerenciar conexões Bluetooth individuais.

Na verdade, a página man man blued (OS X Bluetooth daemon) afirma especificamente:

O daemon Bluetooth lida com transações SDP, gerenciamento de chaves de link,   e aceitação de conexão de entrada. Não pode ser usado diretamente pelo   do utilizador. (Ênfase minha)

Então, parece que você está limitado a carregar / descarregar o daemon BT a partir da linha de comando. Isso pode ser útil, no entanto. Se o seu dispositivo estiver ativo, o OS X se conectará ao dispositivo automaticamente na inicialização. Em outras palavras, ele se conectará automaticamente a qualquer dispositivo no intervalo quando o daemon for iniciado.

Obtenha o status do daemon Se nós emitirmos o comando defaults read /Library/Preferences/com.apple.Bluetooth.plist ControllerPowerState

Ele responde de volta com um 1 ou 0 dependendo se o daemon BT está em execução ou não; 1 sendo para cima, 0 para baixo.


Descarregar o daemon

Emitindo o comando sudo killall blued deve matar o daemon BT. A desvantagem aqui é que, se você tiver um teclado BT, ele irá parar de funcionar.


(Re) Iniciando o Daemon

Se nós emitirmos o comando: launchctl start com.apple.blued ele irá dizer ao daemon para (re) iniciar. Depois disso, ele deve detectar o dispositivo dentro do alcance.

Colocando tudo junto Juntando tudo como uma linha, podemos emitir o comando

sudo killall blued && sleep 3 && launchctl start com.apple.blued

O que isto faz é ....

  1. Mate o daemon
  2. Espera por 3 segundos para garantir que foi morto (você pode mudar isso se quiser)
  3. Inicia o daemon.

Agora para facilitar

Para tornar isso mais fácil, nós damos um alias . Você pode ligar para o pseudônimo como quiser; Eu usei apenas "btrestart" porque faz sentido neste contexto.

alias btrestart=sudo killall blued && sleep 3 && launchctl start com.apple.blued

Agora, em qualquer lugar no seu terminal shell, se você digitar btrestart ele emitirá o comando. Depois de tê-lo funcionando, você pode adicioná-lo ao seu .bash_profile para que o alias seja persistente nas reinicializações:

echo alias btrestart=sudo killall blued && sleep 3 && launchctl start com.apple.blued >> ~/.bash_profile


Um par de advertências

  1. Você terá que digitar sua senha todas as vezes. Launchctl é um comando do sistema e requer privilégios elevados.
  2. Todos de seus dispositivos BT será desconectado e reconectado. Se você tiver apenas um ou dois dispositivos BT, isso pode não ser um grande problema

Espero que isso faça você ir na direção certa ....

Allan
fonte
2

Eu acabei indo com esta versão modificada deste responda e criar dois arquivos, um com "Home Trackpad" e outro com "Office Trackpad". Funciona, mas demora alguns segundos para concluir

tell application "System Events" to tell process "SystemUIServer"
  set bt to (first menu bar item whose description is "bluetooth") of menu bar 1
  click bt
  tell (first menu item whose title is "Home Trackpad") of menu of bt
    click
    tell menu 1
      if exists menu item "Connect"
        click menu item "Connect"
        return "Connecting..."
      else
        click bt  -- close main dropdown to clean up after ourselves
        return "No connect button; is it already connected?"
      end if
    end tell
  end tell
end tell
nachocab
fonte
2
blued listall

Este comando do terminal irá dizer-lhe todos os dispositivos atualmente conhecidos. Você vai ter que descobrir (lendo nas entrelinhas) qual é qual (assumindo que você nomeou seus trackpads como algo "legal", como "casa" ou "trabalho", etc.)

Eu fiz isso e consegui:

2016-05-03 20:14:58.392 blued[3852:507] hostControllerOnline - Number of Paired devices = 3, List of Paired devices = (
    "d8-96-95-e0-3e-f8",
    "c4-2c-03-b7-87-57",
    "90-84-0d-e4-7b-41"
)
link key found for device: c4-2c-03-b7-87-57
2016-05-03 20:15:04.637 blued[3852:507] link key found for device: c4-2c-03-b7-87-57
2016-05-03 20:15:04.639 blued[3852:507] [setSystemPreference] syncs returns false
2016-05-03 20:15:04.639 blued[3852:507] Save link key for device: c4-2c-03-b7-87-57
link key found for device: 90-84-0d-e4-7b-41
2016-05-03 20:15:04.640 blued[3852:507] link key found for device: 90-84-0d-e4-7b-41
2016-05-03 20:15:04.640 blued[3852:507] Save link key for device: 90-84-0d-e4-7b-41
link key found for device: d8-96-95-e0-3e-f8
2016-05-03 20:15:04.640 blued[3852:507] link key found for device: d8-96-95-e0-3e-f8
2016-05-03 20:15:04.641 blued[3852:507] Save link key for device: d8-96-95-e0-3e-f8 
Create connection failed (0x4) for device: D8-96-95-E0-3E-F8

(então eu pressionei "ctrl-c" para cancelar)

Vamos supor que eu soubesse que "c4-2c-03-b7-87-57" é "casa" ....

Próximo:

blued join c4-2c-03-b7-87-57

Isso funciona no meu sistema (10.9.5). YMMV.

Você também pode ter que adicionar uma função kill, pois parece que blued não "fala bem" com o Terminal.

Então talvez um possível comando shell seria:

blued join c4-2c-03-b7-87-57
killall terminal
frank ankersly
fonte
Obrigado! Isso é exatamente o que eu precisava. Muito mais rápido do que fazê-lo com o applescript e não há necessidade de digitar uma senha sudo. Ao invés de killall Eu só apertei ctrl + c novamente
nachocab
Eu acho que falei cedo demais. Seu comando torna possível conectar e desconectar o último comando bluetooth ativado, mas a mudança de um para o outro falha com este erro: Create connection failed (0x4) for device: 7C-C3-A1-4D-CF-99
nachocab