Perl and Net::DBus questions
Madison Kelly
linux at alteeve.com
Thu Feb 14 06:57:09 PST 2008
Hi all,
I'm working on a perl program which needs to keep track of what
(block) devices are available and what their individual details are.
Also, I want to be able to keep similar track of what network
filesystems are currently mounted and their details.
From what I have been reading, it looks like DBus and HAL are right
up my alley. I've been reading the docs on the freedesktop.org website,
but most of it uses C++, Java and Python when talking about bindings.
Unfortunately, I am kind of still new to programming and am only
comfortable really with Perl, so a lot of these analogies are lost on me.
So, has anyone here played much DBus/HAL in perl (with Net::DBus)?
I've looked at the code in 'examples' in the DBus docs directory, but
it's pretty sparse, as are the notes on CPAN.
I am certainly not asking for anyone to "do my work" for me, and even
a link to docs that are more perl/Net::DBus focused would be a *huge* help!
This is what I am trying to figure out; pointers to more docs would
be perfect in lieu of code samples!
1: I want to initially query to the system bus for a list of current
devices.
1.1: For each device detected, see if it is a block device (HDD, USB
storage, Optical, etc).
1.2: If it is a block device, query it's details (max/used capacity,
FS type, mount location [less important is make, model, serial,
removable, optical media capability, SMART codes, etc).
2: After the initial scan, "subscribe" to the system bus and wait for
new signals/messages.
2.1: Whenever a new message arrives, check if it's for a block device
and, if so, repeat 1.2.
3: Do the same for Network Block devices.
If anyone can help get me started, I would be much appreciated. As of
now, I've been able to do this much, which queries the 'Manager' system
bus, but no more. I am not even sure how to find out what objects are on
a given (ie: system) bus. =/
A confused Madi.
-=] test.pl [=-
#!/usr/bin/perl
#
# My crappy Net::DBus script for learning.
use strict;
use warnings;
use IO::Handle;
use Net::DBus;
my @key_words=("volume", "usb", "storage");
# Connect to DBus.
my $bus = Net::DBus->system;
# Get a handle to the HAL service
my $hal = $bus->get_service("org.freedesktop.Hal");
# Get the device manager
# my $manager = $hal->get_object("/org/freedesktop/Hal/Manager",
"org.freedesktop.Hal.Manager");
my $manager = $hal->get_object("/org/freedesktop/Hal/Manager",
"org.freedesktop.Hal.Manager");
# Show the devices currently seen by DBus
foreach my $dev (sort { $a cmp $b } @{$manager->GetAllDevices})
{
my $want=0;
foreach my $key (@key_words)
{
if ( $dev=~/$key/ )
{
$want=1;
last;
}
}
if ( $want == 1 )
{
print "Yar!: $dev\n";
}
else
{
print "Boo!: $dev\n";
}
}
More information about the hal
mailing list