Onde as chaves de link bluetooth estão armazenadas no Ubuntu 14.10?

10

Estou tentando definir chaves de link bluetooth específicas para um dispositivo no Ubuntu 14.10, mas não consigo encontrar onde elas estão armazenadas.
O objetivo é ter um mouse bluetooth funcionando no Ubuntu e no Windows sem precisar emparelhá-lo depois de trocar de sistema operacional.
Todas as respostas que encontrei no AskUbuntu afirmam que as chaves estão armazenadas /var/lib/bluetooth/<mac_address>/linkkeyse isso costumava ocorrer pelo menos até as 13.10, mas na 14.10 esse arquivo está ausente de uma instalação limpa da área de trabalho e a criação manual não tem efeito, é ignorada por bluetoothd.

EDIT: Parece que o mouse não emite uma solicitação de emparelhamento e as chaves de link não são armazenadas neste caso. No entanto, conectar o mouse no Windows e reiniciar o Ubuntu causa uma falha na conexão bluetooth (e o mouse precisa ser removido e adicionado novamente à lista de dispositivos bluetooth); portanto, há definitivamente alguma troca / autenticação de chave que impede mouse seja compartilhado nos dois sistemas operacionais. A questão permanece: como forçar o bluetoothd a salvar e usar as teclas de link salvas ao conectar este mouse?

Detalhes de hardware:

  • Rato para notebook Microsoft Bluetooth 5000
  • 413c: 8161 Dell Computer Corp. Wireless 365 Bluetooth (Broadcom BCM2046B1)

Os dois logs abaixo mostram que, para um dispositivo emparelhado (telefone celular), as chaves são armazenadas no arquivo linkkeys; esse não é o caso do mouse. Eu sei que versões mais antigas do bluetoothd também costumavam salvar as chaves de link para mouses, porque existem muitas respostas / tutoriais aqui no askubuntu e ubuntuforums sobre como copiar as chaves de link do Windows para o Ubuntu com o objetivo específico de compartilhar um mouse entre os dois sistemas operacionais.

Aqui está o log bluetoothd para a descoberta do mouse e a configuração da conexão:

    bluetoothd[15615]: plugins/mgmtops.c:mgmt_start_discovery() index 0
    bluetoothd[15615]: Discovery session 0x7feb52b14130 with :1.137 activated
    bluetoothd[15615]: src/adapter.c:session_ref() 0x7feb52b14130: ref=1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 10 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() 
    bluetoothd[15615]: plugins/mgmtops.c:start_discovery_complete() hci0 type 1 status 0
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 8 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_discovering() Controller 0 type 1 discovering 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 25 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_device_found() hci0 addr DE:AD:BE:EF:00:00, rssi -43 flags 0x0003 eir_len 5
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_confirm_name() hci0 bdaddr DE:AD:BE:EF:00:00 name_known 0
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 16 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() 
    bluetoothd[15615]: Unknown command complete for opcode 37
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 61 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_device_found() hci0 addr DE:AD:BE:EF:00:00, rssi -43 flags 0x0000 eir_len 41
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 8 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_discovering() Controller 0 type 1 discovering 0
    bluetoothd[15615]: src/adapter.c:adapter_set_discovering() hci0 restarting discovery, disc_sessions 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_start_discovery() index 0
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 10 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() 
    bluetoothd[15615]: plugins/mgmtops.c:start_discovery_complete() hci0 type 1 status 0
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 8 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_discovering() Controller 0 type 1 discovering 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 25 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_device_found() hci0 addr DE:AD:BE:EF:00:00, rssi -43 flags 0x0003 eir_len 5
    bluetoothd[15615]: src/adapter.c:session_unref() 0x7feb52b14130: ref=0
    bluetoothd[15615]: src/adapter.c:session_remove() Discovery session 0x7feb52b14130 with :1.137 deactivated
    bluetoothd[15615]: src/adapter.c:session_remove() Stopping discovery
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_stop_discovery() index 0
    bluetoothd[15615]: Stopping discovery
    bluetoothd[15615]: src/adapter.c:create_device() DE:AD:BE:EF:00:00
    bluetoothd[15615]: src/adapter.c:adapter_create_device() DE:AD:BE:EF:00:00
    bluetoothd[15615]: src/device.c:device_create() Creating device /org/bluez/15615/hci0/dev_DE:AD:BE:EF:00:00
    bluetoothd[15615]: src/device.c:btd_device_ref() 0x7feb52b15680: ref=1
    bluetoothd[15615]: src/device.c:device_set_temporary() temporary 1
    bluetoothd[15615]: src/device.c:btd_device_ref() 0x7feb52b15680: ref=2
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 10 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() 
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() stop_discovery complete
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 8 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_discovering() Controller 0 type 1 discovering 0
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 65 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_device_connected() hci0 device DE:AD:BE:EF:00:00 connected eir_len 46
    bluetoothd[15615]: src/adapter.c:adapter_get_device() DE:AD:BE:EF:00:00
    bluetoothd[15615]: src/device.c:device_probe_drivers() Probing drivers for DE:AD:BE:EF:00:00
    bluetoothd[15615]: input/manager.c:hid_device_probe() path /org/bluez/15615/hci0/dev_DE:AD:BE:EF:00:00
    bluetoothd[15615]: src/device.c:btd_device_ref() 0x7feb52b15680: ref=3
    bluetoothd[15615]: input/device.c:input_device_new() Registered interface org.bluez.Input on path /org/bluez/15615/hci0/dev_DE:AD:BE:EF:00:00
    bluetoothd[15615]: src/device.c:device_set_temporary() temporary 0
    bluetoothd[15615]: src/device.c:btd_device_unref() 0x7feb52b15680: ref=2

