在linux上弹出USB设备

我在python中通过dbus使用Udisks卸载USB设备(在这种情况下是Kindle),但是我想向它发送弹出信号,因为这会将Kindle从USB模式恢复到其通常的界面。 Udisks不会让我DriveEject,因为它不是一个真正的驱动器,我收集这是一个功能。给出的错误是:
dbus.exceptions.DBusException: org.freedesktop.UDisks.Error.Failed: Device is not a drive
Udisks文档提到了可弹出属性:   ID_DRIVE_EJECTABLE      是否驱动器中的媒体   物理弹射。只将此设置为   1(或0)如果驱动器真正使用(或   没有)可弹出的媒体。在   特别是,没有必要设置   这对于例如iPod或Kindle设备   哪里有必要发送   自桌面起通过eject(1)命令   用户会话将提供此选项   适用于可移动设备   它们是否可以弹射。如果这   属性没有设置,一个启发式的意志   用于确定媒体是否   可弹出(使用光学驱动器,Zip   或Jaz媒体被考虑   可弹出)。 但没有解释如何从桌面用户会话执行此操作。 (Nautilus让我从桌面shell弹出很好.'reject'shell命令将卸载,但不会在没有sudo的情况下将弹出信号发送到设备) 有没有合法的方法与Udisks这样做,如果没有,nautlius如何去做呢?     
已邀请:
所以事实证明我试图弹出分区,而不是驱动器本身,因此“设备不是驱动器错误”。 (也就是说,调用udisks弹出/ dev / sdc1而不是/ dev / sdc) 解决方案是首先使用FilesystemUnmount()卸载分区,然后使用“PartitionSlave”属性查找父驱动器,并在此上调用DriveEject()。 在使用dbus的python中,假设你已经有来自Udisks的设备对象用于parition,这看起来像:
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([])
    

要回复问题请先登录注册