Enviando Comandos Brutos para o Pronto Conectado

1

Conectei recentemente uma impressora de recibo Bixolon SRP-350 à minha caixa Ubuntu via porta paralela. Consegui usar o servidor CUPS para instalar a impressora com o arquivo .ppd associado.

Além disso, andei brincando com o envio de dados brutos e não formatados para a porta conectada e observando os resultados.

Por exemplo, no terminal, devo primeiro mudar para o usuário root sudo su - (não tenho certeza porque sudo não funciona corretamente). Em seguida, posso enviar linhas individuais com echo "TEST LINE" > /dev/lp0 , que imprimirá a linha na impressora e avançará a página para cima. Também posso interagir com ele usando cat > /dev/lp0 e enviando linha por linha.

Percebi que cada comando é enviado quando eu emito um retorno (Enter) e a impressora responde de acordo. Em seguida, fui em frente e procurei a folha de comando para esta impressora modelo. Consegui que a maioria dos comandos ESC funcionasse enviando ^[ command da mesma maneira acima.

Estou tentando emitir alguns dos outros comandos para a impressora, mas não tenho certeza de como ativá-los. Anexei a folha de comando.

Obrigado por qualquer orientação

  • Dan
por Neurax 13.10.2016 / 22:02

1 resposta

1

Como o ESC, os outros comandos geralmente podem ser gerados usando cat pressionando Ctrl com o caractere correto. Este é o caractere com um valor ASCII 0100 octal maior que o código de controle. A tabela ASCII em man ascii está convenientemente preparada para isso:

   Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
   ────────────────────────────────────────────────────────────────────────
   000   0     00    NUL '
#          FS p
echo -ne \x1cp > /dev/lp0
' (null character) 100 64 40 @ 001 1 01 SOH (start of heading) 101 65 41 A 002 2 02 STX (start of text) 102 66 42 B 003 3 03 ETX (end of text) 103 67 43 C 004 4 04 EOT (end of transmission) 104 68 44 D 005 5 05 ENQ (enquiry) 105 69 45 E 006 6 06 ACK (acknowledge) 106 70 46 F 007 7 07 BEL '\a' (bell) 107 71 47 G 010 8 08 BS '\b' (backspace) 110 72 48 H 011 9 09 HT '\t' (horizontal tab) 111 73 49 I 012 10 0A LF '\n' (new line) 112 74 4A J 013 11 0B VT '\v' (vertical tab) 113 75 4B K 014 12 0C FF '\f' (form feed) 114 76 4C L 015 13 0D CR '\r' (carriage ret) 115 77 4D M 016 14 0E SO (shift out) 116 78 4E N 017 15 0F SI (shift in) 117 79 4F O 020 16 10 DLE (data link escape) 120 80 50 P 021 17 11 DC1 (device control 1) 121 81 51 Q 022 18 12 DC2 (device control 2) 122 82 52 R 023 19 13 DC3 (device control 3) 123 83 53 S 024 20 14 DC4 (device control 4) 124 84 54 T 025 21 15 NAK (negative ack.) 125 85 55 U 026 22 16 SYN (synchronous idle) 126 86 56 V 027 23 17 ETB (end of trans. blk) 127 87 57 W 030 24 18 CAN (cancel) 130 88 58 X 031 25 19 EM (end of medium) 131 89 59 Y 032 26 1A SUB (substitute) 132 90 5A Z 033 27 1B ESC (escape) 133 91 5B [ 034 28 1C FS (file separator) 134 92 5C \ '\' 035 29 1D GS (group separator) 135 93 5D ] 036 30 1E RS (record separator) 136 94 5E ^ 037 31 1F US (unit separator) 137 95 5F _

Então, por exemplo, GS seria Ctrl + ] , e FS deveria ser Ctrl + \ .

No entanto, há um problema. Ctrl + \ , e alguns outros, serão interceptados pelo terminal.

Existe, no entanto, uma maneira muito melhor. Você pode enviar todos os comandos usando o shell embutido echo -e com a string \x?? em que ?? é o código hexadecimal correto (à esquerda do nome do código de controle na tabela acima). Essa barra invertida também precisará ser escapada do shell.

Você também pode evitar o envio de uma nova linha usando echo -ne .

Então, novamente para o FS, para enviar o comando "FS p (imprimir imagem de bit NV)" você pode digitar:

echo -ne '\x1cp' > /dev/lp0

ou escapando com aspas em vez de outra barra invertida:

   Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
   ────────────────────────────────────────────────────────────────────────
   000   0     00    NUL '
#          FS p
echo -ne \x1cp > /dev/lp0
' (null character) 100 64 40 @ 001 1 01 SOH (start of heading) 101 65 41 A 002 2 02 STX (start of text) 102 66 42 B 003 3 03 ETX (end of text) 103 67 43 C 004 4 04 EOT (end of transmission) 104 68 44 D 005 5 05 ENQ (enquiry) 105 69 45 E 006 6 06 ACK (acknowledge) 106 70 46 F 007 7 07 BEL '\a' (bell) 107 71 47 G 010 8 08 BS '\b' (backspace) 110 72 48 H 011 9 09 HT '\t' (horizontal tab) 111 73 49 I 012 10 0A LF '\n' (new line) 112 74 4A J 013 11 0B VT '\v' (vertical tab) 113 75 4B K 014 12 0C FF '\f' (form feed) 114 76 4C L 015 13 0D CR '\r' (carriage ret) 115 77 4D M 016 14 0E SO (shift out) 116 78 4E N 017 15 0F SI (shift in) 117 79 4F O 020 16 10 DLE (data link escape) 120 80 50 P 021 17 11 DC1 (device control 1) 121 81 51 Q 022 18 12 DC2 (device control 2) 122 82 52 R 023 19 13 DC3 (device control 3) 123 83 53 S 024 20 14 DC4 (device control 4) 124 84 54 T 025 21 15 NAK (negative ack.) 125 85 55 U 026 22 16 SYN (synchronous idle) 126 86 56 V 027 23 17 ETB (end of trans. blk) 127 87 57 W 030 24 18 CAN (cancel) 130 88 58 X 031 25 19 EM (end of medium) 131 89 59 Y 032 26 1A SUB (substitute) 132 90 5A Z 033 27 1B ESC (escape) 133 91 5B [ 034 28 1C FS (file separator) 134 92 5C \ '\' 035 29 1D GS (group separator) 135 93 5D ] 036 30 1E RS (record separator) 136 94 5E ^ 037 31 1F US (unit separator) 137 95 5F _
    
por Martin Thornton 14.10.2016 / 01:30