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.

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