Lpadmin не удается подключиться к серверу неправильный дескриптор файла

Обновлено: 04.07.2024

14 сентября 2021 года Microsoft выпустили ряд обновлений для Windows 10. После установки этих обновлений, пользователи могут столкнуться с проблемой печати документов на принтеры, находящиеся в общем доступе и подключенные через сеть: принтер находится в режиме автономной работы; документы, отправленные на печать, остаются в очереди и не печатаются. При попытке переподключения принтера, появляется ошибка: "Windows не удаётся подключиться к принтеру" с кодом ошибки 0x0000011b, 0x00000709 или 0x80070035.

Решение через реестр

Данное решение предложил комментатор Valdiz в комментариях к этой статье.

Как показывает практика, это решение помогает примерно в половине случаев. Мы рекомендуем всё-таки сразу удалять обновления ОС.

Запустите редактор реестра (regedit). Перейдите в ветку HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print . Создайте параметр типа DWORD32 с именем RpcAuthnLevelPrivacyEnabled и установите ему значение 0 .

Или скачайте файл fix-0x0000011b.zip (1 КБ), разархивируйте, запустите файл fix-0x0000011b.reg и разрешите ему внести изменения в реестр.



Данная ошибка появляется после установки нескольких обновлений Windows:

  • KB5005565
  • KB5005568
  • KB5006670
  • KB5006714 (по информации пользователя OLeg из комментариев)
  • KB5007186
  • KB5007247 (по информации пользователя Oleg из комментариев)

Обновления необходимо удалить на обоих компьютерах: и на том, с которого происходит попытка подключения к принтеру, и на том, к которому принтер подключен физически.

Для удаления этих обновлений перейдите в Панель управления – Программы и компоненты – Просмотр установленных обновлений.




В открывшемся окне найдите обновление с индексами из перечисленных выше, выделите их и нажмите "Удалить" в панели сверху. Согласитесь на удаление обновления и дождитесь завершения удаления.






Удалить обновления можно и через командную строку или PowerShell (от имени администратора): wusa /uninstall /kb:5005565 , wusa /uninstall /kb:5005568 , wusa /uninstall /kb:5006670 , wusa /uninstall /kb:5006714 , wusa /uninstall /kb:5007186 , wusa /uninstall /kb:5007247



Так же обратите внимание: могут установиться не все обновления, а, например, только одно. В таком случае, при попытке удаления неустановленного обновления, появится ошибка:



Просто проигнорируйте её.

После удаления обновлений, перезагрузите компьютер и попробуйте подключиться к принтеру вновь.

В случае неудачи, переименуйте принтер. После этого проблема должна исчезнуть.

Отключение (скрытие) обновления

Для того, чтобы данные обновления больше не устанавливались на компьютер, скачайте утилиту скрытия обновлений Windows:
wushowhide.diagcab (48КБ) / ZIP-архив: wushowhide.zip (44КБ)

В случае скачивания архива, распакуйте из него файл wushowhide.diagcab в любую папку и запустите его.

В первом окне нажмите кнопку «Далее», после чего дождитесь сбора сведений:


Выберите пункт «Hide updates» (Скрыть обновления):


Найдите обновление «Накопительное обновления для Windows 10 Version 21H1 для систем на базе процессоров x64, 2021 09 (KB5005565)» и иные обновления, указанные в начале страницы. Установите на них галочку и нажмите «Далее»:


Дождитесь завершения скрытия обновления. Убедитесь, что установлен статус «Исправлено». Нажмите «Закрыть» и перезагрузите ПК.

Если обновление в списке не отображается – значит либо обновление уже установлено в системе (и его необходимо предварительно удалить), либо не выполнена перезагрузка после удаления обновления.

Временное отключение обновлений Windows

Также вы можете временно приостановить обновления ОС, пока Microsoft не решат проблему данного обновления. Сделать это можно через приложение "Параметры":
Параметры – Обновление и безопасность – Центр обновления Windows – Дополнительные параметры – Раздел "Приостановка обновлений".




В данном разделе Вы можете приостановить скачивание обновлений до определённой даты (максимум на 35 дней).

