向连接的打印机发送原始命令

向连接的打印机发送原始命令

我最近通过并行端口将 Bixolon SRP-350 收据打印机连接到我的 Ubuntu 盒子。我能够使用 CUPS 服务器安装打印机和相关的 .ppd 文件。

此外,我一直在尝试将原始、未格式化的数据发送到连接的端口并观察结果。

例如,在终端上,我必须先切换到 root 用户sudo su -(不确定为什么sudo不能正常工作)。然后,我可以使用 发送单独的行,这将在打印机上打印行并向上移动页面。我还可以通过使用并逐行提交echo "TEST LINE" > /dev/lp0来与它进行交互。cat > /dev/lp0

我注意到,当我发出回车键 (Enter) 时,每个命令都会被发送,并且打印机会做出相应的响应。然后我继续查找此型号打印机的命令表。我能够通过以^[ command上述相同的方式发送来使大多数 ESC 命令正常工作。

我正在尝试向打印机发出一些其他命令,但不确定如何触发它们。我已附上命令表。命令表

感谢任何指导

答案1

与 ESC 一样,其他命令通常可以通过在使用时cat按下Ctrl正确的字符来生成。这是 ASCII 值比控制代码大八进制 0100 的字符。中的 ASCII 表man ascii为此方便地布局:

   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    _

因此,例如, GS 将是Ctrl+ ],而 FS 应该是Ctrl+ \

然而还有一个问题。 Ctrl+\和其他一些符号将被终端拦截。

但是还有一种更好的方法。您可以使用 shell 内置命令发送所有命令,其中echo -e字符串为正确的十六进制代码(位于上表中控制代码名称的左侧)。此反斜杠也需要从 shell 中转义。\x????

您还可以使用 来避免发送换行符echo -ne

因此对于 FS,要发送命令“FS p(打印 NV 位图)”,您可以输入:

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

或者使用引号而不是另一个反斜杠进行转义:

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

相关内容