1package FusionInventory::Agent::Task::Inventory::Generic::Printers; 2 3use strict; 4use warnings; 5 6use parent 'FusionInventory::Agent::Task::Inventory::Module'; 7 8use English qw(-no_match_vars); 9use UNIVERSAL::require; 10 11use FusionInventory::Agent::Tools; 12 13sub isEnabled { 14 my (%params) = @_; 15 16 return 0 if $params{no_category}->{printer}; 17 18 # we use system profiler on MacOS 19 return 0 if $OSNAME eq 'darwin'; 20 21 # we use WMI on Windows 22 return 0 if $OSNAME eq 'MSWin32'; 23 24 Net::CUPS->require(); 25 if ($EVAL_ERROR) { 26 $params{logger}->debug( 27 "Net::CUPS Perl module not available, unable to retrieve printers" 28 ); 29 return 0; 30 } 31 32 if ($Net::CUPS::VERSION < 0.60) { 33 $params{logger}->debug( 34 "Net::CUPS Perl module too old " . 35 "(available: $Net::CUPS::VERSION, required: 0.60), ". 36 "unable to retrieve printers" 37 ); 38 return 0; 39 } 40 41 return 1; 42} 43 44sub doInventory { 45 my (%params) = @_; 46 47 my $inventory = $params{inventory}; 48 49 my $cups = Net::CUPS->new(); 50 my @printers = $cups->getDestinations(); 51 52 foreach my $printer (@printers) { 53 my $uri = $printer->getUri(); 54 my $name = $uri; 55 $name =~ s/^.*\/\/([^\.]*).*$/$1/eg ; 56 $name =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; 57 $inventory->addEntry( 58 section => 'PRINTERS', 59 entry => { 60 NAME => $name, 61 PORT => $uri, 62 DESCRIPTION => $printer->getDescription(), 63 DRIVER => $printer->getOptionValue( 64 "printer-make-and-model" 65 ), 66 } 67 ); 68 } 69 70} 71 721; 73