Также можно ограничить скачивание некоторых обновлений путём перевода подключения в тип "Лимитное подключение". Сделать это можно также через приложение "Параметры":
Параметры – Сеть и Интернет – Ethernet – нажмите по текущему подключению левой кнопкой мыши (обычно оно называется "Сеть"). В разделе "Лимитное подключение" переведите ползунок "Задать как лимитное подключение".
При включении данной функции, часть необязательных обновлений скачиваться не будет.

Однажды, на одном интервью меня спросили, что ты будешь делать, если обнаружишь неработающий сервис из-за того, что на диске закончилось место?

Конечно же я ответил, что посмотрю, чем занято это место и если возможно, то почищу место.
Тогда интервьюер спросил, а что если на разделе нет свободного места, но и файлов, которые бы занимали все место, ты тоже не видишь?

На это я сказал, что всегда можно посмотреть открытые файл дескрипторы, например командой lsof и понять какое приложение заняло все доступное место, а дальше можно действовать по обстоятельствам, в зависимости от того, нужны ли данные.

Интервьюер прервал меня на последнем слове, дополнив свой вопрос: «Предположим, что данные нам не нужны, это просто дебаг лог, но приложение не работает из-за того, что не может записать дебаг»?

«окей», — ответил я, «мы можем выключить дебаг в конфиге приложения и перезапустить его».
Интервьюер возразил: «Нет, приложение мы перезапустить не можем, у нас в памяти все еще хранятся важные данные, а к самому сервису подключены важные клиенты, которых мы не можем заставлять переподключаться заново».

«ну хорошо», сказал я, «если мы не можем перезапускать приложение и данные нам не важны, то мы можем просто очистить этот открытый файл через файл дескриптор, даже если мы его не видим в команде ls на файловой системе».

Интервьюер остался доволен, а я нет.

Тогда я подумал, почему человек, проверяющий мои знания, не копает глубже? А что, если данные все-таки важны? Что если мы не можем перезапускать процесс, и при этом этот процесс пишет на файловую систему в раздел, на котором нет свободного места? Что если мы не можем потерять не только уже записанные данные, но и те данные, что этот процесс пишет или пытается записать?

Тузик

В начале моей карьеры я пытался создать небольшое приложение, в котором нужно было хранить информацию о пользователях. И тогда я думал, а как мне сопоставить пользователя к его данным. Есть, например, у меня Иванов Иван Иваныч, и есть у него какие-то данные, но как их подружить? Я могу указать напрямую, что собака по имени «Тузик» принадлежит этому самому Ивану. Но что, если он сменит имя и вместо Ивана станет, например, Олей? Тогда получится, что наша Оля Ивановна Иванова больше не будет иметь собаки, а наш Тузик все еще будет принадлежать несуществующему Ивану. Решить эту проблему помогла база данных, которая каждому пользователю давала уникальный идентификатор (ID), и мой Тузик привязывался к этому ID, который, по сути, был просто порядковым номером. Таким образом хозяин у тузика был с ID под номером 2, и на какой-то момент времени под этим ID был Иван, а потом под этим же ID стала Оля. Проблема человечества и животноводства была практически решена.

Файл дескриптор

Проблема файла и программы, работающей с этим файлом, примерно такая же как нашей собаки и человека. Предположим я открыл файл под именем ivan.txt и начал в него записывать слово tuzik, но успел записать только первую букву «t» в файл, и этот файл был кем-то переименован, например в olya.txt. Но файл остался тем же самым, и я все еще хочу записать в него своего тузика. Каждый раз при открытии файла системным вызовом open в любом языке программирования я получаю уникальный ID, который указывает мне на файл, этот ID и есть файл дескриптор. И совершенно не важно, что и кто делает с этим файлом дальше, его могут удалить, его могут переименовать, ему могут поменять владельца или забрать права на чтение и запись, я все равно буду иметь к нему доступ, потому что на момент открытия файла у меня были права для его чтения и/или записи и я успел начать с ним работать, а значит должен продолжать это делать.

В Linux библиотека libc открывает для каждого запущенного приложения(процесса) 3 файл дескриптора, с номерами 0,1,2. Больше информации вы можете найти по ссылкам man stdio и man stdout

  • Файл дескриптор 0 называется STDIN и ассоциируется с вводом данных у приложения
  • Файл дескриптор 1 называется STDOUT и используется приложениями для вывода данных, например командами print
  • Файл дескриптор 2 называется STDERR и используется приложениями для вывода данных, сообщающих об ошибке

