2019年7月14日

某讯N1刷Armbian后安装打印机,变身AirPrinter

作者 Duyes

本日志文中摘录了大量的网友内容,如有原创者异议,请及时通知我修改,谢谢!

本篇日志摘录内容网址无规则排序如下:

https://tohot.top/posts/53788.html

https://www.right.com.cn/forum/thread-510423-1-1.html

https://www.right.com.cn/forum/thread-703919-1-1.html

https://www.cnblogs.com/leaven/archive/2010/10/20/1856482.html

https://www.xuxiaobo.com/?p=2777

家中闲置惠普P1106打印机一台,长期以来都是插路由器,然后电脑连路由器,使用LPR协议进行打印。自17年使用MacBook Air后,家里的苹果设备越来越多,苹果设备有毒!!!特别是IPhone和IPad也成了标配~老婆有时候手机接收打印文档后还需要传送到电脑上,感觉太麻烦了,Google了一把,发现居然有AirPrinter这种神奇的东东,好像只要配合Linux就可以实现。我去,咱也实现吧!

话说某讯真是坑爹,坑了我几万块买了一些高价货!N1就是其中之一!但是N1这个产品还真是不错,虽然设计是当云盘这种坑爹功能,但是在广大网友智慧下变成了电视盒子,下载宝,蓝牙音箱,游戏机,linux服务器!本次使用的是linux服务器Armbian功能!

1、降级过程此处参考学习原文链接:https://www.right.com.cn/forum/thread-336545-1-1.html (如果你的版本小于等于2.19 则无需降级,切记第一次开机先不要联网,否则会自动升级)

1.开启N1的adb调试功能:
将N1连显示器和鼠标,进入天天链界面后查看IP,版本号,如果版本号不高于2.19则可跳过降级步,否则无法线刷。四连击版本号,显示adb打开。

2.准备工作:

①软件:
下载adb工具、USB burning tool、降版本用的3个低版本关键分区img文件(boot.img、bootloader.img、recovery.img ,已放到adb文件夹中)、将镜像写入U盘的工具(balenaEtcher、Win32DiskImager、USB image tool等之类的)、Armbian镜像等、SSL连接工具(如PUTTY,这样就不用将N1接显示器及鼠标键盘了);

②硬件:
好用的U盘一个(比较挑U盘,部分U盘引导armbian时进入不了U盘系统,会进入recovery界面)、双公头USB线一根、网线一根

3.降级:

①安装USB burning tool,安装时会提示安装驱动,必须安装;
②在进行步骤1后,将电脑接入与N1同一网络下(下面均如此),CMD命令行环境进入adb安装目录,运行 adb connect N1的ip地址 ; 用双公头USB线将电脑和N1连接(N1端插到HDMI接口那个USB口上);
③CMD环境中输入: adb
shell reboot fastboot,重启后N1进入fashtboot模式,此时电脑会提示有新硬件并自动安装(一般为:Android
Phone – Android ADB Interface),如果没有自动安装驱动,可能时USB线有问题;
④CMD环境按CTRL+C,可以中止当前操作,输入fastboot devices -l ,正常情况下会显示N1的序列号;
⑤将盒子对应的boot.img、bootloader.img、recovery.img放到adb文件夹内,分别执行fastboot
flash bootloader bootloader.img、 fastboot flash boot boot.img、
fastboot flash recovery recovery.img
命令,将低版本分区镜像刷入N1,等待三秒,断电,完成降级(降级后连接显示器后看版本号并不会变化,实际上已经降级了,恢复了线刷功能)。

4.刷入官改版本

①用USB线连接N1和电脑,打开USB burning tool,准备好官改镜像文件(如N1_mod_by_webpad_v2.2_20180920.img);
②adb connect ip ,连接成功后,adb reboot update ,此时N1会重启,重启后USB burning tool节目显示连接成功后,文件→导入烧录包,导入后,去掉右边“擦除flash”和“擦除bootloader”选项前面的勾,点击开始,即开始进行录入,完成后拔线,停止烧录。
③此时断电重启的话,则N1已经变成了官改版本。

二、刷入armbian系统

二、刷入armbian系统
1.制作armbian启动U盘

①使用USB image tool等之类的软件,将armbian镜像写入U盘(U盘中原文件全部会丢失,提前备份):
这儿使用的是balenaEtcher,比较推荐

官方下载:https://www.balena.io/etcher/ (可能会比较慢)

孤岛下载:http://cloud.feiji.work/s/46p6ns9y (也可能很慢啦,但可以用工具下载!)

