无法连接到套接字/opt/local/var/run/dbus/system_bus_socket:没有这样的文件或目录

shi*_*la5 3 macos python-3.x bluetooth-lowenergy bbc-microbit

我尝试使用 Bluezero 向 microbit 发送消息(我使用的是 macOS),但出现错误。

示例代码。

from bluezero import microbit
ubit = microbit.Microbit(adapter_addr='x',
                         device_addr='x',
                         accelerometer_service=True,
                         button_service=True,
                         magnetometer_service=False,
                         pin_service=False,
                         temperature_service=True)

my_text = 'Hello, world'
ubit.connect()

while my_text is not '':
    ubit.text = my_text
    my_text = input('Enter message: ')

ubit.disconnect()
Run Code Online (Sandbox Code Playgroud)

错误

dbus.exceptions.DBusException:org.freedesktop.DBus.Error.FileNotFound:无法连接到套接字/opt/local/var/run/dbus/system_bus_socket:没有这样的文件或目录

Ole*_*kin 5

我在 Ubuntu 20 上遇到此错误

\n
Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n

通常这个文件是由 dbus 守护进程创建/监听的

\n
# netstat --all --program | grep system_bus_socket\nunix  2      [ ACC ]     STREAM     LISTENING     19161    1/init               /run/dbus/system_bus_socket\n
Run Code Online (Sandbox Code Playgroud)\n

但在此服务器上 dbus.service 未运行

\n
# systemctl status dbus.service\n\xe2\x97\x8f dbus.service - D-Bus System Message Bus\n Loaded: loaded (/lib/systemd/system/dbus.service; static; vendor preset: enabled)\n Active: inactive (dead)\n TriggeredBy: \xe2\x97\x8f dbus.socket\n Docs: man:dbus-daemon(1)\n
Run Code Online (Sandbox Code Playgroud)\n

尝试启动 dbus.service 失败

\n
# systemctl start dbus.service\nFailed to start dbus.service: Operation refused, unit dbus.service may be requested by dependency only (it is configured to refuse manual start/stop).\n
Run Code Online (Sandbox Code Playgroud)\n

也许它可以启动,systemctl start dbus.socket但我已经通过查找依赖它的服务解决了这个dbus.service问题firewalld

\n
# grep -r dbus /etc/systemd/system/*\n/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service:After=dbus.service\n
Run Code Online (Sandbox Code Playgroud)\n

并启动它

\n
# systemctl start firewalld\n
Run Code Online (Sandbox Code Playgroud)\n

就是这样

\n
# ls -la /var/run/dbus/system_bus_socket\nsrw-rw-rw- 1 root root 0 Jul 28 13:45 /var/run/dbus/system_bus_socket\n
Run Code Online (Sandbox Code Playgroud)\n