Linux下搭建打印机共享服务器(支持苹果AirPrint)

一、背景

  • 大学刚毕业没有找到工作这段时间,来到华清远见学习进修一下嵌入式知识。由于我的习惯,身边离不开打印机,所以就在周末买了一台二手的惠普打印机安装到了我租的房子中,之前一直是使用Windows的打印机共享,但是要想随时都可以使用这台打印机就得一直开着一台装有Windows的电脑(Windows服务器)。然而我手头拥有的正好是一台实验用的乌班图(Linux)服务器,所以有了搭建一个打印机服务器的想法。

  • 简介:

  • CUPS(Common UNIX Printing System)即通用Unix打印系统)是苹果公司所有,一个打印集成服务。目前为止,苹果貌似是停止了更新CUPS,进而产生了openprinting cups

  • 包括了前端接收打印命令的相关程序,后端控制打印机硬件的程序,中间则是打印驱动。首先来看看CUPS驱动打印机的方式。这里要说明的是所谓驱动,其实是一系列的程序加定义文件的总和,不像我们有时候想像的那样是一个很简单的单一文件。当CUPS接受到打印命令时,首先会进行一个格式的预转换,将如.jpg等各种文件先转换成PostScript格式。然后进一步将PostScript格式转换成 CUPS内部格式,这个称为PostScript到PostScript转换,这两种PostScript格式还是有差别的,当然大家可以不必深究(我也没好好看,只是知道在MIME中定义了这两种不同的PostScript)。 以上这些都是预处理工作,接下来CUPS的工作围绕PostScript展开,CUPS会根据PPD(PostScript Printer Description 文件)文件来选择相应的处理流程。PPD文件其实是驱动的核心,不同的打印机有不同的PPD文件,PPD 包含有关输出设备的信息,CUPS使用 PPD 文件中的信息来确定在打印文档时向打印机发送哪些 PostScript 信息。需要说明的是,CUPS实际上把所有打印机都“看成”PostScript打印机,即便打印机本身不支持PostScript,也可以通过CUPS 自带的PostScript解释程序(pstoraster)或者GhostScript来解释PostScript文件,从而把普通的打印机模拟成 PostScript打印机。(一般的打印机并不能识别PostScript格式的信息,所以在使用过程中我们还需要安装一类解释性的驱动,让CUPS能通过这类驱动将信息转换成一般打印机能识别的信息。)可以分为三种,第一种就是接正在的 PostScript打印机的,而后面两种就是分别用CUPS的pstoraster或GhostScript来解释PostScript,虚拟出一台 PostScript打印机。三种工作方式能够分别支持不同的打印机(这也是CUPS兼容性非常好的原因): 第一种,直接传输PostScript文件给CUPS的后台,再将打印流传输到PostScript打印机,接下来的事情全部丢给打印机去处理,当然,这种打印机大多价格不菲; 第二种方式是交给CUPS的内置程序处理,把PostScript转换成其特有的raster格式,这种格式是CUPS特有的,至于为什么要转成这种格式,是为了方便打印机生产商,让他们可以只需开发CUPS的raster格式到其打印机的接口,方便大家统一,但似乎这一方式的驱动还不多。 第三种方式,也是支持打印机最多的方式,叫做GhostScript格式的驱动模式。它其实和第二种打印驱动比较类似,只把CUPS的解释器换成了外置的 GhostScript来解释PostScript文件,之所以这么周折,是因为目前支持这种方法的打印机比支持CUPS的raster的打印机要多很多。GhostScript程序是独立于CUPS运行的,它的功能也不仅限于打印,但很多情况下通过CUPS来调用GhostScript打印是件很方便的事情。foomatic则是用于连接CUPS和GhostScript的一个脚本程序(用perl写的),用来打包各种不同格式的打印机命令,它非常有用,对于通过CUPS调用GhostScript来说则是必须的。GhostScript格式的驱动程序很多,大家可以到Open Printing - OpenPrinting去看看,现在大部分打印机在Linux都是用GhostScript驱动的。当然,有些时候,GhostScript还不能包打天下,像HP的1020就比较特殊,它的打印流有点不一样,需要再用特殊的程序进行处理,GhostScript负责讲PostScript格式转换成点阵模式后,还要进过foo2zjs处理,转换成特殊的打印流,再交给后台。这种模式,相当于给GhostScript又装了个插件,附加了一个小模块。 总之,无论是哪种模式,实际上CUPS都是把打印机“看成”PostScript打印机,或是直接调用,或是用自带的方法虚拟,或者用GhostScript虚拟。

  • 技术定位:初级

  • 整体思路:主要利用CUPS来实现

