如何删除数百个自动添加的网络打印机?


16

对我而言,执行打印非常困难,因为打印机对话框中充满了成百上千个自动添加的打印机,因此找不到我要使用的打印机,请参见下面的屏幕截图。

打印机对话的图像显示了非常长的滚动条

打印机源自我的工作网络,显然很多人(包括学生,我想是他们)正在“共享”他们的家用打印机,然后我的笔记本电脑会自动将其取走。(巧合的是,有时我会在工作中禁用avahi-daemon,这仅仅是因为它使用了大量的CPU)。

当我转到时http://localhost:631/printers/,它说有131台打印机,它们都是Make和Model“本地原始打印机”。有两个例外:1是我手动配置的工作中的网络打印机。另一台是我父母的网络打印机,该打印机也是自动添加的,与我现在位于同一网络上。但是其余的只是我要避免的垃圾。有关如何做到这一点的技巧将不胜感激。

不过,我不会再回到工作地点了,因此,现在,我只想移除这些打印机(即自动添加的129/130打印机)。有没有办法做到这一点?我想我可以通过在cups Web界面中单击来完成此操作,但是对于129台打印机而言,这有点多了。因此,我正在寻找单个命令或有关如何使用各种脚本实现该命令的提示。


1
参见/etc/cups/printers.conf。停下杯子,然后从文件中取出打印机。
Rinzwind

2
这不是重复的,因为我要问如何删除已经安装的打印机,而另一个问题是关于阻止其安装。此外,这是一个问题,其中包含一堆老旧的无效答案。我知道这一点是因为我以前看过它,并尝试过一些。
jonaslb

1
明白了

Answers:


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'
    

这看起来很有希望。我认为可能会出现问题(listing命令可能也是最后一个命令)。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

很棒的工作,很高兴它能奏效!
乔治·乌德森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.