嘿,好久没写东西了,最近在研究如何实现远程打印机的功能,家里是有一台打印机的,型号是HP Deskjet 2132 ,可以实现打印、复印、扫描功能,买了好几年了,除了墨贵,没别的毛病,这次想着给他改成网络的,可以实现手机、电脑等各种设备远程打印,经历了无数的坑,在此简单记录下。

一、IMX6ULL驱动打印机

总结,不大行,交叉编译的问题比较多,还需要进一步搞,但是也不是没有任何意义的,最起码cups可以用了,然后就可以添加网络打印机了。

1)搜索资料

以前在我的Ubuntu 18.04上是用过打印机的,打印的时候我也不知道发生了什么反正可以打印,扫描的时候需要安装一个叫SANE - Scanner Access Now Easy (sane-project.org)的东西,所有在这方面我是小白。然后通过不断搜索,基本上确定了这么几个关键字:

关键字 可能不是很准确的理解
hplip hp打印机驱动
cups 打印机管理工具,并不包含驱动程序,是驱动的上一层

| guten-print | Gutenprint Printer Drivers 开源的打印机驱动程序,支持一系列的打印机,没有我的 |

2)搞起

编译cups

经过不断的努力终于编译成了cups这个东西

编译环境:

wsl2 Ubuntu 18.04 + imx6ull交叉编译环境

编译命令:

cd cups
# 设置交叉编译环境工具链
# 这个命令不全,可能还有一些disable的东西,需要根据具体的情况进行设置
./configure --prefix=/home/xx/cupsinstall --host=arm-linux CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++

编译之后将文件上传到imx6ull就可以了

修改配置文件

#
# Configuration file for the CUPS scheduler.  See "man cupsd.conf" for a
# complete description of this file.
#
​
# Log general information in error_log - change "warn" to "debug"
# for troubleshooting...
LogLevel warn
PageLogFormat
​
# Deactivate CUPS' internal logrotating, as we provide a better one, especially
# LogLevel debug2 gets usable now
MaxLogSize 0
​
# Only listen for connections from the local machine.
Listen *:631            # 修改设置任何人都可以连接,本来是localhost,只有本地可以连接
Listen /run/cups/cups.sock
​
# Show shared printers on the local network.
Browsing On
BrowseLocalProtocols dnssd
​
# Default authentication type, when authentication is required...
DefaultAuthType Basic
​
# Web interface setting...
WebInterface Yes
​
# Restrict access to the server...
<Location />Order allow,denyAllow all         # 添加所有人都能访问/目录,没有的话是没法访问的
</Location>
​
# Restrict access to the admin pages...
<Location /admin>Order allow,denyAllow all         # 添加所有人都能访问/admiin目录,没有的话是没法访问的
</Location>
​
# Restrict access to configuration files...
<Location /admin/conf>AuthType DefaultRequire user @SYSTEMOrder allow,denyAllow all         # 添加所有人都能访问/admin/conf目录,没有的话是没法访问的
</Location>
​
# Restrict access to log files...
<Location /admin/log>AuthType DefaultRequire user @SYSTEMOrder allow,denyAllow all         # 添加所有人都能访问/admin/log目录,没有的话是没法访问的
</Location>
​
# Set the default printer/job policies...
<Policy default># Job/subscription privacy...JobPrivateAccess defaultJobPrivateValues defaultSubscriptionPrivateAccess defaultSubscriptionPrivateValues default
​# Job-related operations must be done by the owner or an administrator...<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 @SYSTEMOrder deny,allow</Limit>
​# All administration operations require an administrator to authenticate...<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices>AuthType DefaultRequire user @SYSTEMOrder deny,allow</Limit>
​# All printer operations require a printer operator to authenticate...<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 DefaultRequire user @SYSTEMOrder deny,allow</Limit>
​# Only the owner or an administrator can cancel or authenticate a job...<Limit Cancel-Job CUPS-Authenticate-Job>Require user @OWNER @SYSTEMOrder deny,allow</Limit>
​<Limit All>Order deny,allow</Limit>
</Policy>
​
# Set the authenticated printer/job policies...
<Policy authenticated># Job/subscription privacy...JobPrivateAccess defaultJobPrivateValues defaultSubscriptionPrivateAccess defaultSubscriptionPrivateValues default
​# Job-related operations must be done by the owner or an administrator...<Limit Create-Job Print-Job Print-URI Validate-Job>AuthType DefaultOrder 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 DefaultRequire user @OWNER @SYSTEMOrder deny,allow</Limit>
​# All administration operations require an administrator to authenticate...<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>AuthType DefaultRequire user @SYSTEMOrder deny,allow</Limit>
​# All printer operations require a printer operator to authenticate...<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 DefaultRequire user @SYSTEMOrder deny,allow</Limit>
​# Only the owner or an administrator can cancel or authenticate a job...<Limit Cancel-Job CUPS-Authenticate-Job>AuthType DefaultRequire user @OWNER @SYSTEMOrder deny,allow</Limit>
​<Limit All>Order deny,allow</Limit>
</Policy>
​
# Set the kerberized printer/job policies...
<Policy kerberos># Job/subscription privacy...JobPrivateAccess defaultJobPrivateValues defaultSubscriptionPrivateAccess defaultSubscriptionPrivateValues default
​# Job-related operations must be done by the owner or an administrator...<Limit Create-Job Print-Job Print-URI Validate-Job># AuthType Negotiate   所有的Negotiate都改成DefaultAuthType 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 DefaultRequire user @OWNER @SYSTEMOrder deny,allow</Limit>
​# All administration operations require an administrator to authenticate...<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>AuthType DefaultRequire user @SYSTEMOrder deny,allow</Limit>
​# All printer operations require a printer operator to authenticate...<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 DefaultRequire user @SYSTEMOrder deny,allow</Limit>
​# Only the owner or an administrator can cancel or authenticate a job...<Limit Cancel-Job CUPS-Authenticate-Job>AuthType DefaultRequire user @OWNER @SYSTEMOrder deny,allow</Limit>
​<Limit All>Order deny,allow</Limit>
</Policy>