二、操作步骤

2.1 准备工作

准备工作

  • 将打印机使用连接线连接到服务器上,开机,使打印机处于准备完毕状态,使用其它终端SSH连接到服务器。

  • 更新软件,安装cups

 sudo apt-get update
 sudo apt-get upgrade
 sudo apt install cups  #公共UNIX打印系统

 

2.2配置cups

  在安装好cups,但未配置之前,用户只可以使用本地访问cups服务,需要手动设置config文件来添加其它用户和地址的访问权限。中文注释可参考附录一。

cd /etc/cups     # 进入到cups目录下
sudo nano cupsd.conf  # 利用nano进行编辑

  做如下更改:

  1.更改访问端口。

原样

 

原样

这里可以添加指定访问端口,或者直接改为:Listen 0.0.0.0:631 或者 Listen 631

注意后者不带“ : ”

 

修改后

  2.更改显示本地网络上的共享打印机。

 

修改后

  3.修改限制对服务器的访问...

 

原样

在 Order allow,deny下添加 Allow all 。

 

修改后

  4.修改限制对管理页面的访问...

 

原样

在 Order allow,deny下添加 Allow all 。

 

修改后

5.修改限制对配置文件的访问...

 

原样

在 Order allow,deny下添加 Allow all

 

修改后

保存并退出

Ctrl+o,Enter,Ctrl+x;

2.3重启服务

sudo service cups restart

2.4驱动

驱动部分其实是比较麻烦的,这里以惠普激光打印机HP_LaserJet_P1008为例(注意不同品牌打印机驱动安装方式也不同)

首先安装惠普驱动库:

sudo apt-get install hplip

在安装完这个软件以后,添加打印机驱动时就可以找到对应的型号,但实测选择以后无法正常打印。点击打印测试页后打印机会启动一下,然后就没了,网页上也会写打印失败。所以需要更细致的安装驱动:

运行

hp-setup -i #第一个选0,第二个按p

在执行完这些命令后需要你手动找到一个插件文件,这个文件可能会因为版本不同而不一样,请根据提示下载对应的run文件。

https://developers.hp.com/hp-linux-imaging-and-printing/plugins

下载后可以使用xftp等文件工具添加到服务器上,然后在上一条指令p后输入run文件的地址。

安装好插件再执行此命令就会看到下面的样子:

提示说:此设备已存在一个或多个打印队列,证明已经驱动成功。

2.5进入管理界面

如果不记得服务器ip地址可以使用ifconfig命令找到地址

  1. 在浏览器中输入IP地址加上端口号631就可以进入配置界面。(界面根据版本不同标题会不同,CUPS 2.4.1标题就会是OpenPrinting CUPS,使用起来是一样的。)

 

  1. 先点击管理,再点击添加打印机。期间会跳转网页,根据提示点击(可能会出现不安全的网页,点击继续浏览就行)然后输入服务器账号和密码即可(配置文件如果没有完全修改正确的话会出现下图错误,使用root账号和密码登录可以解决)。

 

管理界面

 

未正确配置cupsd.conf

  1. 选择你所需要的打印机。在这里我所需要的是通过USB连接的惠普打印机所以选择图中的选项。(不要被其它的选项迷惑)。点击Continue(继续)。

 

  1. 命名和选择时候共享。最好就用它默认的名字,下边的选项勾选上就是共享这个打印机。然后点击继续。

 

  1. 选择驱动。按照打印机品牌和型号选择打印机的驱动。注意!这里面的驱动会有不好使的情况,添加之后测试一下就知道好不好使了。上面的选项选择打印机品牌,下面选项点击后就会添加这个打印机。

 

  1. 添加好之后系统会让你选择打印机设置,纸张大小、浓度之类的。默认确定就好,然后系统会跳转到打印机管理界面。点击左边栏的第二个选项就可以打印测试页了。如果打印不出来,那就去搜索这个型号打印机的驱动在Linux上怎么安装吧。else打印出来了,恭喜你基本上就算完成了部署工作。

 

