openwrt 认不到打印机下的hplip怎样才能认出打印机

2363人阅读
OPENWRT网络打印机TCP/IP共享设置教程 以703N为例
OPENWRT网络打印机TCP/IP共享设置教程以703N为例
最近一台带USB2.0接口的惠普P1106激光打印机使我比较头疼,由于打印机放在家中楼上,没空调,夏天太热,每次抱着电脑上楼打印都大汗淋漓的下来,于是乎,下定决心一定要能让打印机接入家中无线网络,在空调间就可以凉快的打印,迫于生计,于是寻求度娘,发现openwrt路由器可以实现这一功能,手头上正好有一个改装过的OPENWRT路由器,我就开始了捣鼓。
注:网络打印机TCP/IP共享部分打印机不支持,目前我们已经知道的是佳能LBP00系列,东芝E-studio212/163/166/169,夏普AR-18/2820。本教程分主要分为路由器端和电脑端设置两部分,简单通俗,祝大家成功。
附上打印机的照片
Win8.1 专业版 64位
OpenWrt Barrier Breaker 14.07原版
路由器端设置步骤
1.&&&&&&把打印机接入路由器的USB端口上
2.&&&&&&刷入OPENWRT OpenWrt Barrier Breaker 14.07固件
openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
3.&&&&&&安装打印机服务器IPK
kmod-usb-printer_3.10.49-1_ar71xx.ipk
p910nd_0.95-3_ar71xx.ipk
luci-app-usb-printer_svn-r9961-1_all.ipk
安装完毕后重启
4.在Service中找到USB Printer Server(按照下图设置),你看这里就会显示出来打印机
5.如果是无线连接(路由器作为一个客户端),则需要把p910nd的启动项调至99,然后把etc/config/p910nd的文件改成如下:
config p910nd
&&&&&&&& option device'/dev/usb/lp0'
&&&&&&&& option port '9100'
&&&&&&&& option enabled '1'
&&&&&&&& option bind'192.168.1.107'
6.打开putty,登录路由器,输入命令netstat –an,查看当前路由器连接,查询9100的端口对应的IP地址是否正确。
7.这里我们选择的是客户端模式,所以路由器只是一个网卡,防火墙设置为LAN(注意为了防止IP变动,我们要将上层路由器对IP进行静态地址分配,如果仅仅是用来作为无线打印端的,可以把无线WIFI的防火墙设置为LAN区域,然后把实体端口的LAN 删除)
8.用电脑的端口扫描器扫描路由器的9100端口是否正常开启
至此路由器端的操作全部完成
电脑端设置步骤
1.打开控制面板
2.找到设备与打印机,点击添加打印机
3.添加打印机选择“我需要的打印机不在列表中”
4.选择“使用TCP/IP地址或主机名添加打印机”
5.输入路由器的IP地址
6.等待检测完成
7.出现额外信息,不要管他,直接下一步,程序开始检测打印机型号,需要几分钟时间
8.点击从磁盘安装,然后选择你的驱动程序光盘的文件,接着一路下一步到底就大功告成了。
9.打印一张试试(有时显示打印不成功,其实事实上已经在打印了,不必理会)
& & & & & &
谢谢观看!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4233次
排名:千里之外
评论:10条Linux下hp打印机驱动hplip分析
& & & & 版本是源码位置。图的来源:。实践中使用的打印机型号:Deskjet 1010.分析的目的就是搞清楚一个灰色地带---打印机通信.
1.D-Bus初始化流程
D-Bus的初始化同样是在ui4/devmgr5.py开始的。
ui4/devmgr5.py
01&class&DevMgr5(QMainWindow,&&Ui_MainWindow):
02&&&&&......
03&&&&&#&TODO:&Make&sbus&init&mandatory&success,&else&exit
04&&&&&def&initDBus(self):
05&&&&&&&&&self.dbus_loop&=&DBusQtMainLoop(set_as_default=True)
06&&&&&&&&&self.dbus_avail,&self.service,&self.session_bus&=&device.init_dbus(self.dbus_loop)
07&&&&&......
08&&&&&&&&#&Receive&events&from&the&session&bus
09&&&&&&&&&&self.session_bus.add_signal_receiver(self.handleSessionSignal,&sender_keyword='sender',
10&&&&&&&&&&&&&&destination_keyword='dest',&interface_keyword='interface',
11&&&&&&&&&&&&&&member_keyword='member',&path_keyword='path')
12&&&&&......
这里调用了base/device.py中的init_dbus()。从第9行可以看出handleSessionSignal是D-Bus服务器端回调函数。
base/device.py
02&#&DBus&Support
05&def&init_dbus(dbus_loop=None):
06&&&&&......
07&&&&&&&&&try:
08&&&&&&&&&&&&&if&dbus_loop&is&None:
09&&&&&&&&&&&&&&&&&session_bus&=&dbus.SessionBus()
10&&&&&&&&&&&&&else:
11&&&&&&&&&&&&&&&&&session_bus&=&dbus.SessionBus(dbus_loop)
12&&&&&......
13&&&&&&&&&try:
14&&&&&&&&&&&&&log.debug(&Connecting&to&com.hplip.StatusService&(try&#1)...&)
15&&&&&&&&&&&&&service&=&session_bus.get_object('com.hplip.StatusService',&&/com/hplip/StatusService&)
16&&&&&&&&&&&&&dbus_avail&=&True
17&&&&&&&&&except&dbus.exceptions.DBusException,&e:
18&&&&&&&&&&&&&try:
19&&&&&&&&&&&&&&&&&os.waitpid(-1,&os.WNOHANG)
20&&&&&&&&&&&&&except&OSError:
21&&&&&&&&&&&&&&&&&pass
23&&&&&&&&&&&&&path&=&utils.which('hp-systray')
24&&&&&......
25&&&&&&&&&&&&&log.debug(&Running&hp-systray:&%s&--force-startup&&%&path)
27&&&&&&&&&&&&&os.spawnlp(os.P_NOWAIT,&path,&'hp-systray',&'--force-startup')
29&&&&&&&&&&&&&log.debug(&Waiting&for&hp-systray&to&start...&)
30&&&&&&&&&&&&&time.sleep(1)
32&&&&&&&&&&&&&t&=&2
33&&&&&&&&&&&&&while&True:
34&&&&&&&&&&&&&&&&&try:
35&&&&&&&&&&&&&&&&&&&&&log.debug(&Connecting&to&com.hplip.StatusService&(try&#%d)...&&%&t)
36&&&&&&&&&&&&&&&&&&&&&service&=&session_bus.get_object('com.hplip.StatusService',&&/com/hplip/StatusService&)
37&&&&&......
39&&&&&return&dbus_avail,&service,&&session_bus
41&&&&&......
第27行启动了hp-systray作为d-bus的服务器端。D-bus服务器端启动完毕。
2.D-bus服务器端启动
启动命令如下:
$&hp-systray&--force-startup&-g
说明:-g是调试模式启动
if __name__ == '__main__':
if child_pid1:
# parent (UI)
os.close(w1)
else: # qt4
import ui4.systemtray as systray
except ImportError:
log.error(&Unable to load Qt4 support. Is it installed?&)
mod.unlockInstance()
sys.exit(1)
systray.run(r1)
mod.unlockInstance()
# child (dbus & device i/o [qt4] or dbus [qt3])
os.close(r1)
if ui_toolkit == 'qt4':
r2, w2 = os.pipe()
r3, w3 = os.pipe()
child_pid2 = os.fork()
if child_pid2:
# parent (dbus)
os.close(r2)
import hpssd
hpssd.run(w1, w2, r3)
# child (device i/o)
os.close(w2)
import hpdio
hpdio.run(r2, w3)
启动了和。前者会从管道从读取写入的打印机状态信息。下面单说如何获取打印机状态当起来的时候会做以下调用un(hpdio.py)-&queryDevice(device.py)-&status.StatusType10(status.py)-&StatusType10Status(status.py)来获取打印机状态。
& & 在queryDevice这个函数中出现了6种与打印机通信方式,分别是:
Type 1/2 (s: or VSTATUS:) status
Type 3/9 LaserJet PML
Type 6: LJ XML
Type 8: LJ PJL
Type 10: LEDM
Type 11: LEDM_FF_CC_0
而我目前分析的这款打印机使用是第5种Type 10: LEDM通信协议&HPMUD_S_EWS_LEDM_CHANNEL。每种通信通信都有关于打印机状态值的定义,另外从这款打印机的DeviceId可以看出应该同时也是支持PJL的,这里先只说第5种LEDM通信方式.LEDM的大体通信方式是基于HTTP,通信USB传输一个HTTP的GET指令,然后再通过USB读取打印机返回的HTTP超文本,一个是XML.
StatusType10Status调用流程:
StatusType10FetchUrl &从打印机获取状态数据
# Parse the product status XML 解析xml,提取状态值
StatusType10FetchUrl调用流程:
getUrl_LEDM
LocalOpenerEWS_LEDM().openhp()
openhp调用流程:(进入LEDM处理流程)
writeEWS_LEDM
readEWS_LEDM
readLEDMData
3.刷新状态的流程
toolbox.py
01&else:&#&qt4
02&&&&&......
03&&&&&from&ui4.devmgr5&import&DevMgr5
04&&&&&......
第三行可以看出启动了ui4目录下的devmgr5这个python。
ui4/devmgr5.py
01&class&DevMgr5(QMainWindow,&&Ui_MainWindow):
02&&&&&......
03&&&&&def&initUI(self):
04&&&&&......
05&&&&&&&&&self.DeviceRefreshAction.setIcon(QIcon(load_pixmap(&refresh1&,&&16x16&)))
06&&&&&&&&&self.connect(self.DeviceRefreshAction,&SIGNAL(&triggered()&),&self.DeviceRefreshAction_activated)
07&&&&&......
08&&&&def&DeviceRefreshAction_activated(self):
09&&&&&&&&self.DeviceRefreshAction.setEnabled(False)
10&&&&&&&&self.requestDeviceUpdate()
11&&&&&&&&self.DeviceRefreshAction.setEnabled(True)
12&&&&&&&&......
13&&&&def&requestDeviceUpdate(self,&dev=None,&item=None):
14&&&&&&&&&&&&Submit&device&update&request&to&update&thread.&&&&
16&&&&&&&if&dev&is&None:
17&&&&&&&&&&&&dev&=&self.cur_device
19&&&&&&&&if&dev&is&not&None:
20&&&&&&&&&&&&dev.error_state&=&ERROR_STATE_REFRESHING
21&&&&&&&&&&&&self.updateDevice(dev,&update_tab=False)
23&&&&&&&&&&&&self.sendMessage(dev.device_uri,&'',&EVENT_DEVICE_UPDATE_REQUESTED)
24&&&&&&......
25&&&&&def&sendMessage(self,&device_uri,&printer_name,&event_code,&username=prop.username,
26&&&&&&&&&&&&&&&&&&&&&job_id=0,&title=''):
28&&&&&&&&&device.Event(device_uri,&printer_name,&event_code,&username,
29&&&&&&&&&&&&&&&&&&&&&job_id,&title).send_via_dbus(self.session_bus)
30&&&&&.....
从第06行可以看出DeviceRefreshAction的槽是DeviceRefreshAction_activated在行8行,接着调用了requestDeviceUpdate,然后调用了sendMessage,然后调用了device.Event。这个在device.py中。在
base/device.py
01&class&Event(object):
02&&&&&......
03&&&&&def&send_via_dbus(self,&session_bus,&interface='com.hplip.StatusService'):
04&&&&&&&&&if&session_bus&is&not&None&and&dbus_avail:
05&&&&&&&&&&&&&log.debug(&Sending&event&%d&to&%s&(via&dbus)...&&%&(self.event_code,&interface))
06&&&&&&&&&&&&&msg&=&lowlevel.SignalMessage('/',&interface,&'Event')
07&&&&&&&&&&&&&msg.append(signature=self.dbus_fmt,&*self.as_tuple())
08&&&&&&&&&&&&&session_bus.send_message(msg)
09&&&&&......
这里调用的send_message是获取的d-bus实例的send_message,它在hpdio.py中。
01&def&send_message(device_uri,&event_code,&bytes_written=0):
02&&&&&args&=&[device_uri,&'',&event_code,&prop.username,&0,&'',&'',&bytes_written]
03&&&&&msg&=&lowlevel.SignalMessage('/',&'com.hplip.StatusService',&'Event')
04&&&&&msg.append(signature='ssisissi',&*args)
05&&&&&SessionBus().send_message(msg)
这里是标准的d-bus通信。D-bus<span style="font-fOpenWrt打印共享设置方法图文教程
作者:佚名
字体:[ ] 来源:互联网 时间:05-11 16:15:00
OpenWrt打印共享设置,打印共享端口为9100,如果要开放公网共享打印,需要在防火墙上允许9100端口访问
安装打印机的驱动包,你当成插在你的PC上的本地的打印机来安装吧
进入控制面板--》打印机设置--》属性
选择&端口&属性页-选择添加端口 -选择 &Standard TCP/IP Port& ,点击&添加端口&(具体可能不是添加端口这4个字,但应该差不多)-继续按照向导进行操作。在打印机名字或者IP地址栏,填入你的路由器的IP地址
Window会发一些UDP包到路由器的161端口,你不用理它。上述操作完成后,请登录openwrt的管理页面,按下图进行设置
受限于OpenWRT USB驱动的兼容性,不是每个打印机都支持
以上就是OpenWrt打印共享设置方法图文教程的全部内容了,希望对各位有所帮助。如果各位还有其他方面的问题,或者想要了解最新的资讯,请持续关注脚本之家!
大家感兴趣的内容
12345678910
最近更新的内容

我要回帖

更多关于 openwrt h3c认证 的文章

 

随机推荐