Где хранятся ключи связи Bluetooth в Ubuntu 14.10?

10

Я пытаюсь установить определенные ключи связи Bluetooth для устройства в Ubuntu 14.10, но не могу найти, где они хранятся.
Цель состоит в том, чтобы Bluetooth-мышь работала как в Ubuntu, так и в Windows, без необходимости повторного сопряжения после переключения операционных систем.
Все ответы, которые я нашел в AskUbuntu, утверждают, что ключи хранятся, /var/lib/bluetooth/<mac_address>/linkkeysи это имело место, по крайней мере, до 13.10, но в 14.10 этот файл отсутствует в чистой установке на рабочем столе, и создание его вручную не имеет никакого эффекта, оно игнорируется bluetoothd.

РЕДАКТИРОВАТЬ: кажется, что мышь не выдает запрос на сопряжение, и ключи ссылки в этом случае не сохраняются. Однако подключение мыши в Windows и последующая перезагрузка в Ubuntu приводит к сбою подключения Bluetooth (и необходимо удалить мышь и снова добавить ее в список устройств Bluetooth), поэтому определенно происходит обмен ключами / проверка подлинности, предотвращающая мышь от общего в обеих ОС. Остается вопрос, как заставить bluetoothd сохранять и использовать сохраненные ссылки при подключении этой мыши?

Детали оборудования:

  • Мышь для ноутбука Bluetooth Bluetooth 5000
  • 413c: 8161 Dell Computer Corp. Беспроводная связь 365 Bluetooth (Broadcom BCM2046B1)

Два журнала, приведенные ниже, показывают, что для устройства с платным доступом (мобильного телефона) ключи хранятся в файле linkkeys; это не так для мыши. Я знаю, что более старые версии bluetoothd также использовались для сохранения ключей ссылок для мышей, потому что здесь есть много ответов / уроков по askubuntu и ubuntuforums о копировании ключей ссылок из Windows в Ubuntu для конкретной цели совместного использования мыши между двумя ОС.

Вот лог bluetoothd для обнаружения мыши и настройки соединения:

    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

Вот журнал bluetoothd для сопряжения мобильного телефона (пользователю предлагается подтвердить код, показанный на обоих устройствах):

    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
источник
У меня есть 14.04, и каталог существует для меня, но для моего внутреннего блютуса используется MAC-адрес, а линк-ключи пусты ...
Fabby
У меня было 14.04 и обновлено до 14.10, теперь я не могу найти каталог. У меня та же проблема, что и у вас, желая установить ключ ссылки для мыши BT.
Аласё,

Ответы:

3

Через некоторое время я наконец решил проблему, с которой столкнулся. Я до сих пор не нашел ответа на первоначальный вопрос (я не смог определить, где хранятся ключи ссылок для этой конкретной комбинации bluez / адаптер / периферийное устройство), но я выяснил, что bluez будет читать файл linkkeys, если он есть, и будет использовать ключи в файле.

Таким образом, даже если ключи связывания могут не записываться в файл после сопряжения, эти ключи можно переопределить, добавив их вручную в файл linkkeys.

Важно, чтобы тип ключа был установлен правильно, в противном случае ключ будет игнорироваться.

Для справки, тип ключа, который работал в моем случае, показан здесь: https://askubuntu.com/a/246791/352576.

Atakama
источник
1

Ubuntu 13.10 использует bluez 4.98, 14.04 и 14.10 использует 4.101

Обе версии были скомпилированы с одинаковым параметром (--localstatedir = / var)

Я использую 14.04, и файлы там, и если я удаляю или добавляю устройство, файл / var / lib / bluetooth / (myadapteraddress) / linkkeys обновляется соответственно.

Я провел тест в системе 14.10, добавил устройство BT и создал файл / var / lib / bluetooth / (adapteraddress) / linkkeys

Возможно, вы используете более новую версию bluez.

Схема для новых версий bluez (5 лет, я думаю):

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

В документации по хранению настроек для новой версии bluez я нашел это:

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

...

В любом случае кажется, что bluez должен хранить файлы в / var / lib / bluetooth

Если вы используете эту команду

bluetoothd --version

ты получаешь 4.101?

J.Serra
источник
1
Да, версия bluetoothd - 4.101. var/lib/bluetoooth/<adapter address>Папка существует , но нет linkkeys файла, ни подкаталог. Устройство Bluetooth сопряжено и работает, поэтому ключи хранятся где-то, но точно не там. Может быть, версия Ubuntu хранит ключи где-то еще, и я пытаюсь выяснить, где. Я использую стандартную настольную установку 14.10, соединение производится через индикатор Bluetooth, ничего особенного.
АТАКАМА
1
Мне просто пришло в голову, что некоторые адаптеры Bluetooth имеют аппаратное хранилище ключей. Будет ли в Ubuntu bluetoothd возможность хранить ключи ссылок только в памяти адаптера, а не в файловой системе? Адаптер: 413c: 8160 Dell Computer Corp. Беспроводная связь 365 Bluetooth на базе Broadcom BCM2046
ATAKAMA
Вы пробовали подключить другое устройство, мобильный телефон? ... Позже я попробую на другом ПК с 14.10
J.Serra
Я просто соединил мобильный телефон, который никогда не был связан с этим адаптером (ни в Ubuntu, ни в Windows). Файл linkkeys создан. Затем я попытался снова связать мышь, она была сопряжена, но ее ключ ссылки не был добавлен в файл. Как мне заставить bluetoothd читать ключ ссылки в файле, а не использовать тот, что в адаптере (что он, вероятно, делает)?
АТАКАМА
Это очень любопытно ... Может быть, если вы удалите устройство в Windows, Ubuntu создаст файл.
J.Serra
0

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

Где {bluetoothaddr} - ваш интерфейс Bluetooth (у вас должен быть только один, он выглядит как MAC-адрес)

Формат файла: {remoteaddr} {128-битный ключ ссылки} {тип}.

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
Ксавье
источник
Пожалуйста, внимательно прочитайте текст вопроса. Этот файл больше не существует при установке 14.10. В файловой системе нет файла linkkeys. Ключи хранятся где-то еще. Вопрос в том, где.
АТАКАМА
На моем новом ноутбуке, где я установил (без обновления) 14.10, все еще есть файл, как я его описал. блютузд 4.101. Что за сообщения в системном журнале, когда вы пытаетесь подключить новое устройство?
Ксавье
Я отредактировал вопрос и добавил несколько журналов, чтобы сравнить параметры обнаружения и подключения этой мыши с настройками подключения мобильного телефона, чьи ключи ссылок сохранены.
АТАКАМА
0

В Debian Jessie & я предполагаю, что в Ubuntu вы также можете вручную установить используемый PIN-код.

  1. Сделайте то, что описывает этот пост https://askubuntu.com/a/246791/352576, чтобы получить ключ Windows.
  2. ваш /var/lib/bluetooth/XX:XX:XX:XX:XX:AA(где XX: ... :AAmac вашего BT-адаптера вашего компьютера) должен содержать каталог с mac вашей мыши / клавиатуры BT (я буду представлять его как XX: ... :BF, и файлы конфигурации, и настройки).
  3. внутри XX: ... BFесть файл, infoпринадлежащий root, с разрешениями rw для root. Никаких других разрешений .-- содержимое должно быть:

    [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
    

    Обратите внимание, длина ключа составляет 16 байтов.

Вставка файлов ссылок в эти каталоги мне не помогла - хотя я оставил их там в хорошей мере.

Джонатан
источник