Aqui está o registro bluetoothd para o emparelhamento de um telefone celular (o usuário é solicitado a validar um código mostrado nos dois dispositivos):

    bluetoothd[15615]: plugins/mgmtops.c:mgmt_start_discovery() index 0
    bluetoothd[15615]: Discovery session 0x7feb52b14ca0 with :1.138 activated
    bluetoothd[15615]: src/adapter.c:session_ref() 0x7feb52b14ca0: ref=1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 10 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() 
    bluetoothd[15615]: plugins/mgmtops.c:start_discovery_complete() hci0 type 1 status 0
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 8 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_discovering() Controller 0 type 1 discovering 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 64 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_device_found() hci0 addr DE:AD:BE:EF:01:01, rssi -52 flags 0x0000 eir_len 44
    bluetoothd[15615]: src/adapter.c:session_unref() 0x7feb52b14ca0: ref=0
    bluetoothd[15615]: src/adapter.c:session_remove() Discovery session 0x7feb52b14ca0 with :1.138 deactivated
    bluetoothd[15615]: src/adapter.c:session_remove() Stopping discovery
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_stop_discovery() index 0
    bluetoothd[15615]: Stopping discovery
    bluetoothd[15615]: src/adapter.c:adapter_create_device() DE:AD:BE:EF:01:01
    bluetoothd[15615]: src/device.c:device_create() Creating device /org/bluez/15615/hci0/dev_DE:AD:BE:EF:01:01
    bluetoothd[15615]: src/device.c:btd_device_ref() 0x7feb52b17cd0: ref=1
    bluetoothd[15615]: src/device.c:device_set_temporary() temporary 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_create_bonding() hci0 bdaddr DE:AD:BE:EF:01:01 io_cap 0x01
    bluetoothd[15615]: src/device.c:bonding_request_new() Requesting bonding for DE:AD:BE:EF:01:01
    bluetoothd[15615]: src/device.c:bonding_request_new() Temporary agent registered for DE:AD:BE:EF:01:01 at :1.138:/org/bluez/agent/wizard
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 10 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() 
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() stop_discovery complete
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 8 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_discovering() Controller 0 type 1 discovering 0
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 37 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_device_connected() hci0 device DE:AD:BE:EF:01:01 connected eir_len 18
    bluetoothd[15615]: src/adapter.c:adapter_get_device() DE:AD:BE:EF:01:01
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 18 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_user_confirm_request() hci0 DE:AD:BE:EF:01:01 confirm_hint 0
    bluetoothd[15615]: src/adapter.c:adapter_get_device() DE:AD:BE:EF:01:01
    bluetoothd[15615]: src/device.c:new_auth() Requesting agent authentication for DE:AD:BE:EF:01:01
    bluetoothd[15615]: src/agent.c:agent_request_confirmation() Calling Agent.RequestConfirmation: name=:1.138, path=/org/bluez/agent/wizard, passkey=436733
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_confirm_reply() index 0 addr DE:AD:BE:EF:01:01 success 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 16 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() 
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() user_confirm_reply complete
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 32 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_new_link_key() Controller 0 new key of type 5 pin_len 0
    bluetoothd[15615]: src/adapter.c:adapter_get_device() DE:AD:BE:EF:01:01
    bluetoothd[15615]: src/event.c:btd_event_link_key_notify() storing link key of type 0x05
    bluetoothd[15615]: src/device.c:device_set_bonded() bonded 1
    bluetoothd[15615]: src/device.c:device_set_temporary() temporary 0
    bluetoothd[15615]: src/adapter.c:adapter_get_device() DE:AD:BE:EF:01:01
    bluetoothd[15615]: src/device.c:device_bonding_complete() bonding 0x7feb52b2d270 status 0x00
    bluetoothd[15615]: src/device.c:device_bonding_complete() Proceeding with service discovery
    bluetoothd[15615]: src/device.c:btd_device_ref() 0x7feb52b17cd0: ref=2
    bluetoothd[15615]: src/agent.c:agent_release() Releasing agent :1.138, /org/bluez/agent/wizard
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() cond 1
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_event() Received 16 bytes from management socket
    bluetoothd[15615]: plugins/mgmtops.c:mgmt_cmd_complete() 
    bluetoothd[15615]: plugins/mgmtops.c:pair_device_complete() hci0 DE:AD:BE:EF:01:01 pairing complete status 0
    bluetoothd[15615]: src/adapter.c:adapter_get_device() DE:AD:BE:EF:01:01
    bluetoothd[15615]: src/device.c:device_bonding_complete() bonding (nil) status 0x00