Список файл дескрипторов можно посмотреть у любого процесса, если вы знаете его PID.

Например, откроем консоль с bash и посмотрим PID нашего процесса


Во второй консоли запустим


Файл дескриптор с номером 255 можете смело игнорировать в рамках данной статьи, он был открыт для своих нужд уже самим bash, а не прилинкованной библиотекой.

Сейчас все 3 файл дескриптора связаны с устройством псевдотерминала /dev/pts, но мы все равно можем ими манипулировать, например запустим во второй консоли


И в первой консоли мы увидим

Redirect и Pipe

Вы можете легко переопределить эти 3 файл дескриптора в любом процессе, в том числе и в bash, например через трубу(pipe), соединяющую два процесса, смотрим


Вы можете сами запустить эту команду с strace -f и увидеть, что происходит внутри, но я вкратце расскажу.

Наш родительский процесс bash с PID 15771 парсит нашу команду и понимает сколько именно команд мы хотим запустить, в нашем случае их две: cat и sleep. Bash знает что ему нужно создать два дочерних процесса, и объединить их одной трубой. Итого bash потребуется 2 дочерних процесса и один pipe.

Перед созданием дочерних процессов bash запускает системный вызов pipe и получает новые файл дескрипторы на временный буфер pipe, но этот буфер никак пока не связывает наши два дочерних процесса.

Для родительского процесса это выглядит так будто pipe уже есть, а дочерних процессов еще нет:


Затем с помощью системного вызова clone bash создает два дочерних процесса, и наши три процесса будут выглядеть так:


Не забываем, что clone клонирует процесс вместе со всеми файл дескрипторами, поэтому в родительском процессе и в дочерних они будут одинаковые. Задача родительского процесса с PID 15771 следить за дочерними процессами, поэтому он просто ждет ответ от дочерних.

Следовательно pipe ему не нужен, и он закрывает файл дескрипторы с номерами 3 и 4.

В первом дочернем процессе bash с PID 9004, системным вызовом dup2, меняет наш STDOUT файл дескриптор с номером 1 на файл дескриптор указывающий на pipe, в нашем случае это номер 3. Таким образом все, что первый дочерний процесс с PID 9004 будет писать в STDOUT, будет автоматически попадать в буфер pipe.

Во втором дочернем процессе с PID 9005 bash меняет с помощью dup2 файл дескриптор STDIN с номером 0. Теперь все, что будет читать наш второй bash с PID 9005, будет читать из pipe.

После этого в дочерних процессах так же закрываются файл дескрипторы с номерами 3 и 4, так как они более не используются.

Файл дескриптор 255 я намеренно игнорирую, он использует для внутренних нужд самого bash и в дочерних процессах будет также закрыт.

Далее в первом дочернем процессе с PID 9004 bash запускает с помощью системного вызова exec исполняемый файл, который мы указали в командной строке, в нашем случае это /usr/bin/cat.

Во втором дочернем процессе с PID 9005 bash запускает второй исполняемый файл, который мы указали, в нашем случае это /usr/bin/sleep.

Системный вызов exec не закрывает файл дескрипторы, если они не были открыты с флагом O_CLOEXEC во время выполнения вызова open. В нашем случае после запуска исполняемых файлов все текущие файл дескрипторы сохранятся.

Проверяем в консоли:


Как видите уникальный номер нашего pipe у нас в обоих процессах совпадает. Таким образом у нас есть связь между двумя разными процессами с одним родителем.

Для тех, кто не знаком с системными вызовами, которые использует bash, крайне рекомендую запустить команды через strace и посмотреть, что происходит внутри, например, так:


Вернемся к нашей проблеме с нехваткой места на диске и попыткой сохранить данные без перезапуска процесса. Напишем небольшую программу, которая будет записывать на диск примерно 1 мегабайт в секунду. При этом если по какой-либо причине мы не смогли записать данные на диск, мы будем просто игнорировать это и пытаться записать данные вновь через секунду. В примере я использую Python, вы можете использовать любой другой язык программирования.


Запустим программу и посмотрим на файл дескрипторы


Как видим у нас есть наши 3 стандартные файл дескрипторы и еще один, который мы открыли. Проверим размер файла:


