Как вывести список имен принтеров, приемлемых для использования с lpr?

64

Страница lprman говорит, что конечный принтер может быть указан с -Pфлагом.

-P destination[/instance]
    Prints files to the named printer.

Я «добавил» различные принтеры на локальные ресурсы Samba, используя графический интерфейс в Ubuntu / Gnome. Как я могу получить список этих доступных принтеров в формате, который -Pожидает флаг (предпочтительно из оболочки bash)?

Ян Маккиннон
источник

Ответы:

98
$ lpstat -p -d

Из руководства CUPS .

Кевин Панко
источник
4
Спасибо! Я только что обнаружил, что lpqработает тоже.
Ян Маккиннон
6
Всякий раз, когда я ищу это, я также ищу, как выбрать принтер по умолчанию:lpoptions -d printername
Джошуа Голдберг
12

Чтобы получить список вы можете использовать:

lpstat -a

или же

cat /etc/printcap

Чтобы распечатать только имена принтеров:

lpstat + read + array:

$ while read l; do l=($l); echo "${l[0]}"; done <<< "$(lpstat -a)"

lpstat + awk:

$ lpstat -a | awk '{print $1}'

lpstat + cut:

$ lpstat -a | cut -f1 -d ' '

кошка + grep + врезать /etc/printcap:

$ cat /etc/printcap | cut -f1 -d'|' | grep '^#' -v

Вот что показано, по одному на строку:

HP_LaserJet_P1606dn
HP_Deskjet_2540_series
HP_LaserJet_M1212nf
GCP-Save_to_Google_Docs

Я чувствую, что lpstatрешения более элегантные и надежные. В основном потому, что /etc/printcapне было найдено в некоторых системах, которые я тестировал.

Об использовании awkили cutзависит от того, что вы установили и предпочитаете. Опция bash read + bash array должна работать на любой оболочке bash без необходимости внешних операций.

РЕДАКТИРОВАТЬ: Я сказал, что отмеченное решение не работает для меня на Amazon Linux. Но я думаю, это работает, если вы просто хотите скопировать имена принтеров из середины остальной части вывода. Работает так же, как использование просто lpstat -a.

$ lpstat -p -d
printer HP_Deskjet_2540_series is idle. enabled since Tue 22 Dec 2015 01:12:10 PM BRST
. . .
printer GCP-Save_to_Google_Docs is idle. enabled since Tue 15 Dec 2015 02:13:33 AM BRST
system default destination: HP_LaserJet_P1606dn
Гас Невес
источник
lpstat + cut также будет работать на OS X.
Tresf
Судя по вашему выходному lpstat -p -d
примеру
Извините, но он спрашивает How can I get a list of these available printers in the format that the (lpr) -P flag expects. Мой пример lpstat -p -dясно показывает, что вы получаете больше, чем просто имя принтера с этим. В этом случае вы не можете использовать этот выход для lpr -P $PRINTERNAMEвызова. Так что нет! lpstat -p -dне работает в приведенном мной примере.
Гас Невес