'bluetooth.btcommon.BluetoothError: (2, 'No such file or directory')
I'm simply trying to run the RFCOMM server example at https://code.google.com/p/pybluez/source/browse/trunk/examples/simple/rfcomm-server.py
$ python2 rfcomm-server.py
Traceback (most recent call last):
File "rfcomm-server.py", line 20, in <module>
profiles = [ SERIAL_PORT_PROFILE ],
File "/usr/lib/python2.7/site-packages/bluetooth/bluez.py", line 176, in advertise_service
raise BluetoothError (str (e))
bluetooth.btcommon.BluetoothError: (2, 'No such file or directory')
I am getting this error. My code is working on windows but I could not work Ubuntu 15.10.
Solution 1:[1]
I had the same problem on Raspbian, and solved by:
Running bluetooth in compatibility mode,
by modifying
/etc/systemd/system/dbus-org.bluez.service,changing
ExecStart=/usr/lib/bluetooth/bluetoothdinto
ExecStart=/usr/lib/bluetooth/bluetoothd -CThen adding the Serial Port Profile, executing:
sudo sdptool add SP
References:
Solution 2:[2]
I ran the same problem even after @GozzoMan's solution because /var/run/sdp file was not being generated at all after calling sudo sdptool add SP. The problem was the location of daemon service file was different on my system (Raspbian Buster on Raspberry Pi).
If you experience the same;
- Check the status of bluetooth daemon and look for the service file path (2nd line)
sudo service bluetooth status
# alternative:
# sudo systemctl status bluetooth
In my case the service file was run at /lib/systemd/system/bluetooth.service, NOT FROM /etc/systemd/system/dbus-org.bluez.service.
Then modify the correct file (which was
/lib/systemd/system/bluetooth.servicein my case) to add-Cto theExecStart=/usr/lib/bluetooth/bluetoothdline as instructed in the previous answer.Do not forget to reload daemons and restart bluetooth service before running sdptool:
sudo systemctl daemon-reload
sudo systemctl restart bluetooth
sudo sdptool add SP
Now /var/run/sdp should be generated.
Note: If you experience permission errors, check the following answer: https://stackoverflow.com/a/42306883/4406572
Solution 3:[3]
The answer about editing the service file works, but breaks on every update.
The correct way is to add an override to the file
/etc/systemd/system/bluetooth.service.d/override.conf
with the following content:
[Service]
ExecStart=
ExecStart=/usr/lib/bluetooth/bluetoothd -C
The first line clears the existing ExecStart, the second line adds the correct one.
You will have to create the directory.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | GozzoMan |
| Solution 2 | |
| Solution 3 |

