Como posso remapear uma tecla de pressionamento de um fone de ouvido Bluetooth no OS X?

13

Eu tenho um fone de ouvido estéreo Bluetooth LG Tone (HBS 700) , e estou usando com o OS X Lion.

O fone de ouvido tem um botão de alternar tocar / pausar, mas ao contrário do botão de reprodução do meu teclado, que alterna reproduzir / pausar para o reprodutor de mídia VLC, se estiver em execução, o botão de reprodução do fone iniciará o iTunes se ainda não estiver abrir ou alternar entre reproduzir / pausar no iTunes, se já estiver aberto. Não irá alternar entre reproduzir / pausar em qualquer outro media player.

Alguém pode explicar qual evento do sistema está sendo acionado quando eu pressiono o play? É claro que algum daemon do sistema está escutando algo, desde que o iTunes é iniciado e pode interpretar os controles play / pause / next / prev bem ... Existe uma maneira de interceptar o evento keypress e remapear sua função? Eu gostaria que tivesse o mesmo comportamento que o botão de reprodução do teclado.

Obrigado pela sua ajuda!

    
por Stew 19.02.2013 / 22:50

2 respostas

7

Você está procurando o Daemon de controle remoto localizado em:

/System/Library/CoreServices/rcd.app

Pode ser desativado com o comando

sudo chmod a-x /System/Library/CoreServices/rcd.app/Contents/MacOS/rcd
killall -9 rcd

(Se você acabou de matá-lo, launchd irá reiniciá-lo novamente). Para reativá-lo,

sudo chmod a+x /System/Library/CoreServices/rcd.app/Contents/MacOS/rcd

Em seguida, efetue logout e volte a fazer o launchd iniciá-lo.

Se você é suficientemente ambicioso, você pode tentar editá-lo com um editor hexadecimal. Isso está fora do meu campo de conhecimento, mas tenho duas sugestões.

  1. Abrir o quicktime (em branco, nada nele) em segundo plano pode impedir que o daemon use o iTunes. Depende se o seu dispositivo usa o mesmo evento do sistema.

  2. Como alternativa, existe um utilitário gratuito localizado no seguinte link que corrige o daemon para você. Depois de executá-lo, o daemon usará o programa ativo, em vez do iTunes. No entanto, isso não fará o remapeamento do VLC como o programa a ser aberto quando você pressionar play. Ele é projetado para as teclas de mídia do teclado, mas acredito que o SO veja o botão do seu LG Tone como o mesmo evento do sistema. Esse link: link

Finalmente, posso dizer que a Apple ainda não forneceu uma maneira simples de alterar as configurações do controle remoto. Isso é lamentável, pois esta é uma pergunta comum sobre as teclas de mídia nos teclados e outros controles em dispositivos como o seu. Em vez de fornecer uma solução, parece que eles fizeram alterações no sistema operacional no passado para garantir que o iTunes seja o programa usado por esse daemon. Infelizmente, é improvável que haja uma solução melhor do que isso em breve.

    
por 25.02.2013 / 08:26
3

Primeiro, você precisará de um aplicativo de remapeamento de teclado de terceiros chamado Karabiner (antigo KeyRemap4MacBook). O aplicativo é um pouco hostil, mas em teoria você só precisa fazer isso uma vez. Também atualmente não funciona no MacOS Sierra ... então tenha isso em mente.

Aqui vamos nós ...

Instalar o Karabiner

link

Correr Mosquetão

Você deve conceder algumas permissões de acessibilidade se quiser todos os recursos.

Use o aplicativo auxiliar "EventViewer" para obter códigos de teclas

Abra o EventViewer para obter IDs de códigos de chaves / aplicativos / dispositivos:

VáparaaguiaPrincipale,emseguida,pressionea(s)tecla(s)doseuteclado,docontroleremotoBluetooth,etc.,quedesejaremapear.Nestecaso,vocêpodevercódigosdeteclaparaMedia-ForwardeMedia-BacknomeucontroleremotoBluetoothSatechi(queeuqueromapearnovamenteparaasteclasdesetaesquerda/direita).

Váemfrenteecopiepara"pasteboard" e cole-o em um documento de texto para mais tarde. Agora, dependendo do seu caso de uso, você pode acessar o aplicativo ou a guia Dispositivos.

