我最近通过并行端口将 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