添加用户:

这一条好像相当重要,不加好像也是无法访问的,但是具体我也忘了,总之我的理解是需要将可以使用打印机的用户或者说imx6ull的用户(我这里是root)添加到lpadmin用户组中

# 添加root到用户组
usermod -a G lpadmin root
# 该用户需要有一个密码
passwd root

启动服务

# 执行以下命令就可以启动cupsd服务了
cupsd

远程登陆

在个人电脑上输入imx6ull设备的IP地址+631端口,如http://192.168.1.14:631即可进入到cups的web管理页面,到这里就结束了,没办法,打印机驱动并没有编译成功,所以暂时到这里。

二、树莓派安装hplip

安装hplip

imx6ull是证明失败了的,所以我将目光投向了我的树莓派4,一条命令搞定

sudo apt install hplip
# 添加当前用户到lpadmin用户组
# 我这里是添加的pi用户
sudo usermod -a -G lpadmin pi

然后按照上边imx6ull那段更改配置文件,然后重新插拔打印机,然后也可以直接重启下树莓派

sudo reboot

进入配置添加打印机

到这里为止就可以打印了,第二部分结束

三、imx6ull再来一次

前边imx6ull这个东西主要是驱动编译有问题,后来看到cups支持一个叫IPP的东西,似乎是不需要知道打印机驱动的,因此重新搞了一下。直接使用ipp协议进行打印机的添加,效果也是不错的。

小总结

最近在网上也在学习如何驱动打印机,确实是比较麻烦的,目前看来惠普的是最简单的,其提供的hplip非常完善,也提供了源代码,可以交叉编译安装,其他的打印机如兄弟打印机提供了Linux x86-64的驱动,但是没有源码,在树莓派或其他嵌入式板子上没法用,也有其他人提供了一些开源的解决方案,这个还需要测试,功能可能也不够完善,同时打印机如果是同一个系列的,驱动程序基本也是可以通用的。都需要测试。

