web-dev-qa-db-fra.com

Java impression avec CUPS: imprimantes non trouvées

J'essaie d'installer un serveur Tomcat (8.5.5.0, Java 1.8.0_101) sur Ubuntu (16.04) et d'imprimer sur des imprimantes partagées sur un serveur d'impression Windows.

J'ai configuré avec succès plusieurs imprimantes avec CUPS (2.1.3) et SAMBA (4.3.11). L'impression à partir de la ligne de commande fonctionne bien.

Dans mon application Java, lorsque j'essaie de rechercher des imprimantes comme celle-ci:

PrintService[] ps = PrintServiceLookup.lookupPrintServices(null, null);

Cela me donne un tableau vide. Mais si je configure une imprimante par défaut ("DefaultPrinter" dans /etc/cups/printers.conf), le tableau ne contient que cette imprimante.

Donc, actuellement, je ne peux imprimer que sur l’imprimante par défaut, mais je veux pouvoir imprimer sur n’importe quelle imprimante.

Merci de votre aide.

2
user630729

J'ai eu le même problème et je viens de trouver la solution. Je ne pense pas que ce soit la meilleure façon de résoudre le problème, mais au moins cela fonctionne pour moi.

J'ai d'abord trouvé le problème en essayant de configurer le service CUPS sur un serveur sans tête Ubuntu 16.04. Sur mon bureau Ubuntu 16.04, l’imprimante de référence fonctionne même sans configuration d’imprimante par défaut. Après une enquête plus approfondie, j'ai constaté que le problème était survenu après la modification de la configuration de CUPS pour permettre l'administration à distance.

Configuration originale de cupsd.conf:

# Only listen for connections from the local machine
Listen localhost:631
Listen /var/run/cups.sock

Configuration modifiée pour activer l'administration à distance (ne fonctionne pas):

# Only listen for connections from the local machine
Listen *:631
Listen /var/run/cups.sock

Il semble que Java doive se connecter au service CUPS à l'aide de localhost, afin d'activer l'administration à distance et de fournir également une connexion localhost pour Java:

# Only listen for connections from the local machine
Listen localhost:631
Listen /var/run/cups.sock
Listen 192.168.0.100:631

Je ne comprends toujours pas pourquoi utiliser Listen *:631 ne peut pas fournir de connexion localhost pour Java, aussi la solution de contournement consiste-t-il à ajouter une configuration pour écouter mon adresse IP du serveur.

Voici mon code Java que j'ai utilisé pour interroger l'imprimante CUPS

public class TestPrinter {
    public static void main(String[] args) {
        PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
        System.out.println("Number of print services: " + printServices.length);

        System.out.println("Available printer: ");
        PrintService mPrintService = null;        
        for (PrintService printer : printServices) {
            System.out.println(printer.getName());
        }

        PrintService defaultPrinter = PrintServiceLookup.lookupDefaultPrintService();
        if (defaultPrinter != null) {
            System.out.println("Default printer: " + defaultPrinter.getName());        
        }
    }   
}
3
hadyatmo