ATAKAMA
fonte
Eu tenho 14,04 e que o diretório existe para mim, mas o endereço MAC é o único para o meu Bluetooth interno e linkkeys está vazia ...
Fabby
Eu tinha 14.04 e atualizei para 14.10, agora não consigo encontrar o diretório. Eu tenho o mesmo problema que você, querendo definir a chave de link para um mouse BT.
Alasjo 28/11

Respostas:

3

Depois de um tempo, finalmente resolvi o problema que estava enfrentando. Ainda não encontrei uma resposta para a pergunta inicial (não consegui determinar onde as chaves de link estão armazenadas para essa combinação bluez / adaptador / periférico específica), mas descobri que o bluez lerá o arquivo linkkeys, se houver, e usará as chaves no arquivo.

Portanto, mesmo que as chaves de link não possam ser gravadas no arquivo após o emparelhamento, é possível substituí-las adicionando-as manualmente ao arquivo de chaves de link.

É importante que o tipo de chave seja definido corretamente, caso contrário, a chave será ignorada.

Para referência, o tipo de chave que funcionou no meu caso é mostrado aqui: /ubuntu//a/246791/352576

ATAKAMA
fonte
1

O Ubuntu 13.10 usa bluez 4.98, 14.04 e 14.10 usa 4.101

Ambas as versões foram compiladas com a mesma opção (--localstatedir = / var)

Estou usando o 14.04 e os arquivos estão lá. Se eu remover ou adicionar um dispositivo, o arquivo / var / lib / bluetooth / (myadapteraddress) / linkkeys será atualizado de acordo.

Fiz um teste em um sistema 14.10, adicionei um dispositivo BT e o arquivo / var / lib / bluetooth / (adapteraddress) / linkkeys foi criado

Talvez você esteja usando uma versão mais recente do bluez.

Esquema para novas versões do bluez (5 em diante, eu acho):

/var/lib/bluetooth/<adapter address>/<remote device address>/info

Na documentação do armazenamento de configurações para a nova versão bluez, encontrei o seguinte:

http://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/settings-storage.txt

...

Storage directory structure

There is one directory per adapter, named by its Bluetooth address, which
contains:
 - a settings file for the local adapter
 - an attributes file containing attributes of supported LE services
 - a cache directory containing:
    - one file per device, named by remote device address, which contains device name
 - one directory per remote device, named by remote device address, which contains:
    - an info file
- an attributes file containing attributes of remote LE services
- a ccc file containing persistent Client Characteristic Configuration
  (CCC) descriptor information for GATT characteristics

So the directory structure is:

/var/lib/bluetooth/<adapter address>/

    ./settings
    ./attributes
    ./cache/
        ./<remote device address>
        ./<remote device address>
        ...
    ./<remote device address>/
        ./info
        ./attributes
        ./ccc
    ./<remote device address>/
        ./info
        ./attributes
    ...

...

Info file format

...

[LinkKey] group contains:

  Key           String      Key in hexadecimal format

  Type          Integer     Type of link key

  PINLength     Integer     Length of PIN

...

De qualquer forma, parece que o bluez deve armazenar os arquivos em / var / lib / bluetooth

Se você usar este comando

bluetoothd --version

você recebe 4.101?

