根据ofono 1.17的文档:
https://github.com/rilmodem/ofono/tree/master/doc
免提有两个接口:
- org.ofono.Handsfree
- org.ofono.HandsfreeAudioManager
我需要访问它们才能使 pulseaudio 正常工作。它返回此错误:
E: [pulseaudio] backend-ofono.c: 无法使用 ofono 注册为免提音频代理:org.freedesktop.DBus.Error.UnknownMethod:方法“注册”,在接口“org.ofono.HandsfreeAudioManager”上签名为“oay”不存在
但是该方法存在(根据上面的文档)并且具有该签名:对象路径,数组{字节}。
因此,我猜它是不可访问的,而不是不存在的。我编写了一个简单的 Python 脚本来列出可用的服务,并且 org.ofono 就在那里。
然后我添加了列出对象的代码:
def list_obj(bus, service, object_path):
print(object_path)
obj = bus.get_object(service, object_path)
iface = dbus.Interface(obj, 'org.freedesktop.DBus.Introspectable')
xml_string = iface.Introspect()
for child in ElementTree.fromstring(xml_string):
if child.tag == 'node':
if object_path == '/':
object_path = ''
new_path = '/'.join((object_path, child.attrib['name']))
list_obj(bus, service, new_path)
bus = dbus.SystemBus()
list_obj(bus, 'org.ofono.HandsfreeAudioManager', '/')
但我收到以下错误:
dbus.exceptions.DBusException:org.freedesktop.DBus.Error.NameHasNoOwner:无法获得名称“org.ofono.HandsfreeAudioManager”的所有者:没有这样的名称
dbus.exceptions.DBusException:org.freedesktop.DBus.Error.ServiceUnknown:名称 org.ofono.HandsfreeAudioManager 不是由任何 .service 文件提供的
我还在 /etc/dbus-1/system.d/ofono.conf 中检查了 dbus 的用户策略:
<policy user="user">
<allow own="org.ofono"/>
<allow send_destination="org.ofono"/>
<allow send_interface="org.ofono.SimToolkitAgent"/>
<allow send_interface="org.ofono.PushNotificationAgent"/>
<allow send_interface="org.ofono.SmartMessagingAgent"/>
<allow send_interface="org.ofono.PositioningRequestAgent"/>
<allow send_interface="org.ofono.HandsfreeAudioManager"/>
<allow send_interface="org.ofono.Handsfree"/>
</policy>
<policy at_console="true">
<allow send_destination="org.ofono"/>
</policy>
<policy context="default">
<deny send_destination="org.ofono"/>
</policy>
当然,我以用户“用户”的身份运行 ofono 和上面的代码。我的想法不多了......我应该怎么做才能解决这个问题?