Вопрос или проблема
На работе у нас есть куча принтеров, подключенных к центральному серверу CUPS во внутренней сети.
Используя Ubuntu 16.04 с Unity DE, когда я пытаюсь что-то напечатать в приложении, используя системный диалог печати GTK, как показано на скриншоте ниже, я вижу все доступные принтеры, некоторые из них даже со статусом “не осталось тонера”. Какой бы принтер я ни выбрал, кнопка “Печать” остается заблокированной, и статус принтера показывается как “Получение информации о принтере…” бесконечно.
Однако принтеры работают нормально, так как я могу корректно печатать в приложениях, которые не используют диалог GTK, таких как Chromium, у которого есть встроенный диалог печати. Проблема только с диалогом GTK.
Я нашел несколько старых отчетов об ошибках, описывающих примерно такое же поведение:
- GTK print dialog не позволяет печатать и не показывает опции удаленного DNS-SD/Bonjour принтера (2012, исправление выпущено для Ubuntu 12.10, по-видимому)
- Диалог принтера застревает на “Получении информации о принтере…” (2014, не решена)
Я также где-то читал, что для этой функциональности требуется пакет libnss-mdns
, но он отсутствует в некоторых установках. Тем не менее, я проверил, что у меня установлена версия 0.10-7
этой библиотеки.
Как еще я могу провести диагностику этой проблемы? Есть ли обходные пути или исправления?
Та же проблема в более простой среде (один принтер) на Ubuntu 18.x
Решено с помощью
sudo perl -i.bak -pe 's/^(Listen .*cups\.sock)/#$1/' /etc/cups/cupsd.conf
sudo /etc/init.d/cups restart
источник Как ускорить “Получение информации о принтере”?. Вы также можете обратиться к очень подробным DebuggingPrintingProblems
Я решил это, добавив принтер в настройках.
Как-то принтер появляется дважды. Один раз как действительно используемый принтер, второй раз как принтер, который требует извлечения информации.
Я также столкнулся с этой проблемой, оказалось, что мой принтер был добавлен с недоступным mdns-адресом через cups.
Я вручную добавил принтер по IP, и это решило проблему. Вы, вероятно, можете изменить конфигурацию cups и добиться того же, но это выходит за пределы моих знаний.
Ответ или решение
Теория (Theory)
Проблема, описанная в вашем случае, связана с использованием диалога печати GTK на операционной системе Ubuntu 16.04 с окружением рабочего стола Unity. Это приводит к тому, что кнопка «Печать» остаётся заблокированной, а состояние принтера отображается как «Получение информации о принтере…», что происходит бесконечно. Данная проблема локализована именно в диалоге GTK, так как печать через другие приложения, не использующие этот диалог (например, Chromium с встроенным диалогом печати), проходит без проблем.
Такая ситуация может возникать по нескольким причинам. Одна из основных – недоразумение в связях между CUPS (Common UNIX Printing System) и диалогом печати GTK. Это может быть связано с неверными или отсутствующими конфигурационными настройками, когда система не может правильно синхронизировать информацию между конфигурацией CUPS и GTK.
Примеры (Example)
-
Отчёты об ошибках:
- Старые отчёты об ошибках, отмеченные вами, указывают, что проблема не является новой и наблюдалась ранее. Например, баг с номером 1053891 в системе управления ошибками Launchpad был зарегистрирован в 2012 году.
- Другой отчёт об ошибке (1378438) также описывает аналогичное поведение с застреванием на этапе «Получение информации о принтере…».
-
Решения, использованные другими пользователями:
- Один из пользователей указал, что проблема была решена путём изменения конфигурации CUPS (в частности, изменения в файле
/etc/cups/cupsd.conf
, связанные с параметрами Listen и перезапуском службы CUPS). - Другой пользователь отметил, что физические пути к принтерам могут быть настроены неправильно, когда CUPS использует не достижимые адреса (например, mdns). В этом случае, ручное добавление принтера по IP-адресу помогло решить проблему.
- Один из пользователей указал, что проблема была решена путём изменения конфигурации CUPS (в частности, изменения в файле
Применение (Application)
Для решения и дальнейшего устранения проблемы, рекомендовал бы следующее:
-
Проверка доступности и правильности настроек CUPS:
- Убедитесь, что у вас установлена и правильно функционирует библиотека
libnss-mdns
, отвечающая за сетевое обнаружение принтеров. - Перейдите в файл конфигурации CUPS (
/etc/cups/cupsd.conf
) и проверьте настройки параметра Listen. Отключение локального сокета в конфигурации может помочь решить проблему.sudo perl -i.bak -pe 's/^(Listen .*cups\.sock)/#$1/' /etc/cups/cupsd.conf sudo /etc/init.d/cups restart
- После внесения изменений в конфигурационный файл обязательно перезапустите сервис CUPS.
- Убедитесь, что у вас установлена и правильно функционирует библиотека
-
Проверка и добавление принтеров:
- Проверьте, какие версии принтеров зарегистрированы в системе, возможно, принтер отображается дважды: как работающий и как требующий получения информации. Убедитесь, что выбранная версия — это правильно настроенный принтер.
- Если принтер добавлен с недоступным mdns адресом, попробуйте вручную добавить его по IP-адресу.
-
Отладка и диагностика:
- Используйте инструменты отладки печатных проблем в Ubuntu, которые могут предоставить больше информации об ошибках во время выполнения.
- Запустите диагностику CUPS через веб-интерфейс (http://localhost:631), где можно просмотреть детальную информацию о состоянии сервера печати и очередей.
Таким образом, комбинируя вышеописанные шаги, можно локализовать и решить проблему с застреванием на этапе «Получение информации о принтере…» в диалоге печати GTK. Каждый шаг требует аккуратного выполнения и проверки, чтобы гарантировать полное её устранение.