Linux嵌入式树莓派CUPS驱动打印机
嘿,好久没写东西了,最近在研究如何实现远程打印机的功能,家里是有一台打印机的,型号是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驱动打印机相关推荐
- linux手动连接网络打印机驱动_怎么在Linux上安装打印机驱动
怎么在Linux上安装打印机驱动(以Ubuntu为例) 通常来说,你不需要手动在Linux上安装硬件驱动.系统会自动检测计算机硬件,然后自动为你安装驱动.但是,对于打印机,情况就不一样了.事实上,Li ...
- 嵌入式linux ASoC架构声卡驱动开发
嵌入式linux ASoC架构声卡驱动开发 文章目录 嵌入式linux ASoC架构声卡驱动开发 需求分析 ASoC架构下声卡驱动代码结构 codec驱动 snd_soc_register_codec ...
- Linux嵌入式驱动开发零基础入门集合(STM32过渡到Linux嵌入式)
Linux嵌入式驱动开发01--第一个驱动Hello World(附源码) Linux嵌入式驱动开发02--驱动编译到内核 Linux嵌入式驱动开发03--杂项设备驱动(附源码) Linux嵌入式驱动 ...
- Linux下安装EPSON L310打印机驱动
Linux下安装EPSON L310打印机驱动 在这里http://download.ebz.epson.net/dsc/search/01/search/searchModule搜索l310查到如下 ...
- Linux嵌入式驱动开发13——ioctl接口(gpio控制使用)
文章目录 全系列传送门 引言 什么是unlocked_ioctl接口? unlocked_ioctl和read/write函数有什么相同和不同 unlocked_ioctl接口命令规则 命令的合成宏与 ...
- 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统
剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...
- linux 键盘驱动下载,嵌入式Linux系统的键盘驱动实现
嵌入式Linux系统的键盘驱动实现1引言 Linux由于其具有内核强大且稳定,易于扩展和裁减,丰富的硬件支持等诸多优点,在嵌入式系统中得到了广泛的应用.很多嵌入式Linux系统,特别是一些具有与用户强 ...
- Linux嵌入式驱动开发07——GPIO驱动过程记录(飞凌开发板)
文章目录 全系列传送门 1. 在/arch/arm/boot/dts/imx6q-pinfunc.h查找 2. 在设备树配置文件中添加设备节点定义以及其引脚定义 3. 修改设备树文件添加配置 4. d ...
- Linux嵌入式驱动开发02——驱动编译到内核
文章目录 全系列传送门 make menuconfig图形化配置界面 1. 怎么进入到make menuconfig图形化界面? 2. make menuconfig图形化界面的操作 3. 退出 4. ...
- Linux嵌入式驱动开发01——第一个驱动Hello World(附源码)
文章目录 全系列传送门 引言 驱动介绍 Hello World 1. 包含头文件 2. 驱动模块的入口和出口 3. 声明信息 4. 功能实现 完整代码 编译 第一种方法 第二种方法 编译成模块 第一步 ...
最新文章
- 图形变换动画的小Demo
- JSP第十四次课:JSP项目开发高级操作2---在线编辑器应用及前台首页显示商品
- chrome 插件 页面请求转发_巧用Chrome插件二三事
- 4 Convex optimization problems
- Java中的异常处理机制的简单原理和应用
- 4t硬盘实际容量是多少_4TB超大容量+便携实用的移动硬盘-东芝A3移动硬盘体验
- 10个经典Python爬虫入门实例!你还不知道吗
- python凹多边形分割_凹多边形分割成凸多边形
- 基于Python开发WebService-2:客户端(suds、zeep)
- Ubuntu系统下基本配置Edison
- 大话深度信念网络(DBN)
- WinRAR解压War包
- 确认main_arena相对libc的偏移地址
- 字符串操作函数strstr
- Spring Security认证_Remember Me
- BUAA 439 孟竹屌丝玩儿游戏
- Graphics.FromImage报错“Graphics object cannot be created from an image that has an indexed pixel ...”
- 2023最新整理,Android车载操作系统开发揭秘,无偿分享!
- python3的安装
- 实现证件照APP(一)
热门文章
- 5W1H 图书管理系统
- 图像匹配 | 论文与方法整理
- 米思齐(Mixly)初体验—触摸式开关
- ACM卡常数(各种玄学优化)
- 【毕业设计】基于stm32的智能温控风扇设计与实现 - 物联网 单片机
- getbook netty实战_《Netty实战》Netty In Action中文版 第1章 Netty——异步和事件驱动...
- 高级终端termux下载不了Python_在安卓手机上安装Python写的软件是什么体验?
- SQL2008 SQLExpress数据库存满处理
- 直流电机控制原理与TB6612FNG(初识编码器)
- 企业级POS收银系统源码(客户端+后台)