Ir para conteúdo
  • Cadastre-se

pstglia

Membros
  • Total de ítens

    3
  • Registro em

  • Última visita

  • Days Won

    1

Tudo que pstglia postou

  1. Nota: a versão do awk precisa ser o gawk, por conta de uma funcao/operador bitwise usado (and) não presente em outras implementações como o mawk
  2. 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
  3. Olá Gostaria de compartilhar o código de um shell script simples que montei para teste de impressão no Linux. O script recebe 3 parâmetros (texto_titulo, texto1 e texto2) Ele basicamente submete os seguintes comandos ESC/POS na porta da impressora (mapeada através da constante DEV_IMPRESSORA, setada com /dev/usb/lp0): Inicializa a impressora; Seleciona o codepage 850 (opção 2 multi língua) Imprime o titulo centralizado em largura dupla + negrito Imprime o texto1 em fonte padrão alinhado a esquerda Imprime o texto2 centralizado em largura e altura dupla + negrito Por fim, avança algumas linhas e corta o papel O script depende do comando awk (presente em todas as distribuições) e do comando iconv (usado para converter a codificacao do texto a ser impresso de UTF-8 para CP850) Espero que seja útil Abraços, Paulo #!/bin/bash p_titulo="$1" p_texto_1="$2" p_texto_2="$3" DEV_IMPRESSORA="/dev/usb/lp0" echo 1 | awk -v p_titulo="${p_titulo}" -v p_texto_1="${p_texto_1}" -v p_texto_2="${p_texto_2}" '{ # Inicializa a impressora printf("%c%c", 0x1b, 0x40) # Seleciona o codepage 850 printf("%c%c%c", 0x1b, 0x74, 0x02) # Avanca algumas linhas printf("%c%c", 0x0a, 0x0a) # Centraliza o texto printf("%c%c%c", 0x1b, 0x61, 0x31) # Escolhe negrito e altura dupla para a fonte printf("%c%c%c", 0x1b, 0x21, 0x08 + 0x10) # Imprime o titulo printf("%s",p_titulo) # Volta a fonte normal printf("%c%c%c", 0x1b, 0x21, 0x00) # Avanca uma linha e imprime o primeiro texto # alinhado a esquerda printf("%c%c%c%c", 0x0a, 0x1b, 0x61, 0x30) printf("%s%c","=======================================", 0x0a) printf("%s%c",p_texto_1, 0x0a) printf("%s%c","=======================================", 0x0a) # Avanca algumas linhas e imprime o segundo texto # centralizado, em negrito, com alturaxlargura dupla printf("%c%c%c%c%c%c%c%c", 0x0a, 0x0a, 0x1b, 0x21, 0x08 + 0x10 + 0x20, 0x1b, 0x61, 0x31) printf("%s",p_texto_2) printf("%c%c%c%c%c%c", 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a) # Corta o papel (corte full) printf("%c%c", 0x1b, 0x69) }' | iconv -f UTF-8 -t CP850 > ${DEV_IMPRESSORA}
×
×
  • 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.