¿Dónde se almacenan las claves de enlace bluetooth en Ubuntu 14.10?

10

Estoy tratando de configurar claves de enlace bluetooth específicas para un dispositivo en Ubuntu 14.10 pero no puedo encontrar dónde están almacenadas.
El propósito es tener un mouse bluetooth funcionando en Ubuntu y Windows sin tener que volver a emparejarlo después de cambiar los sistemas operativos.
Todas las respuestas que encontré en AskUbuntu afirman que las claves están almacenadas /var/lib/bluetooth/<mac_address>/linkkeysy este solía ser el caso al menos hasta las 13.10, pero en 14.10 este archivo falta en una instalación de escritorio limpia y su creación manual no tiene ningún efecto, es ignorado por bluetoothd

EDITAR: Parece que el mouse no emite una solicitud de emparejamiento y las teclas de enlace no se almacenan en este caso. Sin embargo, conectar el mouse en Windows y luego reiniciar en Ubuntu hace que falle la conexión bluetooth (y el mouse debe ser eliminado y vuelto a agregar a la lista de dispositivos bluetooth), por lo que definitivamente hay algún intercambio de claves / autenticación que impide el mouse no se comparte en ambos SO. La pregunta sigue siendo, ¿cómo puedo forzar bluetoothd para guardar y usar las teclas de enlace guardadas al conectar este mouse?

Detalles de hardware:

  • Microsoft Bluetooth Notebook Mouse 5000
  • 413c: 8161 Dell Computer Corp. Wireless 365 Bluetooth (Broadcom BCM2046B1)

Los dos registros a continuación muestran que para un dispositivo compatible (teléfono móvil) las claves se almacenan en el archivo linkkeys; Este no es el caso del ratón. Sé que las versiones anteriores de bluetoothd también se usaban para guardar las teclas de enlace para los ratones, porque hay muchas respuestas / tutoriales aquí en askubuntu y ubuntuforums sobre cómo copiar las llaves de enlace de Windows a Ubuntu con el propósito específico de compartir un mouse entre los dos sistemas operativos.

Aquí está el registro bluetoothd para el descubrimiento del mouse y la configuración de la conexión:

    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

