J'ai récemment connecté une imprimante Bixolon SRP-350 Receipt à ma machine Ubuntu via un port parallèle. J'ai pu utiliser le serveur CUPS pour installer l'imprimante avec le fichier .ppd associé.
De plus, je me suis amusé à envoyer des données brutes non formatées au port connecté et à observer les résultats.
Par exemple, au terminal, je dois d’abord passer à l’utilisateur root Sudo su -
(je ne sais pas pourquoi Sudo
ne fonctionne pas correctement). Ensuite, je peux envoyer des lignes individuelles avec echo "TEST LINE" > /dev/lp0
, ce qui l’imprimera sur l’imprimante et fera avancer la page. Je peux aussi y accéder de manière interactive en utilisant cat > /dev/lp0
et en le soumettant ligne par ligne.
J'ai remarqué que chaque commande est envoyée lorsque je renvoie un retour (Entrée) et l'imprimante répond en conséquence. Je suis alors allé de l'avant et ai regardé la feuille de commande pour ce modèle d'imprimante. J'ai pu faire fonctionner la majorité des commandes ESC en envoyant ^[ command
de la même manière que ci-dessus.
J'essaie d'envoyer d'autres commandes à l'imprimante, mais je ne sais pas comment les déclencher. J'ai joint la feuille de commande.
Merci pour tout conseil
Comme ESC, les autres commandes peuvent généralement être générées en utilisant cat
en appuyant sur Ctrl avec le caractère correct. C'est le caractère avec un ASCII valeur 0100 octal supérieur au code de contrôle. La table ASCII dans man ascii
est convenablement aménagée pour cela:
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL '\0' (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 _
Ainsi, par exemple, GS serait Ctrl+], et FS devrait être Ctrl+\.
Cependant, il y a un hic. Ctrl+\et quelques autres seront interceptés par le terminal.
Il existe cependant un bien meilleur moyen. Vous pouvez envoyer toutes les commandes en utilisant le shell intégré echo -e
avec la chaîne \x??
où ??
représente le code hexadécimal correct (à gauche du nom du code de contrôle dans le tableau ci-dessus). . Cette barre oblique inverse devra également être échappée de Shell.
Vous pouvez également éviter d'envoyer une nouvelle ligne en utilisant echo -ne
.
Donc, encore une fois pour FS, pour envoyer la commande "FS p (imprimer une image binaire NV)", vous pouvez taper:
# FS p
echo -ne \\x1cp > /dev/lp0
ou échapper avec des guillemets au lieu d'une autre barre oblique inverse:
echo -ne '\x1cp' > /dev/lp0