данные пишутся, пробуем поменять права на файл:


Видим, что данные все еще пишутся, хотя наш пользователь не имеет права писать в файл. Попробуем его удалить:


Куда пишутся данные? И пишутся ли вообще? Проверяем:


Да, наш файл дескриптор все еще существует, и мы можем работать с этим файл дескриптором как с нашим старым файлом, мы можем его читать, очищать и копировать.

Смотрим на размер файла:


Размер файла 19923457. Пробуем очистить файл:


Как видим размер файла только увеличивается и наш транкейт не сработал. Обратимся к документации по системному вызову open. Если при открытии файла мы используем флаг O_APPEND, то при каждой записи операционная система проверяет размер файла и пишет данные в самый конец файла, причем делает это атомарно. Это позволяет нескольким тредам или процессам писать в один и тот же файл. Но в нашем коде мы не используем этот флаг. Мы можем увидеть другой размер файла в lsof после транкейт только если откроем файл для дозаписи, а значит в нашем коде вместо


мы должны поставить


Проверяем с «w» флагом

Программируем уже запущенный процесс

Часто программисты при создании и тестировании программы используют дебагеры (например GDB) или различные уровни логирования в приложении. Linux предоставляет возможность фактически писать и менять уже запущенную программу, например менять значения переменных, устанавливать breakpoint и тд и тп.

Возвращаясь к оригинальному вопросу с нехваткой места на диске для записи файла, попробуем сэмулировать проблему.

Создадим файл для нашего раздела, который мы подмонтируем как отдельный диск:


Создадим файловую систему:


Подмонтируем файловую систему:


Создаем директорию с нашим владельцем:


Откроем файл только на запись в нашей программе:


Ждем несколько секунд


Итак, мы получили проблему, описанную в начале этой статьи. Свободного места 0, занятого 100%.

Мы помним, что по условиям задачи мы пытаемся записать очень важные данные, которые нельзя потерять. И при этом нам нужно починить сервис без перезапуска процесса.

Допустим, у нас все же есть место на диске, но в другом разделе, например в /home.

Попробуем «перепрограммировать на лету» наш код.

Смотрим PID нашего процесса, который съел все место на диске:


Подключаемся к процессу через gdb


Смотрим открытые файл дескрипторы:


Смотрим информацию о файл дескрипторе с номером 3, который нас интересует


Помня о том, какой системный вызов делает Python (смотрите выше, где мы запускали strace и находили вызов open), обрабатывая наш код для открытия файла, мы делаем то же самое самостоятельно от имени нашего процесса, но биты O_WRONLY|O_CREAT|O_TRUNC нам нужно заменить на числовое значение. Для этого открываем исходники ядра, например тут и смотрим какие флаги за что отвечают

Объединяем все значения в одно, получаем 00001101

Запускаем наш вызов из gdb


Итак мы получили новый файл дескриптор с номером 4 и новый открытый файл на другом разделе, проверяем:


Мы помним пример с pipe — как bash меняет файл дескрипторы, и уже выучили системный вызов dup2.

Пробуем подменить один файл дескриптор другим


Закрываем файл дескриптор 4, так как нам он не нужен:


И выходим из gdb


Проверяем новый файл:


Как видим, данные пишутся в новый файл, проверяем старый:


Данные не потеряны, приложение работает, логи пишутся в новое место.

Немного усложним задачу

Представим, что данные нам важны, но места на диске у нас нет ни в одном из разделов и подключить диск мы не можем.

Перезапускаем приложение, и проверяем:


Места на диске нет, но мы успешно создаем там именованный pipe:


Теперь нам надо как-то завернуть все данные, что попадают в этот pipe на другой сервер через сеть, для этого подойдет все тот же netcat.


На нашем проблемном сервере запускаем в отдельном терминале


Теперь все данные, которые попадут в pipe автоматически попадут на stdin в netcat, который их отправит в сеть на порт 7777.

Все что нам осталось сделать это начать писать наши данные в этот именованный pipe.

У нас уже есть запущенное приложение:


Из всех флагов нам нужен только O_WRONLY так как файл уже существует и очищать нам его не нужно


Данные идут, проверяем проблемный сервер


Данные сохранились, проблема решена.

Пользуясь случаем, передаю привет коллегам из компании Degiro.
Слушайте подкасты Радио-Т.

