检测到论坛CSS可能没有正确加载,如出现排版混乱请刷新重试。

We detected that the CSS might not be loaded correctly. If the website displays abnormally, Please refresh and try again.

  • *nix
  • CM311-1a搭建家庭打印服务器

前言

家里的打印机是惠普M1005 MFP这款非常经典的激光一体机,皮实耐造并且耗材非常便宜。而这台机器似乎确实已经老了,只支持USB有线连接使得其无法方便的与其他设备共享,最早是用USB连接到主力台式机上,用Windows自带的打印机共享将其分享给家里其他电脑,但这样做必须保证电脑开着,只能分享给其他Windows电脑,而不支持苹果和安卓设备,并且Windows的共享功能也不是非常稳定。于是我一直在寻找一个真正适合我的打印机共享方案:

  • 多平台兼容:支持Windows、Linux、Android以及Apple AirPrint;
  • 多功能:同时支持打印和扫描功能的共享;
  • 低成本:学生党,便宜是必须的;
  • 始终在线:不需要特意打开设备就可访问打印机,并且功耗要低;
  • 高可玩性:支持功能扩展。

然后我尝试用我的树莓派成功搭建了打印和扫描共享,但这学期做毕设需要用到它,于是我看上了CM311-1a这款电视盒子。它搭载Amlogic S905L3a这款SoC,大概是去年从某些渠道流出了大量全新库存机,可以刷入Armbian等操作系统,因此具有很多玩法。这款盒子只有百兆网口,不适合做软路由,所以价格也一直较低,但当做打印服务器是非常足够了。因此在咸鱼60块钱入手了这个盒子的2+8版本(之前这个价格能拿下2+16的,但8G容量刷Armbian也够了)。

硬件配置

  • SoC:晶晨 S905L3a,四核Cortex-A53 @ 1.8GHz;
  • RAM:2GB 32bit LPDDR4;
  • ROM:8GB eMMC 5.1;
  • 接口:HDMI 2.1*1、模拟音视频*1、USB 2.0*2、12V 1A电源输入*1。

设备上手

HDMI连上采集卡,插上网线,插电、开机,屏幕轻松点亮!

CM311系列作为运营商的IPTV盒子,原厂系统功能是极为受限的,咸鱼上的CM311系列大都由卖家破解好了,安装当贝桌面,买来可以当作普通的电视盒子使用。但我们很快就要干掉内置的安卓系统。

默认桌面

为了方便折腾,刷入Armbian、CoreELEC或者EmuELEC等第三方系统,卖家也安装好了外置启动和ADB开启入口。

应用列表

ADB入口

这个机器内置了两个系统设置,一个是运营商版本的设置菜单,和各地IPTV或者有线的安卓盒子的设置项别无二致,密码是10086;另一个是安卓系统的原生设置。

系统设置密码

插上网线能够自动通过DHCP获取局域网IP。这时先不要在路由器绑定盒子的IP和MAC,进入Armbian后MAC地址会变成另一个。

IP获取

刷入Armbian

所需材料

  • CM311-1a一台
  • 8G以上的U盘
  • USB键盘
  • 有线网络连接
  • HDMI接口的显示设备

下载固件

首先下载适用于CM311-1a的Armbian固件:https://github.com/ophub/amlogic-s9xxx-armbian/tags
选择最新的,点进去应该有很多img.gz格式的镜像文件,如果没有就换另一个。
Jammy版本采用Ubuntu 22.04 LTS底层,Bullseye版本采用Debian 11底层,一般来说Ubuntu底层能用的软件包会更多,Debian底层的依赖关系会更精简,占用更低。这里我选的是Jammy

Tags

进入镜像列表,下载Armbian_23.02.0_amlogic_s905l3a_jammy_5.15.98开头的文件。如果你的盒子是其他的SoC,则选择对应的就可以。这里还有6.1内核的镜像,但目前新内核在CM311-1a上还有很多bug,5.15内核会更稳定。

下载

制作安装U盘

需要一个软件:BalenaEtcher
插入U盘,打开Etcher,加载镜像(不需要解压),然后点击Flash!等待镜像写入完成即可。
注意:U盘里的所有数据将被清除。

