我在python中通过dbus使用Udisk来卸载一个USB设备(在这个例子中是一个Kindle),但是我想向它发送popup信号,因为这会将Kindle从USB模式退回到它通常的界面。
Udisk不会让我DriveEject,因为它不是一个实际的驱动器,我收集这是一个function。 给出的错误是:
dbus.exceptions.DBusException: org.freedesktop.UDisks.Error.Failed: Device is not a drive
Udisks 文档提到可抛出的属性:
ID_DRIVE_EJECTABLE
- 我可以用什么C + +库来检查Linux上的磁盘配额?
- PHP,crontab,DateInterval:将可读的时间间隔转换为crontab格式
- 在CentOS5上通过SSH安装TexLive
- Linux中的HTimer(高分辨率定时器)
- 简单Shell脚本不附加到文件
驱动器中的介质是否是物理可popup的。 如果驱动器真正使用(或不)可popup介质,只设置为1(或0)。 尤其是,对于例如需要通过popup(1)发送命令的iPod或Kindle设备,这不是必需的,因为桌面用户会话将为可移动设备提供这个选项,而不pipe它们是否可popup。 如果未设置此属性,将使用启发式方法确定介质是否可popup(使用光盘驱动器,Zip或Jaz介质被视为可popup)。
但不解释如何从桌面用户会话做到这一点。
(Nautilus可以让我从桌面shellpopup,popup的shell命令将会卸载,但不会在没有sudo的情况下将popup信号发送到设备)
有没有什么合法的办法可以和Udisk进行呢?如果不是的话,Nautlius怎么去做呢?
所以事实证明,我试图弹出分区,而不是驱动器本身,因此“设备不是驱动器错误”。 (也就是说,调用udisks弹出/ dev / sdc1而不是/ dev / sdc)
解决方法是首先使用FilesystemUnmount()卸载分区,然后使用“PartitionSlave”属性查找父驱动器,然后在其上调用DriveEject()。
在dbus的python中,假设你已经有了一个来自Udisks的设备对象,这看起来像这样:
dev_if = dbus.Interface(device_object, 'org.freedesktop.UDisks.Device') dev_if.FilesystemUnmount([]) device_props = dbus.Interface(device_object, dbus.PROPERTIES_IFACE) drive = device_props.Get('org.freedesktop.UDisks.Device', "PartitionSlave") drive_obj = self.bus.get_object("org.freedesktop.UDisks", drive) drive_if = dbus.Interface(drive_obj, 'org.freedesktop.UDisks.Device') drive_if.DriveEject([])