В качестве домашнего задания предлагаю подумать, что будет в файл дескрипторах процесса cat и sleep если запустить такую команду:

В этой статье рассматриваются все неспецифические (то есть не связанные с каким-либо одним принтером) проблемы CUPS и драйверов принтеров (но не проблемы, связанные с совместным использованием принтеров), включая методы определения точной природы проблемы и решения выявленной проблемы.

Contents

Введение

Наилучший способ борьбы с неисправностями - это выставить 'LogLevel' в файле /etc/cups/cupsd.conf на:

А потом посмотреть вывод из файла /var/log/cups/error_log например так:

Символы слева от вывода означают следующее:

  • D=Debug(отладка)
  • E=Error(ошибка)
  • I=Information(информация)
  • И так далее

Следующие файлы также могут быть полезны:

Также, если вы хотите решить свои проблемы, важно понимать, как вообще работает CUPS. Вот краткая информация об этом:

  1. Когда вы жмёте 'печать' приложение отправляет .ps-файл (PostScript, язык-скрипт, который описывает, как выглядит страница) в систему CUPS (так происходит в большинстве программ).
  2. CUPS смотрит на PPD-файл (файл описания принтера) и находит, фильтры которые ему нужно использовать для преобразования .ps-файла в файл, который понимает ваш принтер (например, PJL,PCL). Обычно для этого ему требуется ghostscript.
  3. GhostScript принимает ввод и решает, какие фильтры ему использовать, потом применяет их и преобразовывает .ps-файл в формат, который понимает принтер.
  4. Затем файл передается бэкенду. Например, если у вас принтер подключен к usb порту, то используется usb бэкенд

Распечатайте документ и посмотрите error_log , чтобы получить более подробное и правильное представление об процессе печати.

Проблемы, возникающие в результате обновлений

Проблемы возникшие после обновления CUPS и сопутствующего ему набора программ

CUPS останавливается

Для того, чтобы воспользоваться новым конфигом, скопируйте /etc/cups/cupsd.conf.default в /etc/cups/cupsd.conf (при необходимости сделайте резервную копию старого конфига) и, чтобы новые настройки вступили в силу, перезапустите CUPS.

Для всех заданий - "остановлено"

The factual accuracy of this article or section is disputed.

Reason: Это кажется довольно грубым способом исправления этой проблемы; возможно, принтер просто отключен? (Discuss in Talk:CUPS (Русский)/Troubleshooting (Русский))

Если для всех отправленных на печать заданий установился статус "остановлено" ("stopped"), - удалите принтер и установите его заново. Для этого войдите в веб-интерфейс CUPS, перейдите Принтеры > Удалить Принтер.

Для проверки настроек принтера перейдите во вкладку Принтеры, затем скопируйте отображаемую информацию. Далее нажмите на Администрирование. В выпадающем списке кликните Изменить принтер, перейдите к следующей странице(ам), и так далее.

Для всех заданий - "Принтер не отвечает"

Для сетевых принтеров, поскольку CUPS подключается через URI, необходимо убедиться, что в DNS настроен доступ к принтерам по IP. Например, если принтер подключен следующим образом:

то имя хоста 'BRN_020554' должно соответствовать IP принтера, управляемого сервером CUPS. Если используется Avahi, убедитесь, что разрешение имени хоста Avahi работает.

Альтернативно, замените имя хоста, используемое в URI, IP-адресом принтера.

Версия PPD не совместима с gutenprint

Проблемы с сетью

Не удается найти принтер

Эта проблема может возникать и при использовании файрвола (межсетевой экран, брандмауэр). Возможно, вам придется отключить его или установить корректные правила. Если вы используете system-config-printer для обнаружения сетевых принтеров, тогда он сделает все это автоматически.

Старый сервер CUPS

Начиная с версии CUPS 1.6, клиент по умолчанию использует IPP 2.0. Если сервер использует CUPS <= 1.5 / IPP <= 1.1, клиент не будет автоматически понижать версию протокола и, следовательно, не может связаться с сервером. Обходным путем является добавление опции version=1.1 , описанной в Таблице 2. Опции URI IPP.

Общий принтер работает локально, но удаленный компьютер не печатает