J.Serra
fonte
1
Sim, a versão bluetoothd é 4.101. A var/lib/bluetoooth/<adapter address>pasta existe, mas não há arquivo de chaves de link nem subdiretório. O dispositivo bluetooth está emparelhado e funcionando, portanto as chaves são armazenadas em algum lugar, mas definitivamente não estão lá. Talvez a versão do Ubuntu armazene as chaves em outro lugar e estou tentando descobrir onde. Estou usando uma instalação padrão da área de trabalho 14.10, emparelhamento feito através do indicador bluetooth, nada sofisticado.
ATAKAMA
1
Apenas me ocorreu que alguns adaptadores bluetooth possuem armazenamento de chave de hardware. Seria possível para o bluetoothd do Ubuntu armazenar as chaves de link apenas na memória do adaptador e não no sistema de arquivos? O adaptador é: 413c: 8160 Dell Computer Corp. Wireless 365 Bluetooth com base no Broadcom BCM2046
ATAKAMA
Você já tentou emparelhar outro dispositivo, um telefone celular? ... Mais tarde tentarei em outro PC com 14.10
J.Serra
Acabei de emparelhar um telefone móvel que nunca foi emparelhado com este adaptador (nem no Ubuntu nem no Windows). O arquivo linkkeys foi criado. Então tentei emparelhar o mouse novamente, ele emparelhado, mas sua chave de link não foi adicionada ao arquivo. Como faço para o bluetoothd ler a chave de link no arquivo e não usar a do adaptador (que é o que presumivelmente faz)?
ATAKAMA
Isso é muito curioso ... Talvez se você eliminar o dispositivo no Windows, o ubuntu cria o arquivo.
J.Serra
0

/ var / lib / bluetooth / {bluetoothaddr} / linkkeys

Onde {bluetoothaddr} é sua interface bluetooth (você deve ter apenas uma, ela se parece com um endereço mac)

O formato do arquivo é {remoteaddr} {chave de link de 128 bits} {type}.

20:12:03:22:EE:0E C21D3A69DEA0A8C629F1BB5D12AEEA79 4 0
00:18:94:68:3E:90 EC02519ED656DB87B7F152E899F8A810 0 4
00:21:3F:3E:2E:6C 948A0EF91FA8E9EB9032CE775BF8E0B0 0 4
Xavier
fonte
Por favor, leia o texto da pergunta com atenção. Esse arquivo não existe mais em uma instalação 14.10. Não há arquivo de linkkeys em nenhum lugar do sistema de arquivos. As chaves são armazenadas em outro lugar. A questão é onde.
ATAKAMA
No meu novo laptop onde eu instalei (sem atualização) 14.10, ainda existe o arquivo como eu o descrevi. bluetoothd 4.101. Quais são as mensagens no syslog quando você tenta emparelhar um novo dispositivo?
Xavier
Editei a pergunta e adicionei alguns registros para comparar a configuração de descoberta e conexão deste mouse versus a configuração de conexão de um telefone celular, cujas chaves de link foram salvas.
ATAKAMA
0

No Debian, Jessie e eu assumimos o Ubuntu também, você pode definir manualmente o PIN para usar.

  1. Faça o que este post /ubuntu//a/246791/352576 descreve para obter sua chave do Windows.
  2. seu /var/lib/bluetooth/XX:XX:XX:XX:XX:AA(onde XX: ... :AAestá o mac do adaptador BT do seu PC) deve conter um diretório com o mac do mouse / teclado BT (eu o representarei como XX: ... :BF, e os arquivos de configuração, e configurações).
  3. dentro XX: ... BFexiste um arquivo de infopropriedade root, com permissões rw para root. Nenhuma outra permissão .-- o conteúdo deve ser:

    [LinkKey] 
    Key=A7XXXXXXXXXXXXXXXXXXXXXXXXXXXX89 
    Type=4
    PINLength=0
    
    [General]
    Name=yourMouseName
    Class=0x002580
    SupportedTechnologies=BR/EDR;
    Trusted=true
    Blocked=false
    Services=00001000-0000-1000-8000-00805f9b34fb;00001124-0000-1000-8000-00805f9b34fb;00001200-0000-1000-8000-00805f9b34fb;
    
    [DeviceID]
    Source=2
    Vendor=1133
    Product=45069
    Version=1792
    

    Observe que o comprimento da chave tem 16 bytes.

colar arquivos linkkeys nesses diretórios não me ajudou - embora eu os tenha deixado lá em boa medida.

Jonathan
fonte