监听dbus信号在debianlinux上挂载mtp设备

2024-09-28 17:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个python脚本来检测mtp设备(在本例中是一个Android手机)何时被安装到raspberrypi3(运行raspbianjessie)上。我想在手机接通电源后自动将文件传送到手机上。在

我从给出的脚本开始,作为this question的第二个答案

我改变了一些东西让它在我的树莓皮上运行。当前脚本如下。当我拔掉电话插头时,我可以看到UnitNew和UnitRemoved信号。当它到达path_to_device函数时,我得到以下错误:

DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.systemd1.Manager was not provided by any .service files

我在一个类似的问题中读到这是一个权限问题,所以我尝试将脚本作为sudo./usb运行_系统.py但我还是犯了同样的错误。在

我还尝试使用SessionBus而不是SystemBus。信号不同,巴士的名字是org.gtk.vfs.MountTracker。我仍然得到同样的错误,这次它说org.gtk.vfs.MountTracker不是可用的服务。当我尝试用sudo运行SessionBus版本时,根本看不到信号。在

我是否使用了正确的get_object()函数的输入?哪种巴士类型合适?因为信号是广播的,所以没有目的地总线,我不确定这是否是问题的一部分。我对linux和信号/总线的了解非常有限。在

脚本:

^{pr2}$

Tags: 函数org脚本gtk信号错误sudo手机
1条回答
网友
1楼 · 发布于 2024-09-28 17:27:29

我对systemd D-Bus API不够熟悉,无法判断一般方法是否正确,但这应该有助于解决具体问题:

self.bus.get_object('org.freedesktop.systemd1.Manager', path)

bus.get_object()的第一个参数是服务名称(通常是在服务文档中找到的已知名称)。我很确定'org.freedesktop.system1'是您应该使用的服务名称。您当前使用的是('org.freedesktop.system1.Manager')是由该服务公开的某个对象实现的接口之一。在

在我看来,接口和服务名称通常看起来很相似,这是D-Bus中的一个设计错误。。。如果d-feetD-Bus调试器在raspbian上可用(或者您有另一个linux机器来测试),我建议使用它来查看所有的D-Bus服务及其公开的对象和接口:这样更容易理解它们之间的关系。在

相关问题 更多 >