Печать Java с CUPS: принтеры, не найденные

Я пытаюсь установить сервер Tomcat (8.5.5.0, Java 1.8.0_101) на Ubuntu (16.04) и печати к общим принтерам на сервере печати Windows.

Я успешно настроил несколько принтеров с CUPS (2.1.3) и Samba (4.3.11). Печать из командной строки хорошо работает.

В моем JAVA-приложении, когда я пробую к принтерам поиска как это:

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

Это дает мне пустой массив. Но если я установил принтер по умолчанию ("DefaultPrinter" в/etc/cups/printers.conf), затем массив содержит только этот принтер.

Таким образом, в настоящее время я могу распечатать только к принтеру по умолчанию, но я хочу смочь распечатать к любому принтеру.

Спасибо за помощь.

2
задан 14 December 2016 в 10:52

1 ответ

Я имел ту же проблему и просто нашел решение. Я не думаю, что это - лучший способ решить проблему, но по крайней мере это работает на меня.

я сначала нашел проблему при попытке настроить сервис CUPS на бездисплейный сервер Ubuntu 16.04. На моей настольной Ubuntu 16.04 принтер поиска работает даже, не устанавливая принтер по умолчанию. После дальнейшего расследования я нашел, что проблема произошла после того, как я изменил конфигурацию CUPS для включения удаленного администрирования.

Исходная конфигурация от cupsd.conf:

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

конфигурация Modifed для включения удаленного администрирования (не работающий):

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

кажется, что Java должен соединиться с сервисом CUPS с помощью localhost, так чтобы включить удаленное администрирование и также обеспечить localhost соединение для Java:

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

я все еще не понимаю, почему использование Listen *:631 не может обеспечить localhost соединение для Java, таким образом, мое обходное решение должно добавить конфигурацию для прислушиваний к моему IP-адресу сервера.

Вот мой код Java, что я раньше запрашивал принтер 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
ответ дан 2 December 2019 в 02:48

Другие вопросы по тегам:

Похожие вопросы: