Я пытаюсь установить сервер 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), затем массив содержит только этот принтер.
Таким образом, в настоящее время я могу распечатать только к принтеру по умолчанию, но я хочу смочь распечатать к любому принтеру.
Спасибо за помощь.
Я имел ту же проблему и просто нашел решение. Я не думаю, что это - лучший способ решить проблему, но по крайней мере это работает на меня.
я сначала нашел проблему при попытке настроить сервис 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());
}
}
}