Où sont stockées les clés de liaison Bluetooth dans Ubuntu 14.10?

10

J'essaie de définir des clés de liaison Bluetooth spécifiques pour un appareil dans Ubuntu 14.10 mais je n'arrive pas à trouver où elles sont stockées.
Le but est d'avoir une souris Bluetooth fonctionnant à la fois sur Ubuntu et sur Windows sans avoir à la recoupler après avoir changé de système d'exploitation.
Toutes les réponses que j'ai trouvées sur AskUbuntu indiquent que les clés sont stockées /var/lib/bluetooth/<mac_address>/linkkeyset cela était le cas au moins jusqu'à 13h10, mais en 14.10 ce fichier est absent d'une installation de bureau propre et sa création manuelle n'a aucun effet, il est ignoré par bluetoothd.

EDIT: Il semble que la souris n'émette pas de demande d'association et les clés de lien ne sont pas stockées dans ce cas. Cependant, la connexion de la souris dans Windows puis le redémarrage dans Ubuntu provoquent l'échec de la connexion Bluetooth (et la souris doit être supprimée et ajoutée à la liste des périphériques Bluetooth), il y a donc certainement un échange / authentification de clé en cours qui empêche la souris d'être partagée dans les deux OS. La question demeure, comment puis-je forcer bluetoothd à enregistrer et utiliser les touches de lien enregistrées lors de la connexion de cette souris?

Détails du matériel:

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

Les deux journaux ci-dessous montrent que pour un appareil jumelable (téléphone mobile), les clés sont stockées dans le fichier linkkeys; ce n'est pas le cas pour la souris. Je sais que les anciennes versions de bluetoothd permettaient également de sauvegarder les clés de lien pour les souris, car il y a beaucoup de réponses / tutoriels ici sur askubuntu et ubuntuforums sur la copie de clés de liaison de Windows vers Ubuntu dans le but spécifique de partager une souris entre les deux systèmes d'exploitation.

Voici le journal bluetoothd pour la découverte de la souris et la configuration de la connexion:

    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

Voici le journal bluetoothd pour l'appairage d'un téléphone mobile (l'utilisateur est invité à valider un code affiché sur les deux appareils):

    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
la source
J'ai 14.04 et le répertoire existe pour moi, mais l'adresse mac est celle de mon bluetooth interne et les clés de liaison sont vides ...
Fabby
J'avais 14.04 et mis à jour vers 14.10, maintenant je ne trouve pas le répertoire. J'ai le même problème que vous, souhaitant définir la clé de lien pour une souris BT.
Alasjo

Réponses:

3

Après un certain temps, j'ai finalement résolu le problème auquel j'étais confronté. Je n'ai toujours pas trouvé de réponse à la question initiale (je n'ai pas pu déterminer où les clés de lien sont stockées pour cette combinaison bluez / adaptateur / périphérique particulière) mais j'ai découvert que bluez lira le fichier linkkeys, s'il est présent, et utilisera les clés du fichier.

Ainsi, même si les clés de lien peuvent ne pas être écrites dans le fichier après le couplage, il est possible de remplacer ces clés en les ajoutant manuellement au fichier de clés de lien.

Il est important que le type de clé soit correctement défini, sinon la clé sera ignorée.

Pour référence, le type de clé qui a fonctionné dans mon cas est indiqué ici: /ubuntu//a/246791/352576

ATAKAMA
la source
1

Ubuntu 13.10 utilise bluez 4.98, 14.04 et 14.10 utilise 4.101

Les deux versions ont été compilées avec la même option (--localstatedir = / var)

J'utilise 14.04 et les fichiers sont là et si je supprime ou ajoute un périphérique, le fichier / var / lib / bluetooth / (myadapteraddress) / linkkeys est mis à jour en conséquence.

J'ai fait un test sur un système 14.10, j'ai ajouté un périphérique BT et le fichier / var / lib / bluetooth / (adapteraddress) / linkkeys a été créé

Vous utilisez peut-être une version plus récente de bluez.

Schéma pour les nouvelles versions de bluez (à partir de 5 ans je pense):

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