Se você quiser limitar o remapeamento de chaves a aplicativos específicos, crie uma regra de mapeamento que seja para um ID de aplicativo específico (por exemplo, google chrome). Assim, você acessaria a guia do aplicativo e obteria o ID do aplicativo para seu aplicativo de interesse (a ser usado posteriormente quando criamos a regra).

Nomeucaso,euqueroapenasremapearessaschavesnomeucontroleremotoSatechibluetoothenãoqueroestragarcomofuncionamasteclasdomeuteclado...entãoeuquerofazerumaregraespecíficadodispositivo.EntãoeuvouparaaabaDispositivos.

Nota!!!Paraaplicativosedispositivos,vocêtambémdevecopiarecolaremumarquivodetextoparaterasstringsdedispositivo/IDcompletasparausoemnossaregra.

Construindoasregras

Agoraquevocêtemcódigosdetecla,IDsdeaplicativose/oudispositivoscopiadosecoladosemumarquivodetextoparareferênciaposterior,épossívelfecharoEventViewerevoltarparaoaplicativoprincipal.

Asregraspadrãonãosãomuitointeressantesparanós,porissoprecisamoscriarumaregrapersonalizada,maseditandoprivate.xml

Issoapenasiniciaráumajaneladofindermostrandoprivate.xml.Váemfrenteeabraoprivate.xmlnoseueditordetextofavorito.

Agoravocêestáprontoparacriarregras...

Adocumentaçãosobreoformatodestearquivoestáaqui: link

Para cada <item> , você precisa de mínimo <name> <identifier> e <autogen> . Nome é apenas um nome para você. O identificador também é feito por você, mas deve ser exclusivo. autogen é onde você especifica a regra / mapeamento (ou seja, a chave de interesse deve enviar as chaves foo bar).

De mais interesse você pode especificar que a regra só é executada para aplicativos ativos específicos (acho que é aqui que entram as permissões de acessibilidade do MacOS ... então o Karabiner pode determinar a janela ativa). Isso é feito com <only> .

Também de interesse (para mim) é <device_only> , o que me permite fazer uma regra apenas para um teclado específico (ou seja, meu controle remoto bluetooth satechi). Veja o link acima para mais detalhes.

De qualquer forma. Use os IDs de código de chave, IDs de dispositivos e IDs de aplicativos que você obteve do EventViewer para criar suas regras personalizadas.

O meu parece com isto:

<?xml version="1.0"?>
<root>
    <item>
        <name>Satechi Right</name>
        <identifier>private.satechi.right</identifier>
        <device_only>DeviceVendor::RawValue::0x05ac,DeviceProduct::RawValue::0x023c</device_only>
        <autogen>__KeyToKey__ ConsumerKeyCode::MUSIC_NEXT_17, KeyCode::CURSOR_RIGHT</autogen>
    </item>
    <item>
        <name>Satechi Left</name>
        <identifier>private.satechi.left</identifier>
        <device_only>DeviceVendor::RawValue::0x05ac,DeviceProduct::RawValue::0x023c</device_only>
        <autogen>__KeyToKey__ ConsumerKeyCode::MUSIC_PREV_18, KeyCode::CURSOR_LEFT</autogen>
    </item>
</root>

Resumo: 2 regras. Satechi apenas dispositivo remoto Bluetooth. O botão "next" da mídia é mapeado para a seta para a direita e o botão "prev" para a seta para a esquerda. Aplica-se a todas as aplicações.

Carregue as regras

Salve seu arquivo XML. Volte para o aplicativo Karabiner. Vá para a guia "Alterar chave". Clique em "Recarregar XML" no canto superior esquerdo. Suas novas regras devem aparecer agora. Marque as caixas para habilitar as regras. Teste se seus novos mapeamentos de teclas funcionam conforme o esperado.

O aplicativo definitivamente não é amigável, mas me permitiu configurar exatamente o que eu queria muito facilmente, uma vez que eu entendi as opções. O Karabiner é um pouco buggy ... Alguns eventos pararam de aparecer no visualizador de eventos, mesmo que as regras de remapeamento ainda estivessem funcionando ... o restart ajuda.

    
por 19.09.2016 / 14:47