为龙芯笔记本安装联想 M7600D 打印机

之前在我的龙芯笔记本上安装好 Gentoo,之后,我就把它连上了打印机,准备实现远程打印。

我家的打印机是十几年前的联想 M7600D 激光打印机,官方有 Linux 的驱动,不过只支持 X86 架构,因此只能自己找驱动编译。

好在联想打印机的驱动很多和兄弟(Brother)打印机是通用的,而 lsusb 命令的输出也验证了这一点:

1
Bus 002 Device 002: ID 04f9:5608 Brother Industries, Ltd

电脑甚至直接把它识别成了 Brother 打印机!

因此,只需要安装兄弟打印机的驱动就可以了。根据 Wiki,安装 net-printers/brlaser 即可。

1. 安装 CUPS

1
2
3
4
5
6
7
8
## 启用常见的 USE flag
## 支持直接打印 PDF 和图片
echo 'USE="${USE} cups pdf jpeg png exif tiff"' >> /etc/portage/make.conf
## 这两个选项是为了后面用 Samba 分享打印机的需要,这里一并启用了。
echo 'net-print/cups zeroconf' >> /etc/portage/package.use/cups
echo 'net-print/cups-filters zeroconf' >> /etc/portage/package.use/cups
## 后台安装
nohup emerge -avq cups &

2. 安装驱动

1
2
echo 'net-print/brlaser * ~*' >> /etc/portage/package.accept_keywords/cups
emerge -avq brlaser

3. 开始打印

1
2
3
## 启用 CUPS 服务
rc-service cupsd start
rc-update add cupsd default

之后就可以添加打印机,随便选择一个型号(我记得当时选的是 DCP-7060D),就可以成功打印了。

4. 双面打印

如果只需要单面打印,上面的步骤就足够了。但是在尝试双面的打印的时候,却遇到了问题。因为我发现不管选择什么驱动,双面打印出来的方向都不对,无论我选择长边翻页还是短边翻页,打印出来都是短边翻页的效果。我把支持双面打印机(型号后面带 D)的驱动几乎试了个遍,结果都一样。

经过研究发现,在 brlaser 的配置文件中,双面打印的配置都带有 Duplex rotated 的选项。
运行 cat /usr/share/cups/drv/brlaser.drv | grep DCP-7060D -A3 -B1 可以看到:

1
2
3
4
5
6
7
{
ModelName "DCP-7060D"
Attribute "NickName" "" "Brother DCP-7060D, $USING"
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:DCP-7060D;CLS:PRINTER;CID:Brother Laser Type1;"
Duplex rotated
PCFileName "br7060d.ppd"
}

简单搜索文档 就可以找到这个选项的说明:

rotated - double-sided printing is supported, but the back side image needs to be rotated 180 degrees for DuplexNoTumble

即在长边翻页的时候,将后面一页旋转 180°。而我的联想打印机应该选择 normal 才对。

根据 lpinfo --include-schemes usb -l -v 的输出:

1
2
3
4
5
6
Device: uri = usb://Lenovo/M7600D
class = direct
info = Lenovo M7600D
make-and-model = Lenovo M7600D
device-id = MFG:Lenovo;CMD:PJL,XL2HB;MDL:M7600D;CLS:PRINTER;
location =

我干脆直接修改了源代码,见 #4f19837,然后把它 patch 进来,重新编译安装 brlaser 即可。:

1
2
3
4
mkdir -p /etc/portage/patches/net-print/brlaser
wget https://github.com/wangjiezhe/brlaser/commit/4f19837.patch \
-O /etc/portage/patches/net-print/brlaser/Lenovo-M7600D.patch
emerge -avq brlaser

之后重新添加打印机,并设置默认双面打印:

1
2
3
4
5
6
7
8
## 添加打印机
lpadmin -p Lenovo_M7600D -E -v 'usb://Lenovo/M7600D' -m drv:///brlaser.drv/m7600d.ppd
## 设置默认双面打印(长边翻页)
lpoptions -p Lenovo_M7600D -o Duplex=DuplexNoTumble
## 设置默认打印机
lpoptions -d Lenovo_M7600D
## 打印测试页
lpr /usr/share/cups/data/testprint

打印时候,可以直接使用 lpr 或者 lp 命令,后者可以使用 -P 1-3,5 指定要打印的页码。

其它常用命令:

1
2
3
4
5
6
7
8
## 查看打印机
lpinfo -v
## 查看可用驱动
lpinfo -m
## 查看打印队列
lpq -a
## 删除所用打印项目
lprm -