[РЕШЕНО]Как определить свободно ли устройство?
Есть устройство /dev/lp0.
Если принтер выключен, то при попытке записать в него выдается ошибка "Устройство занято"/
Как определить свободно ли устройство? (без попыток в него записать т.к. в случае если принтер включен, получим через строчку пропуск или что там попытаемся в него отправить).
Поясню:
на работе разбирали всякий компьютерный хлам и я (почти с помойки) отхватил матричный принтер Epson LX-300+. Теперь скрипт раз в десять минут печатает строку с текущей датой, временем и температурами. Но только если принтер включен. Приходится его выключать т.к. ночью он не нужен (комп выключен) и бла-бла-бла экономия эл.энергии и прочая экологическая/экономическая муть.
PS:Если есть возможность программно отключить/включить принтер то буду очень сенкать если поделитесь мудростью.
- Для комментирования войдите или зарегистрируйтесь
программно отключить/включить
программно отключить/включить принтер нельзя без доп.устройства релейного типа, а для проверки доступности можешь пытаться открыть его на запись и проверять статус.
спасибо.
по отключению так и думал, но вдруг...
По открытию файла на запись:
написал скрипт:
но он при выключеном и при включеном принтере пишет "Отказано в доступе" в том числе из под рута
Что я делаю не так?
Убедись, что никто не
Убедись, что никто не захватил принтер - например CUPS или т.п.
Параллельно (раз в 10 минут)
Параллельно (раз в 10 минут) другой скрипт печатает строку и завершается нормально.
Если печатаешь системными
Если печатаешь системными средствами, так и должно быть! :)
В таком случае используй системную утилиту
lpstat
.Спасибо за ответ.
К сожалению lpstat показывает при выключенном принтере:
lpstat -a EPSON_LX-300+ -l
EPSON_LX-300+ принимает запросы с момента Чт 28 янв 2016 18:14:19
Решил
Решил проблему.
Скрипт:
#!/bin/sh
dat=$(LANG=ru_RU.utf8 date "+%Y-%m-%d %H:%M")
if /home/pas/checklp
then
CPUTEMP=$(sensors | egrep "^temp1:"|cut -d "+" -f2|cut -d " " -f1)
TempFirstDisk=$(sudo hddtemp -nq SATA:/dev/sda)
TempSecondDisk=$(sudo hddtemp -nq SATA:/dev/sdb)
LANG=ru_RU.utf8 echo $dat Пр=$CPUTEMP HDD: sda=$TempFirstDisk°C sdb=$TempSecondDisk°C |iconv -f UTF-8 -t CP866>/dev/lp0
else
echo $dat "Нет принтера">>/home/pas/macro/test_lp.log
fi
/home/pas/checklp написан на С и просто отправляет на принтер код 27. Принтер при этом ни чего не печатает, но в случае если принтер выключен выдает ошибку и в лог пишется сообщение об ошибке.
Хотя вместо /home/pas/checklp можно, наверно, просто echo использовать.