xref: /titanic_52/usr/src/cmd/print/selector/desktop-print-management-applet (revision 0a0e9771ca0211c15f3ac4466b661c145feeb9e4)
1#!/usr/perl5/bin/perl
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23# Use is subject to license terms.
24#
25#
26use Errno qw(EINTR :POSIX);
27
28my $SVC_CUPS_SCHEDULER = 'cups/scheduler';
29my $SVCPROP = '/usr/bin/svcprop';
30my $reexec = 0;
31
32sub svcprop {
33        local ($fmri, $property) = @_;
34        my $FH;
35
36        open($FH, "$SVCPROP -C -p $property $fmri 2>/dev/null |");
37        $result = <$FH>;
38        close($FH);
39
40        return ($result);
41}
42
43sub print_service {
44        my $service;
45
46        $service = svcprop("$SVC_CUPS_SCHEDULER:default", "general/active");
47        ($service =~ /true/) && ($service = 'cups') || ($service = 'lp');
48
49        return ($service);
50}
51
52sub kill_running_applets {
53	$reexec = 1;
54        # cups applet daemon
55        system("pkill -f '/system-config-printer/applet.py'");
56        # lp applet daemon
57        system("pkill ospm-applet");
58}
59
60sub handle_signal {
61        kill_running_applets ();
62}
63
64$SIG{USR1} = \&handle_signal;
65
66my $pid = fork();
67if (! defined($pid)) {
68	die "Error: fork() failed\n";
69}
70elsif ($pid == 0) {
71	my $service =  print_service();
72        if ($service eq 'lp') {
73                exec('/usr/lib/lp/bin/desktop-print-management-applet');
74        }
75        else {
76                exec('/usr/lib/cups/bin/desktop-print-management-applet');
77        }
78
79}
80else {
81	my $retid;
82	while ((($retid = waitpid($pid, 0)) < 0) && $!{EINTR}) {
83	}
84
85	if ($retid == $pid && $reexec) {
86        	exec('/usr/bin/desktop-print-management-applet');
87	}
88}
89
90exit(0);
91