无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: chinaren12
打印 上一主题 下一主题

[求助] 刚刚在论坛看到一个共享打印机的好东西raw print server

  [复制链接]
151#
发表于 2022-9-11 23:25:07 | 只看该作者
chinaren12 发表于 2022-9-11 21:18
我这边是把打印机名字改为了p1007,刚开始第一次测试也没打出来,后面我排查了一下问题,是我两边的打印 ...

应该和ip地址没关系,倒是有可能是网络不稳定,又找到一些usb操作代码
使用API操作USB太麻烦了,[七猫]告诉我可以用LibUSB-Win32(http://sourceforge.net/apps/trac/libusb-win32/wiki)
a. 调用usb_init函数,进行初始化
b. 调用usb_find_busses、usb_find_devices和usb_get_busses这三个函数获得已找到的USB总线序列;然后通过链表遍历所有的USB设备,根据已知的要打开USB设备的ID(VID/PID),找到相应的USB设备;最后调用usb_open函数打开该USB设备(在这里假设总线上没有相同VID和PID的USB设备。如果总线上存在着相同VID和PID的设备,还需要进行其他条件判断,比如设备名称,以保证是打开的是期望的USB设备)。
c. 使用usb_control_msg函数与USB设备进行通信,向USB设备读取数据或写入数据。
d. 关闭USB设备。


回复

使用道具 举报

152#
发表于 2022-9-11 23:49:10 | 只看该作者
搜索一下发现还有一堆操作usb的lib,
openwrt路由器或者Linux下估计就是通过这些直接发给usb的,
理论上win也可以用,
论坛存一份介绍
关于libusb,libusbx,libusbK,libusb-win32,WinUSB的关系
刚开始接触USB驱动编程,一般是利用现成的库来做,但是网上一搜索,发现一大堆各种各样的lib把人搞的很头疼,这边总结一下。


== libusb ==
说明:libusb是一个跨平台的usb驱动框架。libusb原始项目在2010年后基本没有更新,曾有libusbx项目2012年从libusb分出来,2014年1月26日又合并回libusb了。当时的libusbx-1.0.18和libusb-1.0.18其实完全一样,相当于libusbx替换了libusb的代码!后续的版本其实都是基于libusbx的代码了!

包含两个主要分支1.x和0.1.x。
1.x和0.1.x并不兼容,可以同时存在,如果要在1.x基础上兼容0.1.x需要libusb-compat转换层。所以0.1.x和libusb-compat不能同时装上!

内核:目前1.x分支的驱动只有用户态,linux下支持usbfs,windows下支持WinUSB.sys。
也可以支持libusbK和libusb-win32(通过libusbK支持)。

工具:通过Zadig支持生成基于libusb0、libusbK、WinUSB的inf文件。
https://github.com/pbatard/libwdi/wiki/Zadig

== libusb-win32 ==
说明:libusb-win32是从libusb-0.1.x分支衍生的,
主要是针对Windows做优化,所以接口风格和libusb-0.1.x一致。

内核:WDM框架的libusb0.sys驱动。

工具:自带inf-wizard.exe生成基于libusb0.sys的inf文件。

注意:目前建议是新的项目尽可能使用libusb,而不是这个libusb-win32了。我在这个上面花了很多时间,一直报错,坑爹了,要注意libusb-win32已经废弃,目前使用的是libusb+Zadig的组合。

== libusbK ==
说明:libusbK主要是想做一个WinUSB接口风格的开源usb库,
支持基于KMDF的libusbK.sys和系统自带的WinUSB.sys。参考libusb-win32做的开发,部分工具是从libusb-win32整合而来的。因为源代码里也包含了libusb0.dll的加载功能和转换层,所以也可以支持WDM框架的libusb0.sys(libusb-win32)。

内核:基于KMDF框架的libusbK.sys、WDM的libusb0.sys、系统的WinUSB.sys

工具:自带libusbK-inf-wizard.exe(基于libusb-win32的工具改的)
生成基于libusb0、libusbK、WinUSB的inf文件。

== 备忘 ==
libusb (官方版本,2014.06.14)
新网站:http://libusb.info/
新代码:http://sourceforge.net/projects/libusb/ (新的1.0.19-2014.06.14)
新开发:http://github.com/libusb/ (貌似开发进度都在这个上面显示了)
旧网站:http://www.libusb.org/ (基于Trac的,已经废弃了)
旧网站:http://libusbx.org/
旧代码:http://sourceforge.net/projects/libusbx/ (到1.0.18-2014.01.26为止)
目前Windows下只是用户态的驱动
支持libusbK、WinUSB、libusb-win32的内核驱动访问。
如果要使用libusb-win32的话,需要安装libusbK!

libusbK(支持windows,2014.04.27)
新网站:http://sourceforge.net/projects/libusbk/
旧网站:http://code.google.com/p/usb-travis/
包含内核态和用户态驱动

libusb-win32(libusb-0.1版本的windows移植,2012.01.17)
网站:http://www.libusb.org/wiki/libusb-win32
网站:http://sourceforge.net/projects/libusb-win32/
包含内核态和用户态驱动

简单说,就是不要去管libusb-win32和libusbK项目,目前不管是windows还是Linux都是使用libusb项目,主页是libusb.info。

在Windows上使用libusb时是调用微软的WinUSB接口,在Linux上是usbfs。用Zadig工具统一安装驱动,不用理什么inf-wizard.exe。

参考 http://blog.gpjtag.com/?p=733


点评

我刚刚又测试了一遍,P1007确实可以打印了。但是,有一个小小的问题。 就是如果实际连接打印机的电脑不打印,共享的电脑打印的话,第一次打印不会成功。按了打印之后,打印会有一个短暂的唤醒动作,然后就没反应  详情 回复 发表于 2022-9-12 09:36
回复

使用道具 举报

153#
 楼主| 发表于 2022-9-12 09:36:56 | 只看该作者
zhuwg 发表于 2022-9-11 23:49
搜索一下发现还有一堆操作usb的lib,
openwrt路由器或者Linux下估计就是通过这些直接发给usb的,
理论上w ...

我刚刚又测试了一遍,P1007确实可以打印了。但是,有一个小小的问题。

就是如果实际连接打印机的电脑不打印,共享的电脑打印的话,第一次打印不会成功。按了打印之后,打印会有一个短暂的唤醒动作,然后就没反应了。

把这个文档取消掉,第二个文档就能正常打印出来了。

我昨天测试的时候也是一样,第一次测试打印机没打印出来,当把打印的文档取消掉后,再在链接打印机的电脑上打印一张测试页,后面就能正常打印了。

点评

找了一些资料,大概意思是hp这一系列打印机要先发固件过去,打印机才能进正常工作状态, 也就是打印机开机之后如果从没打印过,第一次发固件过去,估计打印机要消耗一段时间运行固件, 之后才可以正常打印 我修改  详情 回复 发表于 2022-9-12 23:54
回复

使用道具 举报

154#
发表于 2022-9-12 23:54:57 | 只看该作者
chinaren12 发表于 2022-9-12 09:36
我刚刚又测试了一遍,P1007确实可以打印了。但是,有一个小小的问题。

就是如果实际连接打印机的电脑 ...

找了一些资料,大概意思是hp这一系列打印机要先发固件过去,打印机才能进正常工作状态,
也就是打印机开机之后如果从没打印过,第一次发固件过去,估计打印机要消耗一段时间运行固件,
之后才可以正常打印
我修改的代码没等待时间,发固件过去就发打印内容了,可能这个时候打印机不能识别,
而第二次打印,这个时候打印机已经运行过固件了,就可以了,
明天看看怎么修改一下

参考https://www.right.com.cn/forum/thread-5452802-1-1.html以及https://www.right.com.cn/forum/thread-502078-1-4.html

有些广受欢迎的打印机,如我的HP Laserjet 1020,是所谓的GDI打印机,主要用于Windows系统。这种打印机设计时就简化了固件,ROM里根本没有真正干活的程序。打印机开机之后,必须由计算机把固件传过来安装到内存后,才能正常工作。在Windows系统里,打印机驱动程序就会自动做这个事。Windows支持热插拔技术,就算主机先开机工作,打印机后开机,Windows系统也会识别到USB口接入了打印机,进而发送固件给打印机。打印机在接收到固件后进行启动,这时我们会听到明显的自检轰鸣声。

但GDI打印机一般只提供了Windows下的驱动,将他们连接到Linux主机上并正常工作可不容易。有一些开源项目提供了Linux下的打印机驱动,配合CUPS打印服务器,就能让Debian、Radhat正常打印。最有名的开源项目是foo2zjx,里面的/osx-hotplug/osx-hplj-hotplug.m文件定义了九种HP打印机硬件特征码和对应的固件。阅读源代码,其中的0x03f0, 0x2b17, "/usr/share/foo2zjs/firmware/sihp1020.dl",对应的就是HP Laserjet 1020打印机,它的固件文件名为sihp1020.dl。这些固件可以自己编译生成,也能在网上(http://oleg.wl500g.info/hplj/)下载到现成的。

我们通常只是用Openwrt或Padavan做一个小型的打印服务器。客户机的Windows系统本来就有驱动,所以这里只探索如何在GDI打印机热插入时,作为打印服务器的路由器能识别到打印机并发送固件,让打印机能正常工作
谁提到过在路由上热插拔后会找不到打印机,然后他写了个脚本每10秒还是多长时间自动检测并连接打印机
现在这个脚本是利用linux的mdev的热插拔机制写的,只在系统开机时或插上打印机时调用一次。发送固件给打印机后,打印机会启动自检,因此可以用两个步骤来测试:
    步骤一:把脚本添加进去后保存重启路由器,如果这时路由器是插了打印机的,启动后能听到打印机的自检声。
    步骤二:从路由器上拔掉打印机USB插头,等几秒再插回去,也会再次听到打印机的自检声。
  1. HOTPLUG HotPlug[] =
  2. {
  3.     0x03f0,        0x0517,                "/usr/share/foo2zjs/firmware/sihp1000.dl",
  4.     0x03f0,        0x1317,                "/usr/share/foo2zjs/firmware/sihp1005.dl",
  5.     0x03f0,        0x4117,                "/usr/share/foo2zjs/firmware/sihp1018.dl",
  6.     0x03f0,        0x2b17,                "/usr/share/foo2zjs/firmware/sihp1020.dl",

  7.     0x03f0,        0x3d17,                "/usr/share/foo2xqx/firmware/sihpP1005.dl",
  8.     0x03f0,        0x3e17,                "/usr/share/foo2xqx/firmware/sihpP1006.dl",
  9.     0x03f0,        0x4817,                "/usr/share/foo2xqx/firmware/sihpP1005.dl",
  10.     0x03f0,        0x4917,                "/usr/share/foo2xqx/firmware/sihpP1006.dl",
  11.     0x03f0,        0x3f17,                "/usr/share/foo2xqx/firmware/sihpP1505.dl",
  12.     0,                0,                NULL,        // Must be last
  13. };
复制代码
其实 P1007和P1005用的是同一个固件,P1008和P1006用的也是同一个固件。开源项目foo2zjx里面的/osx-hotplug/osx-hplj-hotplug.m文件定义了硬件特征码和对应的固件。上面是代码

点评

感谢层主辛苦付出,持续关注中!  详情 回复 发表于 2022-9-13 08:46
回复

使用道具 举报

155#
发表于 2022-9-13 08:46:50 | 只看该作者
zhuwg 发表于 2022-9-12 23:54
找了一些资料,大概意思是hp这一系列打印机要先发固件过去,打印机才能进正常工作状态,
也就是打印机开 ...

感谢层主辛苦付出,持续关注中!
回复

使用道具 举报

156#
发表于 2022-9-13 09:43:20 | 只看该作者
参考https://blog.51cto.com/firehare/588307以及https://www.linuxidc.com/Linux/2010-04/25762.htm
因为该款打印机在断电之后都要重新加载一个firmware才能正常工作,因此你应该在每次打印机断电之后都要用root身份载入sihp1000.img
$sudo -s
#cat sihp1000.img > /dev/usb/lp0
HP 1020的固件(firmware)没有固化在机器里而是在启动时从PC机装过去的。所以, 第一步是安装这个固件
不能马上打印。症状是:发送了打印指令后,打印机没有什么响应,也没有出错提示,通过 dmesg 却可以发现总是出现 usblp0: removed 的提示,而设备并未被删除了。通过 搜索,得知这种打印机需要上传一个 firmware 固件文件才能使用,而这个 firmware 在 linux 下的驱动程序里面并没有内置!所以就会导致打印机没有响应
所以打印机开机之后必须要发一次固件给他,才能正常工作,
考虑要不要rawprint服务启动时候发一个固件过去
回复

使用道具 举报

157#
发表于 2022-9-13 09:56:43 | 只看该作者
本帖最后由 357734620 于 2022-9-13 17:31 编辑
zhuwg 发表于 2022-9-9 10:42
继续修改,参考路由器实现方法,
先发一段数据给打印机,再开始打印
数据已经被我写的程序里面如下

我的Panasonic KX-MB771 GDI 成功了!多谢!
回复

使用道具 举报

158#
发表于 2022-9-13 10:19:33 | 只看该作者
修改了一下,在服务启动时候,执行InitHp发送一段数据过去,
请再试试能不能一次打印成功

RawPrintServer100-p1007-inithp.rar

858.17 KB, 下载次数: 28, 下载积分: 无忧币 -2

点评

不能一次打印成功,我刚刚测试了,虽然rawprintserver一开始给了代码初始化了打印机,但是打印的时候打印直接没有任何反应。  详情 回复 发表于 2022-9-13 12:00
回复

使用道具 举报

159#
 楼主| 发表于 2022-9-13 12:00:06 | 只看该作者
zhuwg 发表于 2022-9-13 10:19
修改了一下,在服务启动时候,执行InitHp发送一段数据过去,
请再试试能不能一次打印成功

不能一次打印成功,我刚刚测试了,虽然rawprintserver一开始给了代码初始化了打印机,但是打印的时候打印直接没有任何反应。

点评

加了一行FlushPrinter,请测试看看, win下打印API相关的参考资料不是太多, Linux下的比较多  详情 回复 发表于 2022-9-13 15:44
回复

使用道具 举报

160#
发表于 2022-9-13 15:44:42 | 只看该作者
chinaren12 发表于 2022-9-13 12:00
不能一次打印成功,我刚刚测试了,虽然rawprintserver一开始给了代码初始化了打印机,但是打印的时候打印 ...

加了一行FlushPrinter,请测试看看,
win下打印API相关的参考资料不是太多,
Linux下的比较多

RawPrintServer100-p1007-FlushPrinter.rar

858.25 KB, 下载次数: 42, 下载积分: 无忧币 -2

点评

老哥,刚刚测试,还是不行,不能一次打印成功,必须在连接打印机的电脑上打印一张,然后网络打印才能OK,如果不这样做的话,打印机就没反应。  详情 回复 发表于 2022-9-17 17:27
好的,测试了给反馈给你  详情 回复 发表于 2022-9-14 09:01
我觉得应该单独写一个小程序,专门用于初始化这些特殊的打印机,让这些程序和代码独立于Raw Print Server。因为这本身不是Raw Print Server的问题。  详情 回复 发表于 2022-9-13 16:33
回复

使用道具 举报

161#
发表于 2022-9-13 16:33:03 | 只看该作者
zhuwg 发表于 2022-9-13 15:44
加了一行FlushPrinter,请测试看看,
win下打印API相关的参考资料不是太多,
Linux下的比较多

我觉得应该单独写一个小程序,专门用于初始化这些特殊的打印机,让这些程序和代码独立于Raw Print Server。因为这本身不是Raw Print Server的问题。

点评

理论确实如此, 但是运行两个程序也不方便, 改改raw print做个hp特制版简单一些  详情 回复 发表于 2022-9-14 10:03
版主这方法好。。。。。  详情 回复 发表于 2022-9-14 09:00
回复

使用道具 举报

162#
 楼主| 发表于 2022-9-14 09:00:39 | 只看该作者
Climbing 发表于 2022-9-13 16:33
我觉得应该单独写一个小程序,专门用于初始化这些特殊的打印机,让这些程序和代码独立于Raw Print Server ...

版主这方法好。。。。。
回复

使用道具 举报

163#
 楼主| 发表于 2022-9-14 09:01:37 | 只看该作者
zhuwg 发表于 2022-9-13 15:44
加了一行FlushPrinter,请测试看看,
win下打印API相关的参考资料不是太多,
Linux下的比较多

好的,测试了给反馈给你
回复

使用道具 举报

164#
发表于 2022-9-14 10:03:00 | 只看该作者
Climbing 发表于 2022-9-13 16:33
我觉得应该单独写一个小程序,专门用于初始化这些特殊的打印机,让这些程序和代码独立于Raw Print Server ...

理论确实如此,
但是运行两个程序也不方便,
改改raw print做个hp特制版简单一些
回复

使用道具 举报

165#
发表于 2022-9-14 14:31:09 | 只看该作者
感谢分享
回复

使用道具 举报

166#
发表于 2022-9-14 21:52:45 | 只看该作者
本帖最后由 zhuzihongyu 于 2022-9-14 22:17 编辑
zhuwg 发表于 2022-9-4 21:52
我试着修改了一下,不知道能不能用,
你试试

请问大佬到底哪个打印服务程序可以用的?以及怎么使用呢

点评

看最新的那个压缩包就行, 非hp打印机也可以直接用楼主发的原版, hp的gdi打印机使用修改版, 用法rawprint install 打印机名字  详情 回复 发表于 2022-9-14 23:42
回复

使用道具 举报

167#
发表于 2022-9-14 23:42:22 | 只看该作者
zhuzihongyu 发表于 2022-9-14 21:52
请问大佬到底哪个打印服务程序可以用的?以及怎么使用呢

看最新的那个压缩包就行,
非hp打印机也可以直接用楼主发的原版,
hp的gdi打印机使用修改版,
用法rawprint install 打印机名字
回复

使用道具 举报

168#
发表于 2022-9-15 00:37:08 来自手机 | 只看该作者
zhuwg 发表于 2022-9-14 23:42
看最新的那个压缩包就行,
非hp打印机也可以直接用楼主发的原版,
hp的gdi打印机使用修改版,

请问,最新那个是只能1007还是1020那些也能用

点评

暂时只做了1007,其他型号没加入 请告知您的打印机型号,我先改一下试试  详情 回复 发表于 2022-9-15 10:44
回复

使用道具 举报

169#
发表于 2022-9-15 10:44:46 | 只看该作者
2275385864 发表于 2022-9-15 00:37
请问,最新那个是只能1007还是1020那些也能用

暂时只做了1007,其他型号没加入
请告知您的打印机型号,我先改一下试试
回复

使用道具 举报

170#
发表于 2022-9-15 10:49:02 | 只看该作者
办公电脑设备不允许共享怎么办?

点评

技术上不允许windows共享,那使用这个工具试试, 制度上不允许任何共享,那没办法  详情 回复 发表于 2022-9-18 23:35
回复

使用道具 举报

171#
发表于 2022-9-15 21:21:26 | 只看该作者
求个p1008的

点评

附件改为发送p1008的启动数据,请试试  详情 回复 发表于 2022-9-16 11:20
回复

使用道具 举报

172#
发表于 2022-9-15 21:39:18 | 只看该作者
zhuwg 发表于 2022-9-15 10:44
暂时只做了1007,其他型号没加入
请告知您的打印机型号,我先改一下试试

单位暂时用的XLPD这个软件共享的,个别不能用的打印机,用raw print server1.0正式版刚好可以,现在就观望,看看啥时弄出都支持的好收藏,指不定啥时用到

点评

thinprint应该是兼容性做的最好的产品了, 毕竟市场上打印机种类非常多, 类似于raw print server这种开源产品, 没人给他专门做产品兼容性测试, 也就是能用几个算几个了  详情 回复 发表于 2022-9-18 23:34
这个xlpd能不能共享一下?我也想试试。  详情 回复 发表于 2022-9-16 08:57
回复

使用道具 举报

173#
发表于 2022-9-15 23:03:09 | 只看该作者
试试看,学习了
回复

使用道具 举报

174#
发表于 2022-9-16 08:57:09 | 只看该作者
2275385864 发表于 2022-9-15 21:39
单位暂时用的XLPD这个软件共享的,个别不能用的打印机,用raw print server1.0正式版刚好可以,现在就观望, ...

这个xlpd能不能共享一下?我也想试试。
回复

使用道具 举报

175#
发表于 2022-9-16 10:58:01 | 只看该作者
Climbing 发表于 2022-9-16 08:57
这个xlpd能不能共享一下?我也想试试。

这玩意就是你们常用的Xshell那个软件同个公司的

里头有个xlpd5是1224版,XLPD5支持XP的
最后几个版本是1220.1224.1230.1233.下去就是xlpd6了
1233下载了装不了,1230找不到,1220有漏洞,就只有1224了,后面那101210-450789-147200是序列号,安装就好了

xlpd7用破解补丁

安装就添加打印机,设那个队列名称就行了,共享的跟帖子一样添加,只是要选LPR
现在没在单位忘了要不要勾选字节字数,你试试吧

XLPD旧的打印机有的用不了,比如LBP2900,帖子的raw反而支持,另外听电脑店说xlpd4英文版的反而比较稳定

链接:https://pan.baidu.com/s/1L9ZtTAR_p1zLupgaaQnndQ?pwd=wuyo 提取码:wuyo 复制这段内容后打开百度网盘手机App,操作更方便哦

点评

请问在共享的机上添加LPD服务,就能支持LPR打印了。用XLPD破解的优点在那里?  发表于 2022-9-17 02:02
多谢分享。 我觉得这个软件的共享应该跟Raw Print Server不冲突,可以两者同时使用。  详情 回复 发表于 2022-9-16 19:33
比如使用了xlpd 共享打印机, 有共享连接数的限制吗?比如超过10人打印,还能打印吗?  详情 回复 发表于 2022-9-16 16:52
回复

使用道具 举报

176#
发表于 2022-9-16 11:20:59 | 只看该作者

附件改为发送p1008的启动数据,请试试

RawPrintServer100-p1008.rar

399.21 KB, 下载次数: 34, 下载积分: 无忧币 -2

回复

使用道具 举报

177#
发表于 2022-9-16 16:52:44 | 只看该作者
2275385864 发表于 2022-9-16 10:58
这玩意就是你们常用的Xshell那个软件同个公司的

里头有个xlpd5是1224版,XLPD5支持XP的

比如使用了xlpd 共享打印机,

有共享连接数的限制吗?比如超过10人打印,还能打印吗?
回复

使用道具 举报

178#
发表于 2022-9-16 19:33:21 | 只看该作者
2275385864 发表于 2022-9-16 10:58
这玩意就是你们常用的Xshell那个软件同个公司的

里头有个xlpd5是1224版,XLPD5支持XP的

多谢分享。

我觉得这个软件的共享应该跟Raw Print Server不冲突,可以两者同时使用。
回复

使用道具 举报

179#
发表于 2022-9-17 01:14:49 | 只看该作者
gamerenzz 发表于 2022-9-16 16:52
比如使用了xlpd 共享打印机,

有共享连接数的限制吗?比如超过10人打印,还能打印吗?

这……没试过呀,一间办公室就两三台电脑
回复

使用道具 举报

180#
发表于 2022-9-17 01:17:12 | 只看该作者
本帖最后由 2275385864 于 2022-9-17 01:18 编辑
Climbing 发表于 2022-9-16 19:33
多谢分享。

我觉得这个软件的共享应该跟Raw Print Server不冲突,可以两者同时使用。

xlpd是用的lpr,端口默认515,还能自己改别的,raw是9100端口,端口不冲突,能同时用。xlpd用久了电脑会卡,得清下日志重启下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-11 02:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表