Это вызвано тем, что задание на печать отправляется через фильтр дважды, один раз на локальном компьютере и один раз на удаленном. Смотрите также предупреждение на главной странице CUPS.

Не удается найти файл PPD

Убедитесь, что Avahi настроен правильно. В частности, проверьте, что nss-mdns установлен и настроен в /etc/nsswitch.conf .

USB-принтеры

Конфликт с SANE

Конфликт с usblp

Доступ к USB-принтерам можно получить двумя способами: модулем ядра usblp и libusb. Первый - это классический способ. Это просто: данные отправляются на принтер, записывая их в файл устройства в виде простого последовательного потока данных. Чтение одного и того же файла устройства позволяет использовать двунаправленный доступ, по крайней мере, для таких вещей, как считывание уровней чернил, статуса или информации о возможностях принтера (PJL). Он работает очень хорошо для простых принтеров, но для многофункциональных устройств (принтер/сканер) он не подходит, и производители, такие как HP, поставляют свои собственные бэкенды. Источник: здесь.

Если у вас возникли проблемы с работой USB-принтера, вы можете попробовать запрет загрузки для модуля ядра usblp :

Пользователям кастомного ядра может потребоваться вручную загрузить модуль ядра usbcore , прежде чем продолжить.

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

Если вы используете usblp , вывод должен указывать на то, что принтер был обнаружен следующим образом:

Если вы запретили загрузку usblp , вы увидите что-то вроде:

USB autosuspend

Плохие разрешения

Проверьте разрешения USB-порта принтера. Получите номер шины (BUSID) и устройства (DEVID) от lsusb :

Проверьте владельца, просмотрев devfs:

Демон cups запускается от пользователя "cups" и относится к группе "lp", поэтому либо этому пользователю, либо группе требуется доступ на чтение и запись в USB-устройство. Если вы считаете, что разрешения выглядят неправильно, вы можете временно изменить группу и разрешение:

Затем проверьте, может ли cups теперь видеть устройство USB правильно.

Чтобы сделать постоянное изменение разрешения, которое будет запускаться автоматически при каждом запуске компьютера, добавьте следующую строку.

После редактирования перезагрузите правила udev этой командой:

Проблемы с HP

CUPS: "/usr/lib/cups/backend/hp failed"

The factual accuracy of this article or section is disputed.

Reason: Ошибки бэкенда могут быть вызваны многими причинами, и Avahi не требуется (Discuss in Talk:CUPS (Русский)/Troubleshooting (Русский))

Убедитесь, что dbus установлен и запущен. Если ошибка повторяется, попробуйте запустить avahi-daemon.

Примечание: Там, возможно, потребуется установить права доступа.

CUPS: "Печать завершена", но принтер не печатает.

Это происходит на принтерах HP, когда вы выбираете (старый) драйвер hpijs (например, для Deskjet D1600 series). Вместо этого используйте драйвер hpcups.

Некоторые принтеры HP требуют, чтобы их прошивка загружалась с компьютера при каждом включении принтера. Вы можете столкнуться с этой проблемой, если есть проблема с udev (или аналогом), и правило загрузки прошивки никогда не запускается. В качестве обходного пути вы можете вручную загрузить прошивку на принтер. Убедитесь, что принтер подключен и включен, затем выполните

CUPS: '"foomatic-rip" not available/stopped with status 3'

CUPS: "Filter failed"

Ошибка "filter failed" может быть вызвана некоторым количеством причин. Журнал ошибок CUPS (по умолчанию /var/log/cups/error_log ) должен записывать, какой фильтр не удалось загрузить и почему.

Отсутствует ghostscript

Установите ghostscript ( /usr/lib/cups/filter/gstoraster нуждается в его запуске).

Отсутствует foomatic-db

Установите foomatic-db и foomatic-db-ppds . Это помогает в некоторых случаях.

Avahi не включен

Устаревший плагин

Устаревшая конфигурация принтера

Начиная с hplip-plugin AUR версии 3.17.11 hpijs больше не доступен. Если у вас есть принтеры, использующие hpijs, они не будут печатать. Необходимо перенастроить их и выбрать вместо этого новый драйвер hpcups.