U盘启动到Armbian

盒子开机,进入安卓系统,并插入U盘。卖家在我的机器上安装了外置启动,打开这个应用并确认就能自动从U盘启动。
如果你的盒子没有这个选项,可以用开心电视助手进行U盘引导。
稍等一会就能进入U盘上的Armbian系统。首先会提示创建你的root密码,这里可以直接 <kbd>Ctrl</kbd> + <kbd>C</kbd> 取消:

U盘系统的用户名默认为root,密码为armbian

安装Armbian到eMMC

执行armbian-install
稍后会提示Start selecting device...,需要选择正确的Device tree使硬件都能正常工作。这里输入305并回车,即CM311-1a-YST,而2+8版本CM311-1a-CH与YST版本只是容量和代工厂不同,极少数安卓固件会有不兼容的问题,但Armbian这些基于GNU/Linux的固件是完美兼容的。之前的教程会建议选择304,最新版本给CM311系列增加了单独的Device tree,兼容性会更好。

install1.jpg

接下来会询问文件系统类型,可以选择ext4btrfs,实际上在盒子上这两种文件系统的区别并不大,这里选择了ext4,输入序号1并回车。
如果要放弃安装,这是最后的机会,这一步之后eMMC会被清空!

install2.jpg

接下来安装脚本会刷入Armbian专用的bootloader,重新分区并写入新的系统文件。
看到绿色的SUCCESS即代表安装成功,此时关掉电源,拔下U盘并重新打开电源以进入新的Armbian系统。

install3.jpg

按下电源键会花屏几秒钟,然后开始跑码:

开机跑码

配置Armbian系统

上一节安装好了Armbian,接下来进行一些必要的安装后设置。

修改Root密码

系统默认用户名为root,密码为armbian。要改成自己的密码,在登录后执行

# passwd root

输入两遍新密码。

配置网络

Armbian默认同时开启了NetworkManager和系统内置的/etc/network/interfaces进行网络配置,这两个配置会起冲突,导致开机时卡在Raise network interfaces,一分半之后会报FAILED,非常影响开机速度。

解决方法也很简单,注释掉/etc/network/interfaces里面所有设置项即可,然后让NetworkManager管理系统网络连接,比较智能。

# nano /etc/network/interfaces

以下是文件的默认内容,这里需要把所有行都注释掉。

默认配置文件

然后 <kbd>Ctrl</kbd> + <kbd>O</kbd> 再按回车保存, <kbd>Ctrl</kbd> + <kbd>X</kbd> 退出编辑器。
此时可以配置固定IP:运行一下ifconfig,找到盒子在Armbian下的MAC地址(和安卓系统下面和机器底壳上的MAC不同),再到路由器后台绑定自己需要的IP。
重启一下盒子并登录,可以在欢迎页面看到盒子的IP地址,这时就可以拔下显示器和键盘,使用你喜欢的SSH终端访问盒子命令行了。

motd

更改软件源

Armbian默认使用国外软件源,访问速度可能会很慢,因此建议更改为国内镜像源。
以下命令是将Armbian改为使用中科大软件源,比较稳定,如果希望使用其他软件源可参考更改。

# sed -i 's@//.*ports.ubuntu.com@//mirrors.ustc.edu.cn\/ubuntu-ports@g' /etc/apt/sources.list		# Ubuntu底层
# sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list		# Debian底层
# sed -i 's@//.*apt.armbian.com@//mirrors.ustc.edu.cn\/armbian@g' /etc/apt/sources.list.d/armbian.list

然后刷新软件源缓存,验证软件源更改是否成功:

# apt update

屏蔽内核更新

ophub版本的Armbian使用自定义的flippy内核,而系统默认会在执行apt upgrade时替换成最新官方内核,导致无法引导,因此需要单独屏蔽内核相关软件包的更新,同时不影响其他软件和安全更新的安装。

# apt-mark hold armbian-config armbian-firmware linux-dtb-current-meson64 linux-image-current-meson64
# apt update && apt upgrade		# 此时可以放心更新系统

配置打印共享

