1

I need to detect all available usb drives and its info. Mainly i am interested in USB device (flash drive and external hard disk), mount point, uuid, total size, available space, label, and is the usb mounted or not. I thought ruby-dbus would be better to go with udisk. So installed with out an error. However i am unable to proceed further. I need to use this on linux. Here is the sample code

#!/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

However i get this error undefined method `DeviceIsRemovable' for nil:NilClass (NoMethodError) which i don't understand. Could some one help me on this? Useful links:- python and udisk http://mindbending.org/en/python-and-udisks-part-5 python udisks - enumerating device information...

Any help is appreciated.

Community
  • 1
  • 1
sundar_ima
  • 3,604
  • 8
  • 33
  • 52

1 Answers1

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
    }
sundar_ima
  • 3,604
  • 8
  • 33
  • 52