Как удалить сотни автоматически добавленных сетевых принтеров?

16

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

Изображение диалогового окна принтера с очень длинной полосой прокрутки

Принтеры происходят из моей рабочей сети, где, по-видимому, многие люди (включая студентов, я полагаю) «делятся» своими домашними принтерами, которые мой ноутбук автоматически подхватывает. (по совпадению я иногда отключаю avahi-daemon на работе, просто потому, что он использует большое количество процессора).

Когда я захожу http://localhost:631/printers/, там написано, что есть 131 принтер, и все они сделаны из Марки и Модели 'Local Raw Printer'. За двумя исключениями: 1 - это сетевой принтер на работе, который я настроил вручную. Другой - это сетевой принтер у моих родителей, который также был автоматически добавлен, и я нахожусь в той же сети, что и сейчас. Но остальное - просто мусор, которого я действительно хотел бы избежать. Советы о том, как это сделать, будут оценены.

Я не собираюсь возвращаться на свое рабочее место на некоторое время, поэтому сейчас я просто хотел бы, чтобы эти принтеры (это были принтеры с автоматическим добавлением 129/130) были удалены. Есть способ сделать это? Я думаю, что я мог бы сделать это, щелкнув через веб-интерфейс чашки, но для 129 принтеров, это немного. Поэтому я ищу отдельную команду или советы о том, как этого добиться с помощью своего рода сценария.

jonaslb
источник
1
см. /etc/cups/printers.conf. остановите чашки, а затем удалите принтеры из файла.
Rinzwind
2
Это не дубликат, потому что я спрашиваю, как удалить уже установленные принтеры, тогда как другой вопрос касается предотвращения их установки. Кроме того, это вопрос, в котором много устаревших ответов, которые не работают. Я знаю это, потому что я видел это раньше и попробовал кое-что из этого.
jonaslb
1
Понял, отозвал :)
NGRhodes

Ответы:

12

С помощью этой команды: lpstat -aмы можем увидеть установленные принтеры и определить имя нужного принтера , чтобы сохранить, мы можем использовать grepкоманду также для фильтрации результатов , так как: lpstat -a | grep <probable_name_of_printer>.

Тогда этот маленький скрипт может помочь:

  1. Запустите эту команду, чтобы проверить, что нужного принтера нет в списке:

    lpstat -a | cut -d" " -f1 | sed -E '/<NAME_OF_PRINTER>/d' | grep <NAME_OF_PRINTER>
    
    • Это ничего не должно возвращать, поскольку это делает следующее:

      • lpstat -a: список установленных принтеров
      • cut -d" " -f1: вернуть только имена принтеров
      • sed -E '/<NAME_OF_PRINTER>/d': удалить имя принтера, чтобы сохранить от вывода предыдущих команд
      • grep <NAME_OF_PRINTER>: убедитесь, что нужного принтера нет в списке
  2. Если вышеупомянутое проверяет; затем запустите эту команду, чтобы удалить все остальные принтеры, которые вам не нужны:

    sudo bash -c 'for i in $(lpstat -a | cut -d" " -f1 | sed -E '/<NAME_OF_PRINTER>/d'); do lpadmin -x "$i"; done'
    
Джордж Удосен
источник
Это выглядит многообещающе. Я думаю, что может быть проблема, хотя (с командой перечисления так, по-видимому, также последней командой). lpstat -aрезультаты <printer_name> not accepting request since <some date> -\n reason unknownreason unknownновой строкой!). Таким образом, используя вашу команду перечисления, я получаю много «принтеров» с именем `reason` (там есть отступ).
jonaslb
Пожалуйста, какие части шагов у вас возникли проблемы и добавить любые результаты к вашему вопросу, чтобы я мог следовать! Что дает команда lpstat -a?
Джордж Удосен
1
Это работало нормально, но я добавил еще одну sedкоманду в «цепочку труб»: sed -E /reason/dизбавиться от лишних строк.
jonaslb
Отличная работа и рад, что это сработало!
Джордж Удосен