Дальнейшее улучшение благодаря Кусалананде.
while read
не будет работать с пустым файлом. [ -s pid.txt ] || rm pid.txt
для удаления pid-файла. Однако , действительно ли у вас есть причина сохранять файл после обработки? Скорее всего, вы захотите удалить его в любом случае. while read -r line
do
kill "$line"
done < pid.txt
[ -s pid.txt ] || rm pid.txt
Вместо этого используется цикл while read
. из for $(cat...)
. Не читать строки с for .
Опция -r
указывает «не позволять обратной косой черте экранировать любые символы», что на самом деле не должно быть проблемой в файле pids, но рекомендуется всегда устанавливать, если нет особой причины не делать этого.
Альтернативное решение. Настройте принтер как принтер без драйверов.
С некоторой помощью на форуме Linux Mint мне удалось заставить принтер работать без использования HPLIP. Как я узнал, это благодаря способности принтеров поддерживать печать без драйверов. Так как это может помочь кому-то в будущем, это процедура, которой нужно следовать.
Убедитесь, что принтер и компьютер находятся в одной беспроводной сети
Используйте команды avavi-browse
для поиска устройств в локальной беспроводной сети. Используйте команды CUPS driverless
и lpstat
для отображения соответствующего состояния принтера
avahi-browse -rt _ipp._tcp
avahi-browse -rt _uscan._tcp
driverless
lpstat -l -e
Пример avahi-browse -rt _ipp._tcp
выход:
➜ ~ avahi-browse -rt _ipp._tcp
+ wlp1s0 IPv6 HP ENVY 6000 series [B68C8C] Internet Printer local
+ wlp1s0 IPv4 HP ENVY 6000 series [B68C8C] Internet Printer local
= wlp1s0 IPv4 HP ENVY 6000 series [B68C8C] Internet Printer local
hostname = [HP3822E2B68C8C.local]
address = [192.168.1.190]
port = [631]
txt = ["Fax=F" "mopria-certified=2.0" "Scan=T" "kind=document,envelope,photo,postcard" "URF=CP1,MT1-2-8-9-10-11,PQ3-4-5,RS300-600,SRGB24,OB9,OFU0,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,DM3,IS1,V1.4,FN3" "PaperMax=legal-A4" "pdl=application/vnd.hp-PCL,image/jpeg,image/urf,image/pwg-raster,application/PCLm" "Duplex=T" "Color=T" "usb_MDL=ENVY 6000 series" "usb_MFG=HP" "ty=HP ENVY 6000 series" "product=(HP ENVY 6000 series)" "UUID=9dddcf7d-2ef9-51a5-8be4-be1e5e3ebfc2" "rp=ipp/print" "TLS=1.2" "qtotal=1" "priority=20" "note=" "adminurl=http://HP3822E2B68C8C.local./#hId-pgAirPrint" "txtvers=1"]
= wlp1s0 IPv6 HP ENVY 6000 series [B68C8C] Internet Printer local
hostname = [HP3822E2B68C8C.local]
address = [192.168.1.190]
port = [631]
txt = ["Fax=F" "mopria-certified=2.0" "Scan=T" "kind=document,envelope,photo,postcard" "URF=CP1,MT1-2-8-9-10-11,PQ3-4-5,RS300-600,SRGB24,OB9,OFU0,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,DM3,IS1,V1.4,FN3" "PaperMax=legal-A4" "pdl=application/vnd.hp-PCL,image/jpeg,image/urf,image/pwg-raster,application/PCLm" "Duplex=T" "Color=T" "usb_MDL=ENVY 6000 series" "usb_MFG=HP" "ty=HP ENVY 6000 series" "product=(HP ENVY 6000 series)" "UUID=9dddcf7d-2ef9-51a5-8be4-be1e5e3ebfc2" "rp=ipp/print" "TLS=1.2" "qtotal=1" "priority=20" "note=" "adminurl=http://HP3822E2B68C8C.local./#hId-pgAirPrint" "txtvers=1"]
Пример avahi-browse -rt _uscan._tcp
вывод:
➜ ~ avahi-browse -rt _uscan._tcp
+ wlp1s0 IPv4 HP ENVY 6000 series [B68C8C] _uscan._tcp local
+ wlp1s0 IPv6 HP ENVY 6000 series [B68C8C] _uscan._tcp local
= wlp1s0 IPv4 HP ENVY 6000 series [B68C8C] _uscan._tcp local
hostname = [HP3822E2B68C8C.local]
address = [192.168.1.190]
port = [8080]
txt = ["mopria-certified-scan=1.2" "duplex=F" "is=platen" "cs=binary,color,grayscale" "pdl=application/octet-stream,application/pdf,image/jpeg" "ty=HP ENVY 6000 series" "rs=eSCL" "representation=images/printer.png" "vers=2.63" "UUID=9dddcf7d-2ef9-51a5-8be4-be1e5e3ebfc2" "note=" "adminurl=http://HP3822E2B68C8C.local." "txtvers=1"]
= wlp1s0 IPv6 HP ENVY 6000 series [B68C8C] _uscan._tcp local
hostname = [HP3822E2B68C8C.local]
address = [192.168.1.190]
port = [8080]
txt = ["mopria-certified-scan=1.2" "duplex=F" "is=platen" "cs=binary,color,grayscale" "pdl=application/octet-stream,application/pdf,image/jpeg" "ty=HP ENVY 6000 series" "rs=eSCL" "representation=images/printer.png" "vers=2.63" "UUID=9dddcf7d-2ef9-51a5-8be4-be1e5e3ebfc2" "note=" "adminurl=http://HP3822E2B68C8C.local." "txtvers=1"]
Пример driverless
вывод:
➜ ~ driverless
ipp://HP%20ENVY%206000%20series%20%5BB68C8C%5D._ipp._tcp.local/
Пример lpstat -l -e
вывод:
➜ ~ lpstat -l -e
HP_ENVY_6000_series_B68C8C_ permanent ipp://localhost/printers/HP_ENVY_6000_series_B68C8C_ implicitclass://HP_ENVY_6000_series_B68C8C_/
Выполняется команда:
lpadmin -p [PRINTER-NAME] -v [URI] -E -m everywhere
ПРИНТЕР -ИМЯ просто заменяется именем, которое вы хотите дать.
URI заменяется на URI принтера. Для этого есть два метода. Вы можете использовать вывод команды driverless
. Сначала это работало для меня, пока я не перезагрузил компьютер, а затем он перестал работать. Другой вариант — использовать IP-адрес, указанный в команде avahi-browse
в формате ipp://[IP]/ipp/print
, чтобы указать точное местоположение принтера.Этот IP-адрес можно дважды проверить, войдя в свой маршрутизатор. Пример полной команды:
➜ ~ lpadmin -p envy6000 -v ipp://192.168.1.190:631/ipp/print -E -m everywhere
➜ ~ lp -d envy6000 /etc/nsswitch.conf
Так и должно быть. Теперь он должен печатать во всех программах и находиться в диалоговом окне «Принтеры».
Qt4 был заменен на Qt5 в Mint 20. Используйте:
apt install python3-pyqt5
Должна быть совместима.