Вы можете проверить, если это ваш случай, посмотрев в error_log cups`а:

This article or section is out of date.

Чтобы устранить проблему, выполните следующую команду как суперпользователь (root):

HPLIP 3.13: Плагин установлен, но HP Device Manager жалуется на его отсутствие

hp-toolbox: "Unable to communicate with device"

Разрешение проблемы

The factual accuracy of this article or section is disputed.

Reason: Предположительно, hp-toolbox пытается получить доступ к /dev/usb/* или /dev/lp, поэтому он должен находиться в группе lp . Но почему sys ? И я не могу воспроизвести это. (Discuss in Talk:CUPS (Русский)/Troubleshooting (Русский))

Может потребоваться добавить пользователя в группы lp и sys .

Виртуальный CDROM у принтеров

Это также может быть вызвано принтерами, такими как P1102, которые предоставляют виртуальный привод CD-ROM для драйверов MS Windows. Появляется lp dev, а затем исчезает. В этом случае попробуйте пакеты usb-modeswitch и usb-modeswitch-data, что позволяет отключить "Smart Drive" (правила udev, включенные в указанные пакеты).

Сетевые принтеры

Это также может происходить с сетевыми принтерами, использующими динамические имена хостов, если avahi-daemon не запущен. Другая причина заключается в том, что hp-setup не удалось найти принтер, потому что IP-адрес принтера изменился из-за DHCP. Если это так, подумайте о добавлении резервирования DHCP для принтера в конфигурации сервера DHCP.

hp-setup просит указать PPD-файл для обнаруженного принтера

Или, если вы используете интерактивный (консольный) режим, можно столкнуться с чем-то похожим на это даже при введении правильного пути к файлу ppd:

Решение заключается в установке и запуске cups перед запуском hp-setup .

hp-setup: "Qt/PyQt 4 initialization failed"

Установите пакет python-pyqt4 AUR , который дополнительно требуется (optdepend) для hplip . Альтернативно вы можете запустить hp-setup с интерфейсом командной строки с помощью флага -i .

hp-setup: находит принтер автоматически, но сразу после этого сообщает "Unable to communicate with device" при печати тестовой страницы

Это, по крайней мере, происходит с hplip 3.13.5-2 у принтера HP Officejet 6500A через локальное сетевое соединение. Чтобы решить проблему, укажите IP-адрес принтера HP для hp-setup, чтобы обнаружить принтер.

hp-setup: "KeyError: 'family-class'"

Если при добавлении принтера в пользовательском интерфейсе он не работает, или вы получили KeyError: 'family-class' от hp-setup , возможно потребуется обновить вручную /usr/share/hplip/data/models/models.dat .

Проверьте определен ли раздел family-class=Undefined для вашего принтера. Если нет, добавьте это:

Другие

Принтер "приостановлен - "Paused"" или "Остановлен" cо статусом "Рендеринг завершен"

Низкий уровень чернил

При низком уровне чернил некоторые принтеры зависают со статусом "Рендеринг завершен" ("Rendering completed"), и, если это сетевой принтер, принтер может даже стать недоступным для CUPS, несмотря на то, что он правильно подключен к сети. Замена картриджа (картриджей) с низким уровнем чернил в этом случае вернет принтер в статус "Готов" ("Ready") и, если он - сетевой принтер, то он станет снова доступным для CUPS.

Примечание: Если вы используете сторонние чернильные картриджи, то принтер может сообщать неточную информацию о уровне чернил. Если вы используете сторонние картриджи, и ваш принтер работал нормально, но теперь завис со статусом "Рендеринг завершен" ("Rendering completed"), замените чернильные картриджи, независимо от уровня отображаемых чернил, перед тем, как пробовать другие решения проблемы.

Завершение печати из-за ошибок авторизации

Unknown supported format: application/postscript

(Не найдена поддержка формата: application/postscript)

в /etc/cups/mime.convs и:

Ошибка задания для печати (Print-Job) client-error-document-format-not-supported

Попробуйте установить пакет foomatic и используйте драйвер foomatic.

Не удается получить список драйверов принтера

(Также применимо к ошибке "-1 не поддерживается!")

lp: Error - Scheduler Not Responding

Если вы получите эту ошибку, убедитесь, что CUPS запущен, переменная окружения CUPS_SERVER не установлена и /etc/cups/client.conf корректный.

Попробуйте добавить ServerAlias * в /etc/cups/cupsd.conf .

Если вы можете распечатать тестовую страницу с веб-интерфейса CUPS, но не из LibreOffice, попробуйте установить пакет a2ps .

Вывод принтера сдвинут

По-видимому, это связано с неправильным размером страницы, установленным в CUPS.

Принтер не работает (приостановлен - "Paused") после ошибки

Когда во время печати возникает ошибка, принтер в CUPS может перестать отвечать на запросы. lpq сообщает, что принтер is not ready (не готов), его можно активировать с помощью cupsenable . В веб-интерфейсе CUPS принтер отображается как приостановлен - "Paused", его можно возобновить с помощью Восстановить печать.

Чтобы CUPS автоматически активировал принтер, измените политику ошибок с стандартной настройки Останавливать принтер (stop-printer) на Повторить задание (retry-this-job).

Samsung: URF ERROR - Incomplete Session by time out

Эта ошибка обычно возникает при печати файлов по сети через IPP на принтерах Samsung и решается с помощью пакета samsung-unified-driver AUR .

Примечание: Соответствующий код ошибки 11-1112 соответствует внутренней проблеме с принтером, поэтому обращение к технической поддержке Samsung бесполезно.

Brother: Принтер печатает несколько копий

Иногда принтер печатает несколько копий документа (например, MFC-9330CDW напечатал 10 копий). Решение заключается в обновлении прошивки принтера.

Обычный пользователь не может изменять настройки принтера или удалять определенные задания

Если обычный пользователь должен иметь возможность изменять настройки принтеров или управлять очередью принтера, пользователь может быть добавлен в группу sys .

Одна из причин появления «Неверный дескриптор файла”Ошибка в Windows при удалении файла заключается в том, что для его имени используется зарезервированное имя.

Как упоминалось в этой статье Microsoft, вы не должны использовать следующие зарезервированные имена при создании файлов / папок в файловой системе Windows:


CON, PRN, AUX, NUL

COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9

LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9

Также избегайте этих имен, за которыми сразу следует расширение; например, NUL.txt не рекомендуется.

Ну, причина этой ошибки очень ясна после прочтения соглашений об именах, предоставленных Microsoft.

Удаление или переименование папки с неверным именем файла

  • Откройте окно командной строки (нажмите кнопку «Пуск» и введите «cmd»).
  • Перейдите в папку, содержащую эту папку (введите «cd temp \ имя папки \ имя папки \ имя папки \ имя папки \ что угодно»).
  • Переименуйте файл или папку с длинным именем файла Win95 / DOS; давайте представим, что это называется «invalidfilename» (ren invali

Применить горячие исправления

Патчи или пакеты обновления решают эту проблему, как описано ниже. Обновления решают эту проблему.

Если не указано иное, обновления Critical Hot Fix FTP-сервера были протестированы только с английскими версиями наших продуктов.

Используйте командную строку

CMD-а-администратора

Вы должны использовать командную строку. Начните с ввода cmd в меню «Пуск» и нажатия Enter.

Введите эту команду в окне командной строки:

del «\\. \ F: \ Movies \ Con Man \ Con.Man.2018.720p.WEBRip.x264- [YTS.AM] .mp4»

Он должен избавиться от файла. Подобные команды могут быть использованы для других проблемных файлов.

(Кстати, на мой взгляд, расширение .mp4 связано с тем, что вы его не указали. На самом деле оно может быть другим, измените его соответствующим образом.)

Если папка также сопротивляется удалению, очистите ее и используйте эту команду:

rd «\\. \ F: \ Movies \ Con Man»

Если вы пытаетесь удалить файл, действуйте следующим образом:

Откройте поднятую подсказку, как описано выше.
Введите следующую команду, затем нажмите Enter:

del \\. \ c: \ Temp \ con.txt

Чтобы удалить файл, просто укажите расширение файла и используйте команду del вместо rd.

Вот и все, вы, вероятно, удалили файл / папку из своей системы.

CCNA, веб-разработчик, ПК для устранения неполадок

Я компьютерный энтузиаст и практикующий ИТ-специалист. У меня за плечами многолетний опыт работы в области компьютерного программирования, устранения неисправностей и ремонта оборудования. Я специализируюсь на веб-разработке и дизайне баз данных. У меня также есть сертификат CCNA для проектирования сетей и устранения неполадок.

Читайте также: