2 votes

Envoi de commandes brutes au Prnter connecté

J'ai récemment connecté une imprimante de reçus Bixolon SRP-350 à ma boîte 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, sur le port connecté et à observer les résultats.

Par exemple, dans le 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 qui imprimera la ligne sur l'imprimante et fera avancer la page vers le haut. Je peux également faire preuve d'interactivité en utilisant cat > /dev/lp0 et de les soumettre ligne par ligne.

J'ai remarqué que chaque commande est envoyée lorsque je fais un retour (Enter), et l'imprimante répond en conséquence. J'ai ensuite recherché la feuille de commande pour ce modèle d'imprimante. J'ai réussi à faire fonctionner la majorité des commandes ESC en envoyant ^[ command de la même manière que ci-dessus.

J'essaie d'envoyer certaines des autres commandes à l'imprimante, mais je ne sais pas comment les déclencher. J'ai joint la feuille de commande. Command Sheet

Merci pour tout conseil

  • Dan

2voto

Martin Thornton Points 4221

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. Il s'agit du caractère dont la valeur ASCII 0100 octal est supérieure au code de contrôle. Le tableau ASCII dans man ascii est aménagé à cet effet :

   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 + \ .

Il y a toutefois 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 module Shell. echo -e avec la chaîne \x?? donde ?? est le code hexadécimal correct (à gauche du nom du code de contrôle dans le tableau ci-dessus). Cette barre oblique inversée devra également être échappée du Shell.

Vous pouvez également éviter d'envoyer une nouvelle ligne en utilisant la commande echo -ne .

Ainsi, toujours pour FS, pour envoyer la commande "FS p (print NV bit image)" vous pourriez taper :

#          FS p
echo -ne \\x1cp > /dev/lp0

ou en utilisant des guillemets au lieu d'une autre barre oblique inversée :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X