Armbian进行打印机共享,需要三个组件:

  • cups:Common Unix Printing System,可以理解成系统管理打印机和打印任务的框架;
  • avahi:能让客户端发现打印机;
  • hplip:惠普打印机的驱动,其他品牌的打印机可能有它们自己的驱动。

安装cupsavahi

# apt install cups cups-client cups-filters cups-ipp-utils cups-browsed colord
# systemctl enable cups
# systemctl start cups
# apt install avahi-daemon
# systemctl enable avahi-daemon
# systemctl start avahi-daemon

安装hplip并配置打印机

# apt install hplip

打印机通过数据线连接到盒子,然后执行打印机配置:

# hp-setup -i

首先会询问连接类型,这里使用USB,直接回车,几秒钟后会检测到设备,记住hp:/usb/开头的设备名:

Set Connection (I/O) Type

然后会询问下载插件,直接回车即可:

Plug-in Installation for HPLIP

许可协议,太长不看系列,输入y并回车以同意:

License Agreement

配置打印队列,里面的几个默认即可:

Print Queue Setup

配置结束,建议打印测试页,当然是轻松打印成功了:

Printer Test Page

微信图片_20230312200120.jpg

配置cups

cups默认是禁止打印机共享的,我们需要更改一些设置。编辑配置文件:

# nano /etc/cups/cupsd.conf

使用 <kbd>Ctrl</kbd> + <kbd>W</kbd> 查找设置项并修改:

- `Browsing`改为`On`;
- `Listen localhost:631`改为`Port 631`;
- 搜索`Restrict access to the`,将以下两个代码块修改为:
	# Restrict access to the server...
	<Location />
	  Order allow,deny
	  Allow @LOCAL
	</Location>
	
	# Restrict access to the admin pages...
	<Location /admin>
	  Order allow,deny
	  Allow @LOCAL
	</Location>
	
- 最后一行加上`ServerAlias * Port 631 Listen /var/run/cups/cups.sock`

<kbd>Ctrl</kbd> + <kbd>O</kbd> 、回车、<kbd>Ctrl</kbd> + <kbd>X</kbd> 保存并退出;最后重启cups

# systemctl restart cups

接下来添加打印机到cups:浏览器打开http://IP地址:631,首先进入Administration选项卡,再点击Add Printer
如果提示“需要升级”,则输入你的root用户名和密码:

屏幕截图 2023-03-06 194703.png

选择Local Printers里面有HPLIP的一项,只有这个能够调用惠普驱动,点击Continue继续:

屏幕截图 2023-03-06 194740.png

这里设置打印机的名称等属性,保持默认即可,确保勾选了Share This Printer

屏幕截图 2023-03-06 194755.png

最后一步,保持默认即可,点击Add Printer完成打印机的添加。

屏幕截图 2023-03-06 194822.png

回到Administration选项卡,勾选这两个选项,并点击Change Settings

屏幕截图 2023-03-12 204241.png

Windows端配置

浏览器打开http://IP地址:631,首先进入Printers选项卡,在Queue Name一栏中找到打印机,右键选择复制链接。

以Windows 11系统为例,先安装好惠普的Windows端驱动(下载安装包或者从Windows Update获取),打开设置 - 蓝牙和其他设备 - 添加设备,此时应该能搜索到打印机,但这个在Windows下是无法添加的,几秒钟后点击手动添加

屏幕截图 2023-03-12 205512.png

选择按名称选择共享打印机,粘贴刚才复制的链接,点击下一页

屏幕截图 2023-03-06 195628.png

选择对应打印机型号的驱动,例如这里是HP LaserJet M1005 Class Driver,点击确定

屏幕截图 2023-03-06 195649.png

添加完成,根据需求可以勾选设置为默认打印机,然后打印测试页:

屏幕截图 2023-03-06 195711.png

微信图片_20230312210641.jpg

这样就可以在Word、Chrome等应用下面访问打印机了,然后依次在其他电脑上添加打印机,经测试XP及以上版本都支持,2000系统虽然支持IPP协议但是无法连接到打印机。

iOS端配置

几乎不需要配置,只要与盒子连入同一个局域网,各个应用的打印选项内就可以找到共享的打印机。只是需要注意一下纸张大小,否则打印尺寸会很奇怪。

