使用ruby-dbus和udisk查找usb属性/详细信息

时间:2013-03-28 20:34:41

标签: ruby

我需要检测所有可用的USB驱动器及其信息。主要是我对USB设备(闪存驱动器和外部硬盘),挂载点,uuid,总大小,可用空间感兴趣, 标签,是否安装了usb。我认为ruby-dbus会更好地与udisk一起使用。因此安装时出错了。但是我无法继续下去。我需要在linux上使用它。这是示例代码

#!/usr/bin/env ruby
require 'rubygems'
require 'dbus'
bus = DBus::SystemBus.instance
rb_service = bus.service("org.freedesktop.UDisks")
rb_udisk = rb_service.object("/org/freedesktop/UDisks")
rb_udisk.introspect
rb_udisk_iface = rb_udisk["org.freedesktop.UDisks.Device"]
puts rb_udisk_iface.DeviceIsRemovable

然而我收到此错误 nil的未定义方法`DeviceIsRemovable':NilClass(NoMethodError) 我不明白。有人可以帮我吗? 有用的链接: - python和udisk http://mindbending.org/en/python-and-udisks-part-5 python udisks - enumerating device information ...

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

#!/usr/bin/env ruby

require 'dbus'

bus = DBus::SystemBus.instance
udisk_service = bus.service("org.freedesktop.UDisks")
udisk_udisk = udisk_service.object("/org/freedesktop/UDisks")
udisk_udisk.introspect
udisk_udisk.default_iface = "org.freedesktop.UDisks"
disk_list = udisk_udisk.EnumerateDevices[0]
    disk_list.each { |disk|
    udisk_udisk = udisk_service.object("#{disk}")
    udisk_udisk.introspect
    udisk_udisk_i = udisk_udisk["org.freedesktop.UDisks.Device"]
    if udisk_udisk_i["DriveConnectionInterface"] == "usb" && udisk_udisk_i["DeviceIsPartition"]
    #puts disk #Debug
    puts "Device file: #{udisk_udisk_i["DeviceFile"]}"
    puts "Is device mounted: #{udisk_udisk_i["DeviceIsMounted"]}"
    puts "Is device mount path: #{udisk_udisk_i["DeviceMountPaths"]}"
    puts "Device uuid: #{udisk_udisk_i["IdUuid"]}"
    puts "Device label: #{udisk_udisk_i["IdLabel"]}"
    puts ""
    end
    }