From 97841787fed3f656674692b0638fa70fe0857012 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 1 May 2021 10:00:39 +0100 Subject: break it out for distribution --- lib/App/XScreenSaver/DBus/InhibitSleep.pm | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 lib/App/XScreenSaver/DBus/InhibitSleep.pm (limited to 'lib/App/XScreenSaver/DBus/InhibitSleep.pm') diff --git a/lib/App/XScreenSaver/DBus/InhibitSleep.pm b/lib/App/XScreenSaver/DBus/InhibitSleep.pm new file mode 100644 index 0000000..44f84bc --- /dev/null +++ b/lib/App/XScreenSaver/DBus/InhibitSleep.pm @@ -0,0 +1,59 @@ +package App::XScreenSaver::DBus::InhibitSleep; +use Moo; +use experimental 'signatures'; +use curry; +use Net::DBus; +use Log::Any; + +has bus => ( is => 'lazy', builder => sub { Net::DBus->system() } ); +has logind_srv => ( + is => 'lazy', + builder => sub { shift->bus->get_service('org.freedesktop.login1') }, +); +has logind_obj => ( + is => 'lazy', + builder => sub { shift->logind_srv->get_object('/org/freedesktop/login1') }, +); + +has inhibit_fd => ( is => 'rwp' ); + +has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } ); + +sub start($self) { + $self->logind_obj->connect_to_signal( + 'PrepareForSleep', + $self->curry::weak::going_to_sleep, + ); + $self->inhibit(); + return; +} + +sub inhibit($self) { + return if $self->inhibit_fd; + $self->_set_inhibit_fd( + $self->logind_obj->Inhibit( + 'sleep', + 'xscreensaver','locking before sleep', + 'delay', + ) + ); + $self->log->debugf('got logind inhibit fd %d',$self->inhibit_fd); + return; +} + +sub going_to_sleep($self,$before) { + if ($before) { + $self->log->debug('locking'); + system(qw(xscreensaver-command -suspend)); + $self->log->debug('locked'); + $self->_set_inhibit_fd(undef); + } + else { + $self->log->debug('woken up'); + system(qw(xscreensaver-command -deactivate)); + $self->inhibit(); + } + return; +} + +1; -- cgit v1.2.3