Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^3: Recommendation for a persistent perl solution? (Net::DBus micro-tutorial)

by duelafn (Parson)
on May 26, 2020 at 14:31 UTC ( [id://11117283]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Recommendation for a persistent perl solution?
in thread Recommendation for a persistent perl solution?

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>

Good Day,
    Dean

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11117283]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2024-03-28 18:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found