Отправка необработанных команд в подключенный Prnter

Недавно я подключил чековый принтер Bixolon SRP-350 к своему Ubuntu через параллельный порт. Я смог использовать сервер CUPS, чтобы установить принтер с соответствующим файлом.ppd.

Кроме того, я играл с отправкой необработанных, неформатированных данных на подключенный порт и наблюдал за результатами.

Например, в терминале я должен сначала переключиться на пользователя root sudo su - (не уверен почему sudo Не работает должным образом). Затем я могу отправить отдельные строки с echo "TEST LINE" > /dev/lp0, которая напечатает строку на принтере и продвинет страницу вверх. Я также могу пообщаться с ним, используя cat > /dev/lp0 и отправка построчно.

Я заметил, что каждая команда отправляется, когда я выполняю возврат (Enter), и принтер отвечает соответственно. Затем я пошел дальше и посмотрел командный лист для этой модели принтера. Я смог заставить большинство команд ESC работать, отправив ^[ command таким же образом выше.

Я пытаюсь выполнить некоторые другие команды для принтера, но я не уверен, как их вызвать. Я приложил командный лист.

Спасибо за любое руководство

  • Дэн

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+\ и некоторые другие будут перехвачены терминалом.

Однако есть гораздо лучший способ. Вы можете отправить все команды с помощью встроенной оболочки echo -e со строкой \x?? где ?? правильный шестнадцатеричный код (слева от названия контрольного кода в таблице выше). Эту обратную косую черту также необходимо экранировать от оболочки.

Вы также можете избежать отправки новой строки, используя echo -ne,

Итак, еще раз для FS, чтобы отправить команду "FS p (напечатать битовое изображение NV)", вы можете набрать:

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

или экранирование с кавычками вместо другой обратной косой черты:

echo -ne '\x1cp' > /dev/lp0
Другие вопросы по тегам