summaryrefslogtreecommitdiffstats
path: root/draklive-install.wrapper
diff options
context:
space:
mode:
Diffstat (limited to 'draklive-install.wrapper')
-rwxr-xr-xdraklive-install.wrapper26
1 files changed, 20 insertions, 6 deletions
diff --git a/draklive-install.wrapper b/draklive-install.wrapper
index 5a8f4eb..1da9f0e 100755
--- a/draklive-install.wrapper
+++ b/draklive-install.wrapper
@@ -1,6 +1,20 @@
-#!/bin/sh
-if [[ "$UID" != "0" ]] ; then
- /usr/bin/pkexec /usr/sbin/draklive-install-lock-storage "$@"
- exit $?
-fi
-exec /usr/sbin/draklive-install-lock-storage "$@"
+#!/bin/perl
+use Net::DBus;
+
+if ($>) {
+ if (system('ps -C xscreensaver') == 0) {
+ # xscreensaver doesn't implement the freedesktop API, so we just have to kill it,
+ # We expect the user to reboot after the install completes, so don't bother to
+ # reenable it.
+ system('xscreensaver-command -exit');
+ } else {
+ my $bus = Net::DBus->session;
+ my $service = $bus && $bus->get_service('org.freedesktop.ScreenSaver');
+ my $manager = $service && $service->get_object('/ScreenSaver', 'org.freedesktop.ScreenSaver');
+ my $cookie = $manager && $manager->Inhibit('draklive-install', 'Install in progress');
+ # The screensaver will be automatically uninhibited when this process exits.
+ }
+ my $status = system("/usr/bin/pkexec /usr/sbin/draklive-install-lock-storage @ARGV");
+ exit($status);
+}
+exec("/usr/sbin/draklive-install-lock-storage @ARGV");