Well, for fun I poked at Net::DBus, this will give you a service:
use 5.020;
use strict;
use warnings;
package My::Dog::Rex;
use Net::DBus::Exporter qw(org.my.rex.Runner);
use base qw(Net::DBus::Object);
# use Rex -feature => [qw/1.4/];
dbus_method("walk_dog", [], []);
sub walk_dog {
my $self = shift;
say "Walking the dog";
# user "root";
# password "ch4ngem3";
#
# desc "Show system information";
# task "sysinfo", sub {
# say run "uname -a";
# };
}
1;
package My::Rex::Service;
use base qw(Net::DBus::Service);
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
My::Dog::Rex->new($self, "/my/dog/rex");
return $self;
}
package main;
use Net::DBus;
use Net::DBus::Reactor;
my $bus = Net::DBus->session;
my $rex = My::Rex::Service->new($bus, "org.my.rex");
Net::DBus::Reactor->main->run;
exit 0;
This is how you would trigger methods (from a separate script)
use 5.020;
use strict;
use warnings;
use Net::DBus;
my $bus = Net::DBus->session;
my $rex = $bus->get_service("org.my.rex")->get_object("/my/dog/rex");
$rex->walk_dog;
And when you want to run on the system bus instead of the user's session bus, change all the ->session to ->system, add the following to "/etc/dbus-1/system.d/org.my.rex.conf" and then run "systemctl reload dbus.service"
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuratio
+n 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.d
+td">
<busconfig>
<!-- Root can own or use the Rex service -->
<policy user="root">
<allow own="org.my.rex"/>
<allow send_destination="org.my.rex"/>
<allow receive_sender="org.my.rex"/>
</policy>
<!-- Nobody else can do anything -->
<policy context="default">
<deny send_destination="org.my.rex"/>
<deny receive_sender="org.my.rex"/>
</policy>
</busconfig>
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.