summaryrefslogtreecommitdiffstats
path: root/perl-install/printerdrake.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/printerdrake.pm')
-rw-r--r--perl-install/printerdrake.pm162
1 files changed, 138 insertions, 24 deletions
diff --git a/perl-install/printerdrake.pm b/perl-install/printerdrake.pm
index bb3acd9fc..cd8ee038b 100644
--- a/perl-install/printerdrake.pm
+++ b/perl-install/printerdrake.pm
@@ -32,7 +32,8 @@ sub setup_local($$$) {
my @str = ();
my @parport = auto_detect($in);
foreach (@parport) {
- push @str, _("A printer, model \"%s\", has been detected on ", $_->{val}{DESCRIPTION}) . $_->{port};
+ $_->{val}{DESCRIPTION} and push @str, _("A printer, model \"%s\", has been detected on ",
+ $_->{val}{DESCRIPTION}) . $_->{port};
}
if (@str) {
@port = map { $_->{port} } @parport;
@@ -47,7 +48,10 @@ sub setup_local($$$) {
_("Printer Device") => {val => \$printer->{DEVICE}, list => \@port } ],
);
- #- select right DBENTRY according to device selected.
+ #- make the DeviceURI from DEVICE.
+ $printer->{DeviceURI} = ($printer->{DEVICE} =~ /usb/ ? "usb:" : "parallel:") . $printer->{DEVICE};
+
+ #- select right DBENTRY according to device selected. #- TODO with cups (keep all configuration files)
foreach (@parport) {
$printer->{DEVICE} eq $_->{port} or next;
$printer->{DBENTRY} = $printer::descr_to_db{common::bestMatchSentence2($parport[0]{val}{DESCRIPTION},
@@ -56,6 +60,18 @@ _("Printer Device") => {val => \$printer->{DEVICE}, list => \@port } ],
1;
}
+sub setup_uri_local($$$) {
+ my ($printer, $in, $install) = @_;
+
+ my @direct_uri = printer::get_direct_uri();
+ return if !$in->ask_from_entries_refH(_("Local Printer Device (URI)"),
+ _("What URI device is your printer connected to
+(note that parallel:/dev/lp0 is equivalent to LPT1:)?"), [
+_("Printer Device URI") => { val => \$printer->{DeviceURI}, list => \@direct_uri } ],
+ );
+ 1;
+}
+
sub setup_remote($$$) {
my ($printer, $in, $install) = @_;
@@ -66,6 +82,8 @@ on that server which jobs should be placed in."), [
_("Remote hostname") => \$printer->{REMOTEHOST},
_("Remote queue") => \$printer->{REMOTEQUEUE}, ],
);
+ #- make the DeviceURI from DEVICE.
+ $printer->{DeviceURI} = "lpd://$printer->{REMOTEHOST}/$printer->{REMOTEQUEUE}";
}
sub setup_smb($$$) {
@@ -92,7 +110,16 @@ _("Workgroup") => \$printer->{SMBWORKGROUP} ],
return 0;
},
);
+ #- make the DeviceURI from DEVICE, try to probe for available variable to build a some suitable URI.
+ #- Yes, SMBWORKGROUP is not used here, seems to be not usefull for cups.
+ $printer->{DeviceURI} = join '', ("smb://",
+ ($printer->{SMBUSER} && ($printer->{SMBUSER} .
+ ($printer->{SMBPASSWD} && ":$printer->{SMBPASSWD}") . "@")),
+ ($printer->{SMBHOST} || $printer->{SMBHOSTIP}),
+ "/$printer->{SMBSHARE}");
+
&$install('samba');
+ $printer->{mode} eq 'cups' and printer::restart_queue($printer);
1;
}
@@ -113,8 +140,74 @@ _("Password") => {val => \$printer->{NCPPASSWD}, hidden => 1} ],
1;
}
+sub setup_uri_net($$$) {
+ my ($printer, $in, $install) = @_;
+
+ return if !$in->ask_from_entries_refH(_("Network Printer Options (URI)"),
+_("Choose the right Device URI for a network printer or a local file. Examples:
+ file:/path/to/filename.prn
+ http://hostname:631/ipp/port1
+ ipp://hostname/ipp/port1
+ lpq://hostname/queue
+ socket://hostname
+ socket://hostname:9100"), [
+_("Printer Device URI") => \$printer->{DeviceURI} ],
+ );
+ 1;
+}
+
sub setup_gsdriver($$$;$) {
my ($printer, $in, $install, $upNetwork) = @_;
+ for ($printer->{mode}) {
+ /cups/ && return setup_gsdriver_cups($printer, $in, $install, $upNetwork);
+ /lpr/ && return setup_gsdriver_lpr($printer, $in, $install, $upNetwork);
+ die "mode not chosen to configure a printer";
+ }
+}
+
+sub setup_gsdriver_cups($$$;$) {
+ my ($printer, $in, $install, $upNetwork) = @_;
+ my $testpage = "/usr/share/cups/data/testprint.ps";
+
+ while (1) {
+ $printer->{cupsDescr} ||= printer::get_descr_from_ppd($printer);
+ print ">> $printer->{cupsDescr}\n";
+ $printer->{cupsDescr} = $in->ask_from_treelist('', _("What type of printer do you have?"), '|',
+ [ keys %printer::descr_to_ppd ], $printer->{cupsDescr}) or return;
+ $printer->{cupsPPD} = $printer::descr_to_ppd{$printer->{cupsDescr}};
+
+ $printer->{complete} = 1;
+ printer::copy_printer_params($printer, $printer->{configured}{$printer->{QUEUE}} ||= {});
+ printer::configure_queue($printer);
+ $printer->{complete} = 0;
+
+ if ($in->ask_yesorno('', _("Do you want to test printing?"), 1)) {
+ my @lpq_output;
+ {
+ my $w = $in->wait_message('', _("Printing test page(s)..."));
+
+ $upNetwork and do { &$upNetwork(); undef $upNetwork; sleep(1) };
+ @lpq_output = printer::print_pages($printer, $testpage);
+ }
+
+ if (@lpq_output) {
+ $in->ask_yesorno('', _("Test page(s) have been sent to the printer daemon.
+This may take a little time before printer start.
+Printing status:\n%s\n\nDoes it work properly?", "@lpq_output"), 1) and last;
+ } else {
+ $in->ask_yesorno('', _("Test page(s) have been sent to the printer daemon.
+This may take a little time before printer start.
+Does it work properly?"), 1) and last;
+ }
+ } else {
+ last;
+ }
+ }
+ $printer->{complete} = 1;
+}
+
+sub setup_gsdriver_lpr($$$;$) {
+ my ($printer, $in, $install, $upNetwork) = @_;
my $action;
my @action = qw(ascii ps both done);
my %action = (
@@ -132,13 +225,13 @@ sub setup_gsdriver($$$;$) {
[ @printer::entry_db_description ],
{ %printer::descr_to_help },
$printer::db_to_descr{$printer->{DBENTRY}},
- )
- };
+ )
+ };
}; $@ =~ /^ask_from_list cancel/ and return;
my %db_entry = %{$printer::thedb{$printer->{DBENTRY}}};
- #- specific printer driver to install.
+ #- specific printer drivers to install.
&$install('pnm2ppa') if $db_entry{GSDRIVER} eq 'ppa';
my @list_res = @{$db_entry{RESOLUTION} || []};
@@ -209,8 +302,8 @@ _("Extra Text options") => \$printer->{TEXTONLYOPTIONS},
my $w = $in->wait_message('', _("Printing test page(s)..."));
$upNetwork and do { &$upNetwork(); undef $upNetwork; sleep(1) };
- printer::restart_queue(printer::default_queue($printer->{QUEUE}));
- @lpq_output = printer::print_pages(printer::default_queue($printer->{QUEUE}), @testpages);
+ printer::restart_queue($printer);
+ @lpq_output = printer::print_pages($printer, @testpages);
}
if (@lpq_output) {
@@ -227,7 +320,7 @@ Does it work properly?"), 1) ? 'done' : 'change';
$printer->{complete} = 1;
}
-#- Program entry point.
+#- Program entry point for configuration with lpr or cups (stored in $mode).
sub main($$$;$) {
my ($printer, $in, $install, $upNetwork) = @_;
my ($queue, $continue) = ('', 1);
@@ -251,51 +344,71 @@ You can add some more or change the existing ones."),
}
$queue eq 'Done' and last;
- &$install('rhs-printfilters') unless $::testing;
- printer::read_printer_db();
+ #- switch according to what is being installed: cups, lpr or other.
+ for ($printer->{mode}) {
+ /cups/ && do { &$install('cups') unless $::testing;
+ printer::poll_ppd_base(); last };
+ /lpr/ && do { &$install('rhs-printfilters') unless $::testing;
+ printer::read_printer_db(); last };
+ }
printer::copy_printer_params($printer->{configured}{$queue}, $printer) if $printer->{configured}{$queue};
$printer->{OLD_QUEUE} = $printer->{QUEUE} = $queue; #- keep in mind old name of queue (in case of changing)
while ($continue) {
- $printer->{TYPE} = 'LOCAL' unless $printer::printer_type_inv{$printer->{TYPE}};
+ $printer::printer_type_inv{$printer->{TYPE}} or $printer->{TYPE} = printer::default_printer_type($printer);
$printer->{str_type} = $printer::printer_type_inv{$printer->{TYPE}};
if ($::beginner) {
$printer->{str_type} =
$in->ask_from_list_(_("Select Printer Connection"),
_("How is the printer connected?"),
- [ keys %printer::printer_type ],
+ [ printer::printer_type($printer) ],
$printer->{str_type},
);
} else {
- $in->ask_from_entries_refH([_("Select Printer Connection"), _("Ok"), $::beginner ? () : _("Remove queue")],
+ if ($printer->{mode} eq 'cups') {
+ $in->ask_from_entries_refH([_("Select Printer Connection"), _("Ok"), $::beginner ? () : _("Remove queue")],
+_("Every printer managed by CUPS need a name (for example lp).
+Other parameter like the description of the printer or its location
+can be defined. What name should be used for this printer and
+how is the printer connected?"), [
+_("Name of printer") => { val => \$printer->{QUEUE} },
+_("Description") => { val => \$printer->{Info} },
+_("Location") => { val => \$printer->{Location} },
+_("Printer Connection") => { val => \$printer->{str_type}, not_edit => 1, list => [ printer::printer_type($printer) ] },
+ ],
+ ) or printer::remove_queue($printer), $continue = 1, last;
+ } else {
+ $in->ask_from_entries_refH([_("Select Printer Connection"), _("Ok"), $::beginner ? () : _("Remove queue")],
_("Every print queue (which print jobs are directed to) needs a
name (often lp) and a spool directory associated with it. What
name and directory should be used for this queue and how is the printer connected?"), [
_("Name of queue") => { val => \$printer->{QUEUE} },
_("Spool directory") => { val => \$printer->{SPOOLDIR} },
-_("Printer Connection") => { val => \$printer->{str_type}, not_edit => 1, list => [ keys %printer::printer_type ] },
+_("Printer Connection") => { val => \$printer->{str_type}, not_edit => 1, list => [ printer::printer_type($printer) ] },
],
changed => sub {
- $printer->{SPOOLDIR} = "$printer::spooldir/" .
- printer::default_queue($printer->{QUEUE}) unless $_[0];
+ $printer->{SPOOLDIR} = printer::default_spooldir($printer) unless $_[0];
}
- ) or delete $printer->{configured}{$queue}, $continue = 1, last;
+ ) or printer::remove_queue($printer), $continue = 1, last;
+ }
}
$printer->{TYPE} = $printer::printer_type{$printer->{str_type}};
$continue = 0;
- for ($printer->{TYPE}) {
- /LOCAL/ and setup_local ($printer, $in, $install) and last;
- /REMOTE/ and setup_remote($printer, $in, $install) and last;
- /SMB/ and setup_smb ($printer, $in, $install) and last;
- /NCP/ and setup_ncp ($printer, $in, $install) and last;
+ for ($printer->{TYPE}) { #- chooser lpr/cups ? not good !
+ /URI_LOCAL/ and setup_uri_local($printer, $in, $install) and last;
+ /URI_NET/ and setup_uri_net ($printer, $in, $install) and last;
+ /LOCAL/ and setup_local ($printer, $in, $install) and last;
+ /REMOTE/ and setup_remote ($printer, $in, $install) and last; #- make common for cups/lpr ?
+ /SMB/ and setup_smb ($printer, $in, $install) and last; #- make common for cups/lpr ?
+ /NCP/ and setup_ncp ($printer, $in, $install) and last;
$continue = 1; last;
}
}
- #- configure ghostscript driver to be used.
- if (!$continue && setup_gsdriver($printer, $in, $install, $printer->{TYPE} ne 'LOCAL' && $upNetwork)) {
+ #- configure specific part according to lpr/cups.
+ if (!$continue && setup_gsdriver($printer, $in, $install, $printer->{TYPE} !~ /LOCAL/ && $upNetwork)) {
delete $printer->{OLD_QUEUE}
if $printer->{QUEUE} ne $printer->{OLD_QUEUE} && $printer->{configured}{$printer->{QUEUE}};
$continue = !$::beginner;
@@ -304,3 +417,4 @@ _("Printer Connection") => { val => \$printer->{str_type}, not_edit => 1, list =
}
}
}
+