Aquí está el registro bluetoothd para el emparejamiento de un teléfono móvil (se le pide al usuario que valide un código que se muestra en ambos 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
fuente
Tengo 14.04 y el directorio existe para mí, pero la dirección MAC es la de mi bluetooth interno y las teclas de enlace están vacías ...
Fabby
Tenía 14.04 y actualicé a 14.10, ahora no puedo encontrar el directorio. Tengo el mismo problema que tú, queriendo configurar la clave de enlace para un mouse BT.
Alasjo

Respuestas:

3

Después de un tiempo, finalmente resolví el problema que estaba enfrentando. Todavía no he encontrado una respuesta a la pregunta inicial (no pude determinar dónde están almacenadas las claves de enlace para esta combinación particular bluez / adaptador / periférico) pero descubrí que bluez leerá el archivo linkkeys, si está presente, y usará las claves en el archivo.

Entonces, aunque las claves de enlace podrían no escribirse en el archivo después del emparejamiento, es posible anular esas claves agregándolas manualmente al archivo linkkeys.

Es importante que el tipo de clave esté configurado correctamente; de ​​lo contrario, la clave se ignorará.

Como referencia, el tipo de clave que funcionó en mi caso se muestra aquí: /ubuntu//a/246791/352576

ATAKAMA
fuente
1

Ubuntu 13.10 usa bluez 4.98, 14.04 y 14.10 usa 4.101

Ambas versiones fueron compiladas con la misma opción (--localstatedir = / var)

Estoy usando 14.04 y los archivos están allí y si elimino o agrego un dispositivo, el archivo / var / lib / bluetooth / (myadapteraddress) / linkkeys se actualiza en consecuencia.

Hice una prueba en un sistema 14.10, agregué un dispositivo BT y se creó el archivo / var / lib / bluetooth / (adapteraddress) / linkkeys

Tal vez estás usando una versión más nueva de bluez.

Esquema para nuevas versiones de bluez (5 en adelante, creo):

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

En la documentación del almacenamiento de configuraciones para la nueva versión de bluez, encontré esto:

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

...

En cualquier caso, parece que bluez debería almacenar los archivos en / var / lib / bluetooth

Si usas este comando

bluetoothd --version

obtienes 4.101?

J.Serra
fuente
1
Sí, la versión bluetoothd es 4.101. La var/lib/bluetoooth/<adapter address>carpeta existe pero no hay un archivo linkkeys ni un subdirectorio. El dispositivo bluetooth está emparejado y funciona, por lo que las claves se almacenan en algún lugar pero definitivamente no allí. Tal vez la versión de Ubuntu almacena las claves en otro lugar y estoy tratando de averiguar dónde. Estoy usando una instalación de escritorio estándar 14.10, emparejamiento hecho a través del indicador bluetooth, nada lujoso.
ATAKAMA
1
Se me ocurrió que algunos adaptadores Bluetooth tienen almacenamiento de clave de hardware. ¿Sería posible que el bluetoothd de Ubuntu almacene las claves de enlace solo en la memoria del adaptador y no en el sistema de archivos? El adaptador es: 413c: 8160 Dell Computer Corp. Wireless 365 Bluetooth basado en Broadcom BCM2046
ATAKAMA
¿Has intentado emparejar otro dispositivo, un teléfono celular? ... Más tarde lo intentaré en otra PC con 14.10
J.Serra
Acabo de emparejar un teléfono móvil que nunca estuvo emparejado con este adaptador (ni en Ubuntu ni en Windows). Se creó el archivo linkkeys. Luego traté de emparejar el mouse nuevamente, se emparejó, pero su clave de enlace no se agregó al archivo. ¿Cómo obtengo bluetoothd para leer la clave de enlace en el archivo y no usar la del adaptador (que es lo que presumiblemente hace)?
ATAKAMA
Eso es muy curioso ... Tal vez si eliminas el dispositivo en Windows, ubuntu crea el archivo.
J.Serra
0

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

Donde {bluetoothaddr} es su interfaz bluetooth (debe tener solo una, parece una dirección mac)

El formato del archivo es {remoteaddr} {clave de enlace 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
Javier
fuente
Por favor lea el texto de la pregunta cuidadosamente. Ese archivo ya no existe en una instalación 14.10. No hay ningún archivo linkkeys en ninguna parte del sistema de archivos. Las claves se almacenan en otro lugar. La pregunta es dónde.
ATAKAMA
En mi nueva computadora portátil donde instalé (sin actualización) 14.10, todavía está el archivo como lo describí. bluetoothd 4.101. ¿Cuáles son los mensajes en syslog cuando intenta emparejar un nuevo dispositivo?
Xavier
Edité la pregunta y agregué algunos registros para comparar el descubrimiento y la configuración de conexión de este mouse con la configuración de conexión de un teléfono móvil, cuyas teclas de enlace se guardan.
ATAKAMA
0

En Debian Jessie y supongo que Ubuntu también puede configurar manualmente el PIN para usar.

  1. Haga lo que esta publicación /ubuntu//a/246791/352576 describe para obtener su clave de Windows.
  2. su /var/lib/bluetooth/XX:XX:XX:XX:XX:AA(donde XX: ... :AAestá la mac del adaptador BT de su PC) debe contener un directorio con la mac de su mouse / teclado BT (lo representaré como XX: ... :BF, y los archivos de configuración, y configuraciones.
  3. dentro XX: ... BFhay un archivo infopropiedad de root, con permisos rw para root. No hay otros permisos. El contenido debe 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
    

    Tenga en cuenta que la longitud de la clave es de 16 bytes.

pegar archivos linkkeys en estos directorios no me ayudó, aunque los dejé allí en buena medida.

Jonathan
fuente