1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
Description: Use xprintidle to figure out X session idle time.
Author: Petter Reinholdtsen <pere@debian.org>
Bug-Debian: http://bugs.debian.org/714477
Last-Update: 2014-09-28
--- a/killer
+++ b/killer
@@ -977,6 +977,26 @@
}
+=head2 getX11IdleTime user
+
+Figure out how long a user has been idle in X11. Return the seconds
+of idle time.
+
+=cut
+
+sub getX11IdleTime($) {
+ my $self = shift;
+ my ( $user ) = @_;
+ my $idletime_ms = `su $user -c 'DISPLAY=:0 xprintidle' 2>/dev/null < /dev/null`;
+ chomp $idletime_ms;
+ if ($idletime_ms =~ m/\d+/) {
+ print "Local user $user X idle time is $idletime_ms ms\n" if $debug;
+ return $idletime_ms / 1000;
+ } else {
+ return undef;
+ }
+}
+
=head2 getIdleTime user
Figure out how long a user has been idle. This is accomplished by
@@ -1021,6 +1041,10 @@
$idletime = (time - $statparts[8]);
}
}
+ my $xidletime = $self->getX11IdleTime($user);
+ if (defined $xidletime && $idletime > $xidletime) {
+ $idletime = $xidletime;
+ }
}
return $idletime;
}
|