Eu tive o mesmo problema e encontrei a solução. Eu não acho que essa é a melhor maneira de resolver o problema, mas pelo menos está funcionando para mim.
Primeiro encontrei o problema ao tentar configurar o serviço CUPS em um servidor Ubuntu 16.04 sem cabeçalho. Na minha área de trabalho Ubuntu 16.04, a impressora de pesquisa está funcionando mesmo sem configurar uma impressora padrão. Após investigações posteriores, descobri que o problema ocorreu depois que mudei a configuração do CUPS para permitir a administração remota.
Configuração original de cupsd.conf
:
# Only listen for connections from the local machine
Listen localhost:631
Listen /var/run/cups.sock
Configuração modificada para permitir a administração remota (não funciona):
# Only listen for connections from the local machine
Listen *:631
Listen /var/run/cups.sock
Parece que o Java precisa se conectar ao serviço CUPS usando localhost, portanto, para permitir a administração remota e também fornecer conexão localhost para Java:
# Only listen for connections from the local machine
Listen localhost:631
Listen /var/run/cups.sock
Listen 192.168.0.100:631
Eu ainda não entendi porque usar Listen *:631
não pode fornecer conexão localhost para Java, então minha solução alternativa é adicionar configuração para ouvir o endereço IP do meu servidor.
Aqui está meu código Java que usei para consultar a impressora 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());
}
}
}