Я пытаюсь установить определенные ключи ссылки Bluetooth для устройства в Ubuntu 14.10, но я не могу найти, где они хранятся.
Цель состоит в том, чтобы иметь мышь Bluetooth, работающую и в Ubuntu и в Windows, не имея необходимость восстанавливать его после переключения операционных систем.
Все ответы, которые я нашел на AskUbuntu, указывают, что ключи хранятся в /var/lib/bluetooth/<mac_address>/linkkeys
и это раньше имело место, по крайней мере, до 13.10, но в 14,10 этих файлах отсутствует в чистой настольной установке и создает его, вручную не имеет никакого эффекта, это проигнорировано bluetoothd.
Править: Кажется, что мышь не выпускает соединяющийся запрос, и ключи ссылки не хранятся в этом случае. Однако подключение мыши в Windows и затем перезагрузка в Ubuntu заставляют подключение Bluetooth перестать работать (и мышь должна быть удалена и повторно добавлена к списку bluetooth-устройства), таким образом, существует определенно некоторый ключевой обмен/аутентификация, продолжающийся, который препятствует тому, чтобы мышь была совместно использована в обеих ОС. Вопрос остается, как я могу вынудить bluetoothd сохранить и использовать сохраненные ключи ссылки при подключении этой мыши?
Аппаратные детали:
Два журнала ниже показывают, что для pairable устройства (мобильный телефон) ключи хранятся в linkkeys файле; дело обстоит не так для мыши. Я знаю, что более старые bluetoothd версии раньше сохраняли ключи ссылки для мышей также, потому что существует много ответов/учебных руководств здесь на askubuntu и ubuntuforums о копировании linkkeys от 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
Через некоторое время я наконец решил проблему, с которой я сталкивался. Я все еще не нашел ответ на начальный вопрос (я не мог определить, где ключи ссылки хранятся для этой конкретной bluez/adapter/peripheral комбинации), но я действительно узнавал, что блюз считает linkkeys файл и будет использовать ключи в файле.
Поэтому даже при том, что ключи ссылки не могли бы быть записаны в файл после соединения, возможно переопределить те ключи путем ручного добавления их к linkkeys файлу.
важно, чтобы ключевой тип был установлен правильно, иначе ключ будет проигнорирован.
Для ссылки, ключевой тип, который работал в моем случае, показывают здесь: https://askubuntu.com/a/246791/352576
Ubuntu 13.10 использует блюз 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 файл был создан
, Возможно, Вы используете более новую версию блюза.
Схема для новых версий блюза (5 вперед я думаю):
/var/lib/bluetooth/<adapter address>/<remote device address>/info
В документации устройства хранения данных настроек для новой версии блюза, я нашел это:
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
...
В любом случае кажется, что блюз должен устройство хранения данных файлы в/var/lib/bluetooth
при использовании этой команды
bluetoothd --version
, Вы добираетесь 4.101?
/var/lib/bluetooth / {bluetoothaddr} /linkkeys
, Где {bluetoothaddr} Ваш интерфейс Bluetooth (у Вас должен быть только один, это похоже на мак адрес)
, формат файла является {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
В Debian Jessie & я принимаю Ubuntu также, можно вручную установить PIN для использования.
/var/lib/bluetooth/XX:XX:XX:XX:XX:AA
(где XX: ... :AA
Mac адаптера BT Вашего ПК) должен содержать dir с Mac Вашей мыши/клавиатуры BT (я представлю его как XX: ... :BF
, и конфигурация файлов, & настройки. в XX: ... BF
существует файл info
, принадлежавший корню с полномочиями rw для корня. Никакой другой permissions. - содержание должно быть:
[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 байтов длиной.
липкие linkkeys файлы в этих каталогах не помогли мне - хотя я оставил их там хорошей мерой.