[РЕШЕНО]Как определить свободно ли устройство?

Есть устройство /dev/lp0.
Если принтер выключен, то при попытке записать в него выдается ошибка "Устройство занято"/
Как определить свободно ли устройство? (без попыток в него записать т.к. в случае если принтер включен, получим через строчку пропуск или что там попытаемся в него отправить).

Поясню:
на работе разбирали всякий компьютерный хлам и я (почти с помойки) отхватил матричный принтер Epson LX-300+. Теперь скрипт раз в десять минут печатает строку с текущей датой, временем и температурами. Но только если принтер включен. Приходится его выключать т.к. ночью он не нужен (комп выключен) и бла-бла-бла экономия эл.энергии и прочая экологическая/экономическая муть.
PS:Если есть возможность программно отключить/включить принтер то буду очень сенкать если поделитесь мудростью.

программно отключить/включить

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

спасибо.

по отключению так и думал, но вдруг...

По открытию файла на запись:
написал скрипт:

#!/usr/bin/perl
open(my $fh, '>', '/dev/lp0');
close $fh;

но он при выключеном и при включеном принтере пишет "Отказано в доступе" в том числе из под рута
Что я делаю не так?

Убедись, что никто не

Убедись, что никто не захватил принтер - например 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. Принтер при этом ни чего не печатает, но в случае если принтер выключен выдает ошибку и в лог пишется сообщение об ошибке.

#include 
#include 
#include 

#include "oldlp.h"
#include 

#ifndef LP_NO
#define LP_NO 3
#endif

int main()
{
int i,fd,irq,irq2;
unsigned char status=0;
char printer[10];
char comm[10];
FILE *fp;
comm[0]=27;
comm[1]=0;
comm[2]=107;
comm[3]=0;
sprintf(printer,"/dev/lp%d",0);
if((fp=fopen(printer, "wb"))==NULL) {
    printf("He удается открыть файл.\n");
    exit(1);
  }
fputs(&comm[0],fp);
fclose(fp);
return 0;
 
}

Хотя вместо /home/pas/checklp можно, наверно, просто echo использовать.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".