三、Windows添加共享打印机

这个就比较通用了,只要是使用这种方式共享的打印机都可以通过添加http打印机的方式添加打印机。

添加打印机方式有两种,一种是在搜索中点击搜索到的打印机,另一种是手动添加打印机,这里着重接受后者。先到打印机的官网下好打印机的驱动。(后面会说没用usb线连接如何获取驱动)

  • 首先复制打印机界面的网址

 

  • 打开控制面板(不会的百度),选择设备和打印机。

 

  • 点击我所需的打印机未列出。

  • 粘贴网址,注意需要删掉s

  • 选择驱动,点击确定。如果这台电脑没有有线连接过这台打印机,使用官方下载的驱动应用程序可能会获取不到驱动,这时我们就需要一些小技巧来获取驱动。

首先,官方的驱动软件是必须有的,一般为.exe文件:

用解压软件打开exe文件可以看到里面存放了.INF驱动文件,将其解压出来,然后在添加打印机时选择驱动时,选择从硬盘安装。选择解压出来的文件再选择对应型号的驱动就行(一般这个文件是一个集合,里面会有很多个相似型号的打印机)。

  1. 打印测试页,完活。

后续

1.其实这个项目所占用的资源很少,完全可以移植到机顶盒或者路由器上使用。淘宝上也有很多家在买这种产品,说是打印机服务器,但其实就是优酷路由宝。所以后续打算在开发板上实验一下,或许可以直接改装到打印机内部。

2.查阅资料后发现其实在此基础上还可以添加苹果的Airprint服务:

apt-get -y install avahi-daemon avahi-discover libnss-mdns

执行完后在苹果设备上对文件操作就可以看到下面的样子(我服务器名字叫a,所以打印机也叫a)

点击打印以后,打印机就会开始工作,注意要看好打印的纸张大小。

附录一:config文件中文翻译(谷歌翻译)

#
# CUPS 调度程序的配置文件。 有关此文件的完整描述,请参见“man cupsd.conf”。
#

# 在 error_log 中记录一般信息 - 将“warn”更改为“debug”
# 用于故障排除...
LogLevel warn
PageLogFormat

# 停用 CUPS 的内部对数旋转,因为我们提供了更好的对数旋转,尤其是
# LogLevel debug2现在可用
MaxLogSize 0

# 仅侦听来自本地计算机的连接。
Listen localhost:631
Listen /run/cups/cups.sock

# 显示本地网络上的共享打印机。
Browsing Off
BrowseLocalProtocols dnssd

# 默认身份验证类型,当需要身份验证时...
DefaultAuthType Basic

# 网页界面设置...
WebInterface Yes

# 限制对服务器的访问...
<Location />
  Order allow,deny
</Location>

# 限制对管理页面的访问...
<Location /admin>
  Order allow,deny
</Location>

# 限制对配置文件的访问...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
</Location>

# 限制对日志文件的访问...
<Location /admin/log>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
</Location>

# 设置默认打印机/作业策略...
<Policy default>
  # 工作/订阅隐私...
  JobPrivateAccess default
  JobPrivateValues default
  SubscriptionPrivateAccess default
  SubscriptionPrivateValues default

  # 与作业相关的操作必须由所有者或管理员完成...
  <Limit Create-Job Print-Job Print-URI Validate-Job>
    Order deny,allow
  </Limit>

  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  # 所有管理操作都需要管理员进行身份验证...
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # 所有打印机操作都需要打印机操作员进行身份验证...
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # 只有所有者或管理员可以取消或验证作业...
  <Limit Cancel-Job CUPS-Authenticate-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  <Limit All>
    Order deny,allow
  </Limit>
</Policy>