Dans la documentation du stockage des paramètres de la nouvelle version bluez, j'ai trouvé ceci:

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 tout cas, bluez devrait stocker les fichiers dans / var / lib / bluetooth

Si vous utilisez cette commande

bluetoothd --version

vous obtenez 4.101?

J.Serra
la source
1
Oui, la version bluetoothd est 4.101. Le var/lib/bluetoooth/<adapter address>dossier existe mais il n'y a pas de fichier de clés de liaison, ni de sous-répertoire. L'appareil Bluetooth est couplé et fonctionne, donc les clés sont stockées quelque part mais certainement pas là. Peut-être que la version Ubuntu stocke les clés ailleurs et j'essaie de savoir où. J'utilise une installation standard de bureau 14.10, l'appairage effectué via l'indicateur Bluetooth, rien de spécial.
ATAKAMA
1
Je viens de penser que certains adaptateurs Bluetooth ont un stockage de clés matérielles. Serait-il possible pour le bluetoothd Ubuntu de stocker les clés de liaison uniquement dans la mémoire de l'adaptateur et non dans le système de fichiers? L'adaptateur est: 413c: 8160 Dell Computer Corp. Wireless 365 Bluetooth basé sur Broadcom BCM2046
ATAKAMA
Avez-vous essayé de jumeler un autre appareil, un téléphone portable? ... Plus tard, je vais essayer dans un autre PC avec 14.10
J.Serra
Je viens de coupler un téléphone portable qui n'a jamais été couplé avec cet adaptateur (ni dans Ubuntu, ni dans Windows). Le fichier de clés de liaison a été créé. Ensuite, j'ai essayé de coupler à nouveau la souris, elle s'est couplée, mais sa clé de lien n'a pas été ajoutée au fichier. Comment puis-je demander à bluetoothd de lire la clé de lien dans le fichier et de ne pas utiliser celle de l'adaptateur (ce qu'il fait probablement)?
ATAKAMA
C'est très curieux ... Peut-être que si vous supprimez l'appareil dans Windows, ubuntu crée le fichier.
J.Serra
0

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

{bluetoothaddr} est votre interface Bluetooth (vous ne devriez en avoir qu'une, elle ressemble à une adresse mac)

Le format de fichier est {remoteaddr} {clé de liaison 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
la source
Veuillez lire attentivement le texte de la question. Ce fichier n'existe plus lors d'une installation 14.10. Il n'y a aucun fichier de clés de liaison nulle part dans le système de fichiers. Les clés sont stockées ailleurs. La question est de savoir où.
ATAKAMA
Sur mon nouvel ordinateur portable où j'ai installé (pas de mise à jour) 14.10, il y a toujours le fichier tel que je l'ai décrit. bluetoothd 4.101. Quels sont les messages sur syslog lorsque vous essayez de coupler un nouveau périphérique?
Xavier
J'ai édité la question et ajouté quelques journaux pour comparer la configuration de découverte et de connexion de cette souris par rapport à la configuration de connexion d'un téléphone mobile, dont les clés de liaison sont enregistrées.
ATAKAMA
0

Dans Debian Jessie & je suppose qu'Ubuntu vous permet également de définir manuellement le code PIN à utiliser.

  1. Faites ce que ce post /ubuntu//a/246791/352576 décrit pour obtenir votre clé Windows.
  2. votre /var/lib/bluetooth/XX:XX:XX:XX:XX:AA(où XX: ... :AAest le mac de l'adaptateur BT de votre PC) devrait contenir un dir avec le mac de votre souris / clavier BT (je le représenterai comme XX: ... :BF, et la configuration des fichiers, et les paramètres.
  3. à l'intérieur XX: ... BFil y a un fichier infoappartenant à root, avec les autorisations rw pour root. Aucune autre autorisation - le contenu doit être:

    [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
    

    Notez que la longueur de la clé est de 16 octets.

coller des fichiers de clés de liaison dans ces répertoires ne m'a pas aidé - même si je les ai laissés dans la bonne mesure.

Jonathan
la source