summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/printer/main.pm1
-rw-r--r--perl-install/printer/printerdrake.pm127
-rwxr-xr-xperl-install/standalone/autosetupprintqueues51
3 files changed, 138 insertions, 41 deletions
diff --git a/perl-install/printer/main.pm b/perl-install/printer/main.pm
index 47f589ca7..1e5e24452 100644
--- a/perl-install/printer/main.pm
+++ b/perl-install/printer/main.pm
@@ -2561,6 +2561,7 @@ sub config_sane() {
# Add HPOJ backend to /etc/sane.d/dll.conf if needed (no individual
# config file /etc/sane.d/hpoj.conf necessary, the HPOJ driver finds the
# scanner automatically)
+ return if (! -f "$::prefix/etc/sane.d/dll.conf");
return if member("hpoj", chomp_(cat_("$::prefix/etc/sane.d/dll.conf")));
eval { append_to_file("$::prefix/etc/sane.d/dll.conf", "hpoj\n") } or
die "can't write SANE config in /etc/sane.d/dll.conf: $!";
diff --git a/perl-install/printer/printerdrake.pm b/perl-install/printer/printerdrake.pm
index b1ab3aac7..ee7fed775 100644
--- a/perl-install/printer/printerdrake.pm
+++ b/perl-install/printer/printerdrake.pm
@@ -620,8 +620,9 @@ sub configure_new_printers {
return 1 if $printer->{expert};
# Wait message
- my $w = $in->wait_message(N("Printerdrake"),
- N("Searching for new printers..."));
+ my $w = $::noX ||
+ $in->wait_message(N("Printerdrake"),
+ N("Searching for new printers..."));
# When HPOJ is running, it blocks the printer ports on which it is
# configured, so we stop it here. If it is not installed or not
@@ -674,9 +675,10 @@ sub configure_new_printers {
spooler => $printer->{SPOOLER},
};
undef $w;
- $w = $in->wait_message(N("Printerdrake"),
- N("Found printer on %s...",
- $p->{port}));
+ $w = $::noX ||
+ $in->wait_message(N("Printerdrake"),
+ N("Found printer on %s...",
+ $p->{port}));
# Do configuration of multi-function devices and look up
# model name in the printer database
setup_common($printer, $in, $p->{val}{DESCRIPTION}, $p->{port},
@@ -686,6 +688,15 @@ sub configure_new_printers {
# Let the user choose the model manually if it could not be
# auto-detected.
if (!$printer->{DBENTRY}) {
+ # Skip this printer if we install print queues in a
+ # background without X access.
+ if ($::noX) {
+ # Delete some variables
+ foreach (qw(OLD_QUEUE QUEUE TYPE str_type DBENTRY ARGS OLD_CHOICE currentqueue NEW)) {
+ $printer->{$_} = "";
+ }
+ next;
+ }
# Set the OLD_CHOICE to a non-existing value
$printer->{OLD_CHOICE} = "XXX";
# Set model selection cursor onto the "Raw Printer" entry.
@@ -706,18 +717,20 @@ Printerdrake could not determine which model your printer %s is. Please choose t
N("If your printer is not listed, choose a compatible (see printer manual) or a similar one."), '|',
[ keys %printer::main::thedb ], $printer->{DBENTRY}) or next;
# Restore wait message
- $w = $in->wait_message(N("Printerdrake"),
- N("Configuring printer on %s...",
- $p->{port}));
+ $w = $::noX ||
+ $in->wait_message(N("Printerdrake"),
+ N("Configuring printer on %s...",
+ $p->{port}));
}
get_printer_info($printer, $in) or next;
setup_options($printer, $in) or next;
my $queue = generate_queuename($printer);
# Change wait message
undef $w;
- $w = $in->wait_message(N("Printerdrake"),
- N("Configuring printer \"%s\"...",
- $printer->{currentqueue}{queue}));
+ $w = $::noX ||
+ $in->wait_message(N("Printerdrake"),
+ N("Configuring printer \"%s\"...",
+ $printer->{currentqueue}{queue}));
# Create the queue
configure_queue($printer, $in) or next;
# If there is no default printer set, let this one get the
@@ -1868,18 +1881,22 @@ sub setup_common {
/usr/sbin/ptal-init
/usr/bin/xojpanel
/usr/sbin/lsusb))) {
- $w = $in->wait_message(N("Printerdrake"),
+ if ($::noX) {
+ $hpojinstallfailed = 1;
+ } else {
+ $w = $in->wait_message(N("Printerdrake"),
N("Installing HPOJ package..."))
- if !$printer->{noninteractive};
- $in->do_pkgs->install('hpoj', 'xojpanel', 'usbutils')
- or do {
- $in->ask_warn(N("Warning"),
- N("Could not install the %s packages!",
- "HPOJ") . " " .
- N("Only printing will be possible on the %s.",
- $makemodel));
- $hpojinstallfailed = 1;
- };
+ if !$printer->{noninteractive};
+ $in->do_pkgs->install('hpoj', 'xojpanel', 'usbutils')
+ or do {
+ $in->ask_warn(N("Warning"),
+ N("Could not install the %s packages!",
+ "HPOJ") . " " .
+ N("Only printing will be possible on the %s.",
+ $makemodel));
+ $hpojinstallfailed = 1;
+ };
+ }
}
# Configure and start HPOJ
undef $w;
@@ -1888,12 +1905,12 @@ sub setup_common {
N("Checking device and configuring HPOJ..."))
if !$printer->{noninteractive};
- eval { $ptaldevice = printer::main::configure_hpoj(
- $device, @autodetected) if !$hpojinstallfailed };
+ eval { $ptaldevice = printer::main::configure_hpoj
+ ($device, @autodetected) if !$hpojinstallfailed };
if (my $err = $@) {
- warn qq(HPOJ conf faillure: "$err");
- log::l(qq(HPOJ conf faillure: "$err"));
+ warn qq(HPOJ conf failure: "$err");
+ log::l(qq(HPOJ conf failure: "$err"));
}
if ($ptaldevice) {
@@ -1930,10 +1947,11 @@ sub setup_common {
N("Printerdrake"),
N("Installing SANE packages..."))
if !$printer->{noninteractive};
- $in->do_pkgs->install('sane-backends',
- 'sane-frontends',
- 'scanner-gui',
- 'libsane-hpoj1')
+ $::noX
+ or $in->do_pkgs->install('sane-backends',
+ 'sane-frontends',
+ 'scanner-gui',
+ 'libsane-hpoj1')
or do {
$in->ask_warn(N("Warning"),
N("Could not install the %s packages!",
@@ -1967,7 +1985,8 @@ sub setup_common {
N("Printerdrake"),
N("Installing mtools packages..."))
if !$printer->{noninteractive};
- $in->do_pkgs->install('mtools', 'mtoolsfm')
+ $::noX
+ or $in->do_pkgs->install('mtools', 'mtoolsfm')
or do {
$in->ask_warn(N("Warning"),
N("Could not install the %s packages!",
@@ -2711,7 +2730,7 @@ sub get_printer_info {
if ($drivertype eq 'Z23') { $drivertype = 'Z33' }
$drivertype = lc($drivertype);
if (!files_exist("/usr/local/lexmark/$drivertype/$drivertype")) {
- eval { $in->do_pkgs->install("lexmark-drivers-$drivertype") };
+ eval { $::noX or $in->do_pkgs->install("lexmark-drivers-$drivertype") };
}
if (!files_exist("/usr/local/lexmark/$drivertype/$drivertype")) {
# Driver installation failed, probably we do not have
@@ -3709,8 +3728,9 @@ sub assure_default_printer_is_set {
my ($printer, $in) = @_;
if (defined($printer->{SPOOLER}) && $printer->{SPOOLER} &&
(!defined($printer->{DEFAULT}) || !$printer->{DEFAULT})) {
- my $_w = $in->wait_message(N("Printerdrake"),
- N("Setting Default Printer..."));
+ my $_w = $::noX ||
+ $in->wait_message(N("Printerdrake"),
+ N("Setting Default Printer..."));
$printer->{DEFAULT} = printer::default::get_printer($printer);
if ($printer->{DEFAULT}) {
# If a CUPS system has only remote printers and no default
@@ -3857,6 +3877,23 @@ sub init {
# Initialization of Printerdrake and queue auto-installation
+ # This subroutine is called on every start of printerdrake
+ # directly, from mcc, during installation, or for automatic print
+ # queue setup in the background, triggered when
+ # hotplug/udev/dynamic (script /etc/dynamic/script/lp.script)
+ # discovers a new printer being connected and turned on.
+
+ # In the latter case (background queue installation) only this
+ # subroutine is called as only the automatic, non-interactive
+ # print queue creation is needed. This must be totally
+ # non-interactive and cannot open any window on the X desktop,
+ # also packages cannot be installed, as the background process
+ # cannot ask the user to insert CDs. To reach this state of
+ # absolute silence, there is the global variable $::noX. If it is
+ # set, all interactivity or wait message is suppressed. If
+ # interactivity is required, the operation requiring interactivity
+ # will be skipped.
+
# Save the user mode, so that the same one is used on the next start
# of Printerdrake
printer::main::set_usermode($printer->{expert});
@@ -3864,11 +3901,11 @@ sub init {
# printerdrake does not work without foomatic, and for more
# convenience we install some more stuff
{
- my $_w = $in->wait_message(N("Printerdrake"),
- N("Checking installed software..."));
+ my $_w = $::noX ||
+ $in->wait_message(N("Printerdrake"),
+ N("Checking installed software..."));
if (!$::testing &&
!files_exist(qw(/usr/bin/foomatic-configure
- /usr/lib/perl5/vendor_perl/5.8.0/Foomatic/DB.pm
/usr/bin/foomatic-rip
/usr/share/foomatic/db/source/driver/ljet4.xml
/usr/bin/escputil
@@ -3876,6 +3913,9 @@ sub init {
/usr/bin/nmap
/usr/bin/scli
))) {
+ # Do not try to install packages when installing print queues
+ # in the background, simply do not install queues
+ exit 0 if $::noX;
$in->do_pkgs->install('foomatic-db-engine', 'foomatic-filters',
'foomatic-db', 'printer-utils',
'printer-testpages', 'nmap', 'scli')
@@ -3887,15 +3927,20 @@ sub init {
};
}
- # only experts should be asked for the spooler
- $printer->{SPOOLER} ||= 'cups' if !$printer->{expert};
+ # only experts should be asked for the spooler also for background
+ # installation of print it should not be asked for the spooler,
+ # as this feature is only supported for CUPS.
+ $printer->{SPOOLER} ||= 'cups'
+ if !$printer->{expert} || $::noX;
}
# If we have chosen a spooler, install it and mark it as default
- # spooler
+ # spooler. Spooler installation is ommitted on background queue
+ # installation, because this only works when CUPS is already running
if ($printer->{SPOOLER}) {
- return 0 unless install_spooler($printer, $in, $upNetwork);
+ return 0 unless ($::noX ||
+ install_spooler($printer, $in, $upNetwork));
printer::default::set_spooler($printer);
}
diff --git a/perl-install/standalone/autosetupprintqueues b/perl-install/standalone/autosetupprintqueues
new file mode 100755
index 000000000..85a688af5
--- /dev/null
+++ b/perl-install/standalone/autosetupprintqueues
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2003-2004 Mandrakesoft
+#
+# Till Kamppeter <till@mandrakesoft.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License Version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+use strict;
+use lib qw(/usr/lib/libDrakX);
+use standalone;
+use printer::printerdrake;
+use printer::main;
+
+# Data structure for printer data
+my $printer;
+
+# Dummy variable needed to call the subroutines of the printerdrak.pm module
+# The real data structure is not needed for non-interactive mode
+my $in;
+
+# Run the subroutines of printerdrake.pm in non-interactive non-X mode
+$::noX = 1;
+
+# Do not let printerdrake ask for the spooler
+$printer->{SPOOLER} ||= 'cups';
+
+# Were we in expert mode last time?
+$printer->{expert} = printer::main::get_usermode();
+
+# Do not auto-install queues in expert mode
+exit 0 if $printer->{expert};
+
+# Get info about already installed print queues
+eval { $printer = printer::main::getinfo('') };
+
+# Run the automatic, non-interactive print queue setup of printerdrake
+printer::printerdrake::init($printer, $in);
+