# 设置经过身份验证的打印机/作业策略...
<Policy authenticated>
  # Job/subscription privacy...
  JobPrivateAccess default
  JobPrivateValues default
  SubscriptionPrivateAccess default
  SubscriptionPrivateValues default

  # 与作业相关的操作必须由所有者或管理员完成...
  <Limit Create-Job Print-Job Print-URI Validate-Job>
    AuthType Default
    Order deny,allow
  </Limit>

  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
    AuthType Default
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  # 所有管理操作都需要管理员进行身份验证...
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # 所有打印机操作都需要打印机操作员进行身份验证...
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # 只有所有者或管理员可以取消或验证作业...
  <Limit Cancel-Job CUPS-Authenticate-Job>
    AuthType Default
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  <Limit All>
    Order deny,allow
  </Limit>
</Policy>

# 设置 Kerberized 打印机/作业策略...
<Policy kerberos>
  # Job/subscription privacy...
  JobPrivateAccess default
  JobPrivateValues default
  SubscriptionPrivateAccess default
  SubscriptionPrivateValues default

  # 与作业相关的操作必须由所有者或管理员完成...
  <Limit Create-Job Print-Job Print-URI Validate-Job>
    AuthType Negotiate
    Order deny,allow
  </Limit>

  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
    AuthType Negotiate
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  # 所有管理操作都需要管理员进行身份验证...
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # 所有打印机操作都需要打印机操作员进行身份验证...
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # 只有所有者或管理员可以取消或验证作业...
  <Limit Cancel-Job CUPS-Authenticate-Job>
    AuthType Negotiate
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  <Limit All>
    Order deny,allow
  </Limit>
</Policy>

参考资料:

Linux打印服务-CUPS的安装、配置和使用

在n1 ,魔百盒q5盒子上,实现惠普p1008系列的网络共享 打印和airprint服务

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AirPrint苹果公司的一项打印技术,它使用户能够在与其iOS设备或Mac电脑连接的打印机上轻松打印文件。AirPrint版本1.6.6.1是AirPrint技术的一个更新版本,原始版本为1.0,其后有多个版本发布以改进兼容性和功能。 要下载AirPrint版本1.6.6.1,首先需要确认设备的操作系统是否支持。通常情况下,较新的苹果设备和操作系统都支持AirPrint功能。然后,可以按照以下步骤下载和安装AirPrint 1.6.6.1: 1. 在设备的桌面或主屏幕上找到App Store图标,并点击打开App Store。 2. 在App Store的搜索框中,输入“AirPrint”并点击搜索。 3. 在搜索结果中,找到并点击名为“AirPrint”的应用程序。 4. 查看应用程序的详细信息,确保版本号为1.6.6.1。 5. 点击“获取”或“安装”按钮,开始下载和安装AirPrint的最新版本。 6. 下载完成后,设备上将会出现AirPrint的图标。 请注意,AirPrint是系统内置的功能,因此默认情况下不需要下载单独的安装程序。按照上述步骤进行操作,将会更新设备的AirPrint版本。 总结:要下载AirPrint版本1.6.6.1,只需在App Store中搜索并安装名为“AirPrint”的应用程序即可,确保其版本号为1.6.6.1。 ### 回答2: AirPrint是一款苹果公司开发的无线打印技术,使得苹果设备能够通过Wi-Fi网络无线连接并打印文件。然而,AirPrint并不需要下载安装,因为它已经集成在iOS设备的系统中。 当你想要使用AirPrint功能时,只需确保你的iOS设备和打印机连接在同一个Wi-Fi网络中,并且你的打印机是AirPrint兼容的。在你的iOS设备上,进入“设置”界面,然后选择“打印机”,点击“选择打印机”,系统会自动搜索并显示可用的AirPrint打印机。选择你想要连接的打印机,并进行一些简单的设置,就可以开始使用AirPrint打印了。 如果你的iOS设备当前的系统版本不支持AirPrint功能,你需要更新到最新的系统版本。升级系统可以使你的设备获得更多的功能和修复一些已知的Bug。请确保你的设备有足够的存储空间来下载和安装系统更新,然后进入“设置”-“通用”-“软件更新”界面,系统会检测并提示你安装最新的系统版本。 总之,下载1.6.6.1的AirPrint并不是必要的,因为AirPrint已经内置在iOS设备中。你只需要确保你的设备和打印机连接在同一个Wi-Fi网络,并进行简单的设置即可使用AirPrint功能。如果你的系统版本不支持AirPrint,你需要更新到最新的系统版本以获得更多的功能和修复Bug。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值