配置扫描共享

使用sane (Scanner Access Now Easy) 进行扫描仪的共享。

安装sane并编辑配置

# apt install sane sane-utils xsane sane-airscan

编辑配置文件:

# nano /etc/sane.d/saned.conf

增加或取消注释需要由saned监听的网段,例如局域网网段为192.168.0.1/24:

#192.168.0.1
192.168.0.1/24
#[2001:db8:185e::42:12]
#[2001:db8:185e::42:12]/64

保存退出。
启动sane服务:

# systemctl enable saned.socket
# systemctl restart saned.socket

sane查找可用的扫描仪:

# scanimage -L

对于惠普一体机则是查找hpaio:/usb/开头的设备,记下地址:

device `hpaio:/usb/HP_LaserJet_M1005?serial=KJ2NFMB' is a Hewlett-Packard HP_LaserJet_M1005 all-in-one

Windows端配置

需要一个软件:WiaSane,通过虚拟扫描仪设备,让基于WIA接口的应用(例如Windows传真与扫描)连接到sane共享的扫描仪。接下来以Win7虚拟机为例,实际上其他版本也能完美支持。

安装时可能会提示驱动程序没有签名,选择始终安装此驱动程序软件

屏幕截图 2023-03-12 221256.jpg

接下来开始配置扫描仪,输入盒子的IP地址,端口保持默认的6566,点击下一步

Hostname or IP address

Available scanner devices中选择hpaio:/usb/开头的设备,用户名密码默认为空:

Available scanner devices

完成扫描仪的安装。

完成安装此设备的驱动程序软件

测试一下:

捕获4.JPG

存在两个bug:无法调整纸张大小、调整亮度无作用,不过不是很影响使用。

参考资料

  1. Ubuntu也能做NAS(1)——文件共享服务和打印机服务
  2. SaneOverNetwork - Debian Wiki

$ EOF.

    焊锡锡 支持!高技术力!👍
    顺便吐槽一下,我有台网易有道口袋打印机 Artist,只支持蓝牙连接手机还强迫注册用专门 App 打印而且 App 还兼职学习功能等等反而是打印功能做得贼烂的屑,怕是这辈子都没办法玩转它了[tieba=pen]

      DaleZ 查了下你说的这个东西,感觉应该是热敏打印机机芯配一个支持无线连接的单片机的结构,可以单独把机芯拆出来配上新的控制器,如果单片机部分是ESP8266、ESP32这些的话可以刷别的固件[tieba=huaji]

        焊锡锡 没公开资料啊……头疼。
        不过还是拆开看了一下。嗯,没见过的型号。

        支持!
        个人选择用一个便宜的电脑棒做打印服务器,两百块钱出头比啥都香(

          Akira Salvare 但是这个东西60包邮(
          其实更便宜可以用wr703n或者wr702n硬改加USB口,但是配套的openwrt太老了,并且似乎没有hplip(

            焊锡锡 确实,wr703n的openwrt还是lede17.几来着,很尴尬,也没啥可能自己编译新版(
            至于我为啥知道,那自然是因为手上有一个,而且我被这个150m整麻了

            焊锡锡 说起来,扩容后有机会刷高版本openwrt吗(草

              gyigi 我有个wr702n,当时是为了把歌华有线的Cable Modem转换成WiFi,然后让客厅的机顶盒能够点播;最终没用上,因为歌华固件更新把机顶盒的WiFi功能屏蔽了,并且点播和上网不是一个VLAN,用不了(
              后面自己改了64M RAM+16M ROM+USB接口,OpenWrt下面无线速率只有72.2M(

                gyigi 说起来,扩容后有机会刷高版本openwrt吗(草

                理论上可以,之前我试着自己编译了一个,编译成功但是刷上去不开机(悲)

                  © 2025 wvbCommunity 管理团队

                  删封申诉 | 知乎专栏 | 状态监控 | 用户协议(EULA) | 隐私政策

                  本站文章除其作者特殊声明外,一律采用CC BY-NC-SA 4.0许可协议进行授权,进行转载或二次创作时务必以相同协议进行共享,严禁用于商业用途。