Linux嵌入式树莓派CUPS驱动打印机相关推荐

  1. linux手动连接网络打印机驱动_怎么在Linux上安装打印机驱动

    怎么在Linux上安装打印机驱动(以Ubuntu为例) 通常来说,你不需要手动在Linux上安装硬件驱动.系统会自动检测计算机硬件,然后自动为你安装驱动.但是,对于打印机,情况就不一样了.事实上,Li ...

  2. 嵌入式linux ASoC架构声卡驱动开发

    嵌入式linux ASoC架构声卡驱动开发 文章目录 嵌入式linux ASoC架构声卡驱动开发 需求分析 ASoC架构下声卡驱动代码结构 codec驱动 snd_soc_register_codec ...

  3. Linux嵌入式驱动开发零基础入门集合(STM32过渡到Linux嵌入式)

    Linux嵌入式驱动开发01--第一个驱动Hello World(附源码) Linux嵌入式驱动开发02--驱动编译到内核 Linux嵌入式驱动开发03--杂项设备驱动(附源码) Linux嵌入式驱动 ...

  4. Linux下安装EPSON L310打印机驱动

    Linux下安装EPSON L310打印机驱动 在这里http://download.ebz.epson.net/dsc/search/01/search/searchModule搜索l310查到如下 ...

  5. Linux嵌入式驱动开发13——ioctl接口(gpio控制使用)

    文章目录 全系列传送门 引言 什么是unlocked_ioctl接口? unlocked_ioctl和read/write函数有什么相同和不同 unlocked_ioctl接口命令规则 命令的合成宏与 ...

  6. 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统

    剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...

  7. linux 键盘驱动下载,嵌入式Linux系统的键盘驱动实现

    嵌入式Linux系统的键盘驱动实现1引言 Linux由于其具有内核强大且稳定,易于扩展和裁减,丰富的硬件支持等诸多优点,在嵌入式系统中得到了广泛的应用.很多嵌入式Linux系统,特别是一些具有与用户强 ...

  8. Linux嵌入式驱动开发07——GPIO驱动过程记录(飞凌开发板)

    文章目录 全系列传送门 1. 在/arch/arm/boot/dts/imx6q-pinfunc.h查找 2. 在设备树配置文件中添加设备节点定义以及其引脚定义 3. 修改设备树文件添加配置 4. d ...

  9. Linux嵌入式驱动开发02——驱动编译到内核

    文章目录 全系列传送门 make menuconfig图形化配置界面 1. 怎么进入到make menuconfig图形化界面? 2. make menuconfig图形化界面的操作 3. 退出 4. ...

  10. Linux嵌入式驱动开发01——第一个驱动Hello World(附源码)

    文章目录 全系列传送门 引言 驱动介绍 Hello World 1. 包含头文件 2. 驱动模块的入口和出口 3. 声明信息 4. 功能实现 完整代码 编译 第一种方法 第二种方法 编译成模块 第一步 ...

最新文章

  1. 图形变换动画的小Demo
  2. JSP第十四次课:JSP项目开发高级操作2---在线编辑器应用及前台首页显示商品
  3. chrome 插件 页面请求转发_巧用Chrome插件二三事
  4. 4 Convex optimization problems
  5. Java中的异常处理机制的简单原理和应用
  6. 4t硬盘实际容量是多少_4TB超大容量+便携实用的移动硬盘-东芝A3移动硬盘体验
  7. 10个经典Python爬虫入门实例!你还不知道吗
  8. python凹多边形分割_凹多边形分割成凸多边形
  9. 基于Python开发WebService-2:客户端(suds、zeep)
  10. Ubuntu系统下基本配置Edison
  11. 大话深度信念网络(DBN)
  12. WinRAR解压War包
  13. 确认main_arena相对libc的偏移地址
  14. 字符串操作函数strstr
  15. Spring Security认证_Remember Me
  16. BUAA 439 孟竹屌丝玩儿游戏
  17. Graphics.FromImage报错“Graphics object cannot be created from an image that has an indexed pixel ...”
  18. 2023最新整理,Android车载操作系统开发揭秘,无偿分享!
  19. python3的安装
  20. 实现证件照APP(一)

热门文章

  1. 5W1H 图书管理系统
  2. 图像匹配 | 论文与方法整理
  3. 米思齐(Mixly)初体验—触摸式开关
  4. ACM卡常数(各种玄学优化)
  5. 【毕业设计】基于stm32的智能温控风扇设计与实现 - 物联网 单片机
  6. getbook netty实战_《Netty实战》Netty In Action中文版 第1章 Netty——异步和事件驱动...
  7. 高级终端termux下载不了Python_在安卓手机上安装Python写的软件是什么体验?
  8. SQL2008 SQLExpress数据库存满处理
  9. 直流电机控制原理与TB6612FNG(初识编码器)
  10. 企业级POS收银系统源码(客户端+后台)