To permanently change the adapter device name using a bluez tool we have to use DBus to set the name using org.bluez.Adaptor.SetProperty which is handled by set_name(), which results in a call to adapter_set_name() which in turn calls write_local_name().
$ cat /var/lib/bluetooth/00\:1F\:E1\:E0\:EB\:96/config
name adapter_name
pairable yes
class 0x6e0100
onmode discoverable
mode discoverable
'bluetoothd' reads "/etc/bluetooth/main.conf" where we have "Name = %h-%d" which should be expanded to "<host>-<adapter_id>".
This is passed to the 'adaptername' plugin function adaptername_probe() which calls read_pretty_host_name(). This function looks for a systemd-specific text file "/etc/machine-info" and if found reads the file then looks for a line with the prefix "PRETTY_HOSTNAME=" and uses the name assigned there.
If no name has been set at this point read_local_name() is called to get the name from "/var/lib/bluetooth/$MAC/config". If no name is obtained from that file expand_name(,,"%h-%d",) is called and a name created from the machine hostname and bluetooth adapter id, e.g. "hostname-0".
This is later written out to "/var/lib/bluetooth/$MAC/config".
It appears to me that "ubuntu-0" is created during installation from a liveISO environment where the default machine name is always "ubuntu". Bluetooth starts in the live environment and assigns the "ubuntu-0" name to the adapter. Later, when bluetoothd is installed in the target the configuration file is probably copied over, or otherwise generated based on the live environment.
Once there is a name entry in "/var/lib/bluetooth/$MAC/config" the bluetoothd adaptername plugin will not generate a new name.
---- debug with "name adapter_name" setting in /var/lib/bluetooth/$MAC/config ----
bluetoothd[11119]: src/main.c:parse_config() name=%h-%d
bluetoothd[11119]: src/plugin.c:add_plugin() Loading adaptername plugin
bluetoothd[11119]: plugins/hciops.c:read_local_name_complete() hci0 status 0
bluetoothd[11119]: plugins/hciops.c:read_local_name_complete() Got name for hci0
bluetoothd[11119]: plugins/adaptername.c:adaptername_probe() Setting name 'adapter_name' for device 'hci0'
bluetoothd[11119]: plugins/hciops.c:hciops_set_name() hci0, name adapter_name
-- debug with no "name" setting in /var/lib/bluetooth/$MAC/config ----
bluetoothd[11425]: src/main.c:parse_config() name=%h-%d
bluetoothd[11425]: src/plugin.c:add_plugin() Loading adaptername plugin
bluetoothd[11425]: plugins/hciops.c:read_local_name_complete() hci0 status 0
bluetoothd[11425]: plugins/hciops.c:read_local_name_complete() Got name for hci0
bluetoothd[11425]: plugins/adaptername.c:adaptername_probe() Setting name 'XPSm1530-0' for device 'hci0'
bluetoothd[11425]: plugins/hciops.c:hciops_set_name() hci0, name XPSm1530-0
To permanently change the adapter device name using a bluez tool we have to use DBus to set the name using org.bluez. Adaptor. SetProperty which is handled by set_name(), which results in a call to adapter_set_name() which in turn calls write_local_name().
dbus-send --print-reply --system --dest=org.bluez /org/bluez/$(pidof bluetoothd)/hci0 org.bluez. Adapter. SetProperty string:'Name' variant: string: 'adapter_ name'
$ dbus-send --print-reply --system --dest=org.bluez /org/bluez/$(pidof bluetoothd)/hci0 org.bluez. Adapter. SetProperty string:'Name' variant: string: 'adapter_ name'
method return sender=:1.164 -> dest=:1.189 reply_serial=2
$ cat /var/lib/ bluetooth/ 00\:1F\ :E1\:E0\ :EB\:96/ config
name adapter_name
pairable yes
class 0x6e0100
onmode discoverable
mode discoverable
'bluetoothd' reads "/etc/bluetooth /main.conf" where we have "Name = %h-%d" which should be expanded to "<host> -<adapter_ id>".
This is passed to the 'adaptername' plugin function adaptername_probe() which calls read_pretty_ host_name( ). This function looks for a systemd-specific text file "/etc/machine-info" and if found reads the file then looks for a line with the prefix "PRETTY_HOSTNAME=" and uses the name assigned there.
If no name has been set at this point read_local_name() is called to get the name from "/var/lib/ bluetooth/ $MAC/config" . If no name is obtained from that file expand_ name(,, "%h-%d" ,) is called and a name created from the machine hostname and bluetooth adapter id, e.g. "hostname-0".
This is later written out to "/var/lib/ bluetooth/ $MAC/config" .
It appears to me that "ubuntu-0" is created during installation from a liveISO environment where the default machine name is always "ubuntu". Bluetooth starts in the live environment and assigns the "ubuntu-0" name to the adapter. Later, when bluetoothd is installed in the target the configuration file is probably copied over, or otherwise generated based on the live environment.
Once there is a name entry in "/var/lib/ bluetooth/ $MAC/config" the bluetoothd adaptername plugin will not generate a new name.
---- debug with "name adapter_name" setting in /var/lib/ bluetooth/ $MAC/config ---- c:parse_ config( ) name=%h-%d c:add_plugin( ) Loading adaptername plugin hciops. c:read_ local_name_ complete( ) hci0 status 0 hciops. c:read_ local_name_ complete( ) Got name for hci0 adaptername. c:adaptername_ probe() Setting name 'adapter_name' for device 'hci0' hciops. c:hciops_ set_name( ) hci0, name adapter_name
bluetoothd[11119]: src/main.
bluetoothd[11119]: src/plugin.
bluetoothd[11119]: plugins/
bluetoothd[11119]: plugins/
bluetoothd[11119]: plugins/
bluetoothd[11119]: plugins/
-- debug with no "name" setting in /var/lib/ bluetooth/ $MAC/config ---- c:parse_ config( ) name=%h-%d c:add_plugin( ) Loading adaptername plugin hciops. c:read_ local_name_ complete( ) hci0 status 0 hciops. c:read_ local_name_ complete( ) Got name for hci0 adaptername. c:adaptername_ probe() Setting name 'XPSm1530-0' for device 'hci0' hciops. c:hciops_ set_name( ) hci0, name XPSm1530-0
bluetoothd[11425]: src/main.
bluetoothd[11425]: src/plugin.
bluetoothd[11425]: plugins/
bluetoothd[11425]: plugins/
bluetoothd[11425]: plugins/
bluetoothd[11425]: plugins/