Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 16-11-2024 em Posts

  1. Ola pessoal Segue outro shell script criado para teste de impressoras ESC/POS no Linux O objetivo com esse é realizar uma consulta de status ("Transmit real-time status" = DLE EOT) de forma a obter as seguintes informações: Se a impressora está em status Online (DLE EOT 1 - BIT 3 / 0x08) Caso offline, verificar o possível motivo (DLE EOT 2) se a tampa da impressora está aberta (BIT 2 / 0x04) se está sem bobina/inserida incorretamente (BIT 5 / 0x20) Quem quiser usar, pode salvar o fonte abaixo em um arquivo .sh (ex: check_status_escpos.sh), conceder permissões de leitura e execução para ele (chmod u+rx check_status_escpos.sh) e executar da seguinte forma: ./check_status_escpos.sh ARQ_DEVICE_IMPRESSORA Ex: ./check_status_escpos.sh /dev/usb/lp0 Código fonte: #!/bin/bash # Obtem o status de uma impressora ESC/POS # 16-11-2024 - Paulo Sergio Travaglia # Parametros # 1 - device (ex: /dev/usb/lp0) # # Dependencias: # comandos: dd, awk, timeout if [ $# -lt 1 ] then echo "Uso: $0 PORTA" exit 255 fi p_porta="$1" ######## ## MAIN ######## if [ ! -c ${p_porta} ] then echo "Dispositivo nao e um dispositivo caractere" exit 1 fi if [ ! -r ${p_porta} ] || [ ! -w ${p_porta} ] then echo "Nao existe permissao de leitura/gravacao para o usuario $USER" exit 2 fi # submete o comando de obtencao de status online/offline # Obs: Envia pelo menos 3 vezes o comando, porque durante os testes # com uma unica submissao eventualmente o byte nao e retornado # no device associado a porta for x in $(seq 3) do echo 1 | awk '{printf("%c%c%c",0x10,0x04,0x1)}' > ${p_porta} if [ $? -ne 0 ] then echo "Problemas ao tentar enviar o comando para ${p_porta}" exit 3 fi sleep 0.1 done # Le o byte retornado correspondente ao status sleep 0.2 v_status=$(timeout --kill-after=1 1 dd if=${p_porta} bs=1 count=1 2>/dev/null | od -d |awk 'NR==1{ if( and(int($NF),8) == 0 ){print "ONLINE" }else{print "OFFLINE"} }') if [ "${v_status}" = "OFFLINE" ] then # Verifica o motivo de estar offline for x in $(seq 3) do echo 1 | awk '{printf("%c%c%c",0x10,0x04,0x2)}' > ${p_porta} sleep 0.1 done sleep 0.2 v_motivo_offline=$(timeout --kill-after=1 1 dd if=${p_porta} bs=1 count=1 2>/dev/null | od -d | awk 'NR==1{print $NF}') v_tampa_aberta=$(echo ${v_motivo_offline} |awk '{ if( and(int($NF),4) == 4 ){print "S" }else{print "N"}}') if [ ${v_tampa_aberta} = "S" ] then echo -n "Offline - A tampa esta aberta" exit 200 else v_sem_papel=$(echo ${v_motivo_offline} |awk '{ if( and(int($NF),32) == 32 ){print "S" }else{print "N"}}') if [ "${v_sem_papel}" = "S" ] then echo -n "Offline - Sem papel" exit 201 else echo -n "Offline - Desconhecido" exit 202 fi fi else echo -n "Online" exit 0 fi
    1 ponto
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...