这里使用的是Armbian_5.77_Aml-s905_Debian_stretch_default_5.0.2_20190318.img,写入后再插入会发现有2个磁盘,其中一个是以“BOOT”为卷标的,另一个在Windows环境下无法查看,提示需格式化,这里不要格式化。

②修改U盘文件:

然后重新插拔一次硬盘,这时电脑上会多出一个分区“BOOT”

进入到目录:/boot/dtb

替换为恩山论坛大佬的dtb文件(注:我在写这篇文章的时候基于5.77版,这个版本的内核虽然已经很不错,但是空闲时负载较高,所以还是换为大佬的dtb)

下载地址:https://www.right.com.cn/forum/thread-510423-1-1.html

据说由于原镜像空闲时负载较高,要将BOOT盘下dtb\meson-gxl-s905d-phicomm-n1.dtb替换为恩山无线大佬的dtb文件,返回BOOT盘根目录,编辑文件:uEnv.in,

替换第一行内容为: dtb_name=/dtb/meson-gxl-s905d-phicomm-n1.dtb
据说如果不进行配置很可能出现无网络的情况。(有一点请注意,替换dtb文件后,修改uEnv.ini文件时,请用notepad++打开。不要用win自带的记事本工具之类。这个ini文件时linux环境的编码,用win自带的会改变编码,出现问题)

2.将armbian刷入N1

①将写入后并改好的U盘插入N1靠近HDMI接口的U口,断电重启N1,如果U盘是天选之U盘,则N1会从U盘启动进入armbian系统(否则可能会进入安卓的recovery界面),此时可以N1接显示器和键盘,或者直接用putty连接(ip正常情况还是上面那个ip)。界面会提示输入登录账号,默认为root,密码是1234,注意,输入密码时不会有任何显示,输入后直接回车即可,如果正确则会进入root目录。首次登陆要求更改root密码,注意开始是要输入原密码的!同时需要创建一个新用户,随便创建一个即可,后面基本都是用root账号反正。
不建立新用户也OK

②将armbian系统从U盘写入N1的emmc,保证以后无需U盘启动:输入 /root/install.sh 回车,运行完毕后,拔掉U盘,断电重启,N1可以不插U盘自行进入armbian系统了。

如果重启没有自动进入armbian,则可以尝试, 用adb connect 盒子IP 回车 然后 输入:adb shell reboot update 此时盒子会从U盘启动Linux。

以上完成N1刷入Armbian系统;下面开始安装打印机:

首先使用ssh登录某讯N1

1.更新

sudo apt-get update

2.安装HPLIP

sudo apt-get install hplip

3.安装CUPS

sudo apt-get install cups

安装HPLIP时,CUPS已经安装上了,这里安装时会看到已经安装过的提示。

4.将N1默认用户root添加到用户组lpadmin里

sudo usermod -a -G lpadmin root

5.配置cupsd.conf

cupsd.conf路径:/etc/cups/cupsd.conf /etc/cups/cupsd.conf

这里我修改的时候偷懒了,使用SFTP和root账号登录了Armbian系统,下载了文件,修改后再上传回去!

cupsd.conf默认的配置文件只能本地访问,所以需要修改一些内容使局域网的电脑访问

配置不成功时,访问http://树莓派ip:634/会出现forbidden的界面

首先需要将

Listen localhost:631

改成

Listen 0.0.0.0:631

将<Location /> <Location /admin> <Location /admin/conf>三个节点添加

Allow from @LOCAL

可能有的教程给的配置是Allow @Local,这是旧版的兼容写法,在CUPS官网ARCH LINUX的教程中给出都有from

此时再重启CUPS服务即可生效

sudo service cups restart

6.安装P1106特殊驱动:

HP Laserjet Professional P1106,在CUPS中选择驱动的阶段会明确注明requires proprietary plugin,即需要专有插件支持。虽然在使用hp-setup安装驱动的时候已经自动下载并安装插件,并且也没有提示任何错误异常。但是在测试打印的时候却始终提示错误: /usr/lib/cups/filter/hpcups fails 查看错误日志发现造成该错误的原因是: [23/Jul/2013:15:44:41 +0000] [Job 3] STATE: +hplip.plugin-error 在谷歌该错误之后发现,导致该问题的原因是由于HP并没有提供支持ARM架构的插件,其所有插件都只是针对x86平台。因此这驱动是怎么都装不上的。也在此希望HP能早日推出支持ARM的插件。

使用开源foo2zjs驱动

经过一番搜索之后,发现了一款开源的打印驱动foo2zjs。该驱动支持部分打印机,其中包括HP LaserJet Professional P1100系列。安装该驱动需要下载其官方网站上的源码包进行编译安装。

wget http://foo2zjs.rkkda.com/foo2zjs.tar.gz  tar -xvf foo2zjs.tar.gz  cd foo2zjs  make  sudo make install  sudo make cups

如此,该驱动也就安装好了。

上面一段代码在Armbian中可能无法执行,具体原因不明。

于是,我又开始折腾了,把上述命令拆分开来:

下载:
wget -O foo2zjs.tar.gz

解压缩:
tar zxf foo2zjs.tar.gz

进入相应的目录:
cd foo2zjs

编译foo2zjs:
make

取得打印机的韧件(firmware):
./getweb 1020

安装:
sudo make install

安装热插拔系统支持:
sudo make install-hotplug

安装到CUPS系统:
sudo make cups

好吧,折腾了半天终于搞定了特殊驱动,最后重新启动一下打印服务:

sudo service cups restart

7.打开网页配置打印机共享

驱动安装完成之后即可使用CUPS添加打印机。CUPS自有一套WEB管理界面,监听终端的631接口。使用浏览器访问该管理界面后点击上访导航栏的Administration -> Add Printer可见如下界面:

选中自动发现的本地打印机带USBXXX的那个,点击继续按钮进入打印机设置界面。

这里填写打印机的名称与注释,可以保持默认不变。下面有个“共享该打印机”的复选框要确认选中。然后点击继续按钮进入驱动选择界面。

在列表中选择对应的驱动(这里我的P1106选择的是: HP LaserJet Pro P1102w Foomatic/foo2zjs-z2 (recommended)),所有foo2zjs驱动会注明footmatic/foo2zjs字样。再点击“添加打印机”按钮即完成了打印机的添加。

AirPrint打印共享

已添加的打印机会自动加入Avahi广播列表,使用苹果Bonjour协议向网络进行广播。所有苹果设备,包括手机、平板电脑和笔记本电脑均可直接发现打印机设备

添加桌面打印机

OS X

OS X支持IPP网络打印服务,因此添加CUPS打印服务只需要选择相应打印机即可,系统自动下载安装相应驱动。在系统偏好设置中选择打印机,在添加打印机按钮中会自动显示附近的IPP打印机,点击安装即可。

Windows

使用控制面板

CUPS默认对外提供IPP打印接口,在Windows上可以直接输入打印机的http地址进行安装。具体步骤如下:

  • 首先在控制面板找到添加打印机选项,由于CUPS默认采用Bonjour协议进行服务广播,而Windows并不原生支持该协议,因此在列表中无法自动找到打印机,在此选择“打印机不在列表中”选项。
  • 在手动添加打印机面板中手动输入打印机的http地址如以下格式 http://server_name:port/printers/printer_name其中CUPS的默认端口为631。输入打印机地址如下。


然后选择相应的驱动即可完成安装过程。

使用Bonjour Printer Services

  • 由于CUPS系统默认使用Bonjour协议进行服务广播。在Windows下可以安装苹果官方的Bonjour打印机安装程序进行设置。Bonjour打印机安装向导自动发现网络中的打印机服务:
  • 选择相应打印机之后安装对应的驱动程序即可:

关于打印速度的讨论

在实际使用中,发现Windows PC打印速度快,即提交打印任务后打印立即开始,而使用iOS设备发送打印任务之后存在较长的等待时间才会开始打印。在研究造成该问题的原因之前,我们需要知道CUPS共享打印机的原理是什么。 CUPS使用原生驱动,可将多种类型的文件,如PDF,PostScript文件直接渲染成打印机支持的二进制文件。CUPS同时也支持将原始二进制流直接传送至打印机,而无需做本地文件渲染。CUPS对于输入文件流类型的支持可在mime.convs与mime.types两个文件中进行设置。 由于在Windows上安装了打印机的原生驱动,渲染操作在客户端已经完成,CUPS只需要将原始二进制流不经更改地传送给打印机,因此基本无需等待时间。而iOS使用AirPrint的原理则为将各种类型的文本图像先生成PDF文档,再将PDF传送至AirPrint打印服务器。而AirPrint服务器在收到该PDF文档后仍需要将文件渲染成打印机支持的二进制流,再将该流传送至打印机设备。因此在使用iOS进行AirPrint时实际需要对原始文件进行两次转换。同时,受到iOS与N1的处理能力限制,两次转换的效率很大程度上取决于原始文件的大小与复杂度。