web-dev-qa-db-ja.com

接続されたプリンターへの未加工コマンドの送信

最近、パラレルポートを介して、UbuntuボックスにBixolon SRP-350レシートプリンターを接続しました。 CUPSサーバーを使用して、関連する.ppdファイルと共にプリンターをインストールすることができました。

さらに、接続されたポートに未フォーマットの未加工データを送信し、結果を観察することに取り組んでいます。

たとえば、ターミナルで、最初にrootユーザーSudo su -に切り替える必要があります(Sudoが正しく機能しない理由はわかりません)。次に、echo "TEST LINE" > /dev/lp0を使用して個々の行を送信できます。これにより、プリンターで行が印刷され、ページが上に進みます。 cat > /dev/lp0を使用して行ごとに送信することで、インタラクティブに操作することもできます。

リターン(Enter)を発行すると各コマンドが送信され、それに応じてプリンターが応答することに気付きました。次に、このモデルプリンターのコマンドシートを調べました。上記と同じ方法で^[ commandを送信することで、ESCコマンドの大半を機能させることができました。

プリンターに他のコマンドのいくつかを発行しようとしていますが、それらをトリガーする方法がわかりません。コマンドシートを添付しました。 Command Sheet

ガイダンスをありがとう

  • ダン
1
Neurax

ESCと同様に、他のコマンドは通常catを使用しながら生成できます。 Ctrl 正しい文字で。これは、ASCII値が制御コードよりも8進数で0100大きい文字です。 man asciiの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と文字列\x??を使用して、すべてのコマンドを送信できます。ここで、??は正しい16進コードです(上の表の制御コード名の左側) 。このバックスラッシュもシェルからエスケープする必要があります。

echo -neを使用して、改行の送信を回避することもできます。

FSの場合も、コマンド "FS p(NVビットイメージの印刷)"を送信するには、次のように入力できます。

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

または、別のバックスラッシュの代わりに引用符でエスケープします:

echo -ne '\x1cp' > /dev/lp0
1
Martin Thornton