U.S. patent application number 13/276021 was filed with the patent office on 2012-04-19 for centralized print driver distribution in a distributed printing environment.
This patent application is currently assigned to Aventura HQ, Inc.. Invention is credited to Joe Jaudon, David Lowrey, Adam Williams.
Application Number | 20120092693 13/276021 |
Document ID | / |
Family ID | 45933926 |
Filed Date | 2012-04-19 |
United States Patent
Application |
20120092693 |
Kind Code |
A1 |
Jaudon; Joe ; et
al. |
April 19, 2012 |
CENTRALIZED PRINT DRIVER DISTRIBUTION IN A DISTRIBUTED PRINTING
ENVIRONMENT
Abstract
Methods, systems, and devices are described for centralized
print driver distribution in a distributed printing environment. A
set of drivers may be stored at one or more centralized data
stores, and distributed to print servers. This distribution may
occur on a per-print job basis. Drivers may be automatically
removed from the print servers based on certain criteria.
Inventors: |
Jaudon; Joe; (Sedalia,
CO) ; Lowrey; David; (Denver, CO) ; Williams;
Adam; (Aurora, CO) |
Assignee: |
Aventura HQ, Inc.
Denver
CO
|
Family ID: |
45933926 |
Appl. No.: |
13/276021 |
Filed: |
October 18, 2011 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
61394264 |
Oct 18, 2010 |
|
|
|
Current U.S.
Class: |
358/1.13 |
Current CPC
Class: |
G06F 3/1204 20130101;
G06F 3/1225 20130101; G06F 3/1288 20130101; G06F 3/12 20130101;
G06F 3/126 20130101; G06F 3/122 20130101 |
Class at
Publication: |
358/1.13 |
International
Class: |
G06F 3/12 20060101
G06F003/12 |
Claims
1. A distributed printing system, comprising: a data store
comprising a plurality of stored drivers; a central server computer
system communicatively coupled to the data store, wherein the
central server computer system is configured to: receive a
notification of a print job; and select a driver from the plurality
of stored drivers of the data store based on the received
notification of the print job; and a print server communicatively
coupled to the centralized data store, wherein the print server is
configured to receive the selected driver and transmit the print
job to a printer using the selected driver.
2. The distributed printing system of claim 1, wherein the central
server computer system is further configured to: determine that the
printer has completed the print job; and remove the selected driver
from the print server.
3. The distributed printing system of claim 1, wherein the central
server computer system is further configured to: monitor a usage of
the selected driver by the print server; and remove the selected
driver from the print server in response to the monitored usage of
the selected driver crossing a threshold.
4. The distributed printing system of claim 1, wherein the central
server computer system is further configured to allow the selected
driver to remain installed on the print server based on an
anticipated frequency of use associated with the selected
driver.
5. The distributed printing system of claim 1, wherein the
threshold comprises a minimum number of uses by the print server of
the selected driver since a time of the print server receiving the
selected driver, wherein the central server computer system is
further configured to: determine that an actual number of uses by
the print server of the selected driver since the time of the print
server receiving the selected driver is smaller than the minimum
number of uses; and remove the selected driver from the print
server in response to an actual number of uses by the print server
of the selected driver since transmitting the selected driver to
the print server being smaller than the minimum number of uses.
6. A method of printing in a distributed printing environment,
comprising: storing a plurality of drivers at a centralized data
store; receiving notification of a print job; selecting a driver
corresponding to a printer from the plurality of drivers based on
the received notification of the print job; and transmitting the
selected driver to a print server in communication with the
printer.
7. The method of claim 6, further comprising: determining that the
printer has completed the print job; and removing the selected
driver from the print server.
8. The method of claim 6, further comprising: removing the selected
driver from the print server in response to a determination that
the print server has been in possession of the selected driver for
greater than a threshold amount of time.
9. The method of claim 6, further comprising: allowing the selected
driver to remain installed on the print server based on a frequency
of use associated with the selected driver.
10. The method of claim 6, further comprising: selecting the
selected driver based on at least one characteristic of the print
job.
11. The method of claim 6, further comprising: monitoring a usage
of the selected driver by the print server; and removing the
selected driver from the print server in response to the monitored
usage of the selected driver crossing a threshold.
12. The method of claim 6, wherein the threshold is based on at
least one of: a type of the printer, a type of the print server, or
a type of a device generating the print job.
13. The method of claim 6, wherein the threshold comprises a
minimum number of uses by the print server of the selected driver
since a time of the print server receiving the selected driver, the
method further comprising: determining that an actual number of
uses by the print server of the selected driver since the time of
the print server receiving the selected driver is smaller than the
minimum number of uses; and removing the selected driver from the
print server in response to an actual number of uses by the print
server of the selected driver since transmitting the selected
driver to the print server being smaller than the minimum number of
uses.
14. The method of claim 6, further comprising: transmitting the
print job to the print server together with the selected
driver.
15. The method of claim 6, further comprising: receiving the
notification of the print job at a central server computer system;
selecting the driver at the central server computer system;
installing the driver to a virtual machine; launching the virtual
machine with the central server computer system; transmitting the
print job to the virtual machine; and terminating the virtual
machine with the central server computer system in response to a
determination that the print job has completed.
16. A method of printing in a distributed printing environment,
comprising: receiving, at a print server, a driver selected for a
print job from a centralized data store external to the print
server; installing the selected driver on the print server; and
transmitting the print job from the print server to a printer using
the selected driver.
17. The method of claim 16, further comprising: receiving the print
job at the print server from a central server computer system in
connection with receiving the selected driver at the print server
from the central server computer system.
18. The method of claim 16, further comprising: removing the
selected driver from the print server after transmitting the print
job to the print server.
19. The method of claim 16, further comprising: receiving at the
print server a condition for removing the selected driver from the
print server.
20. The method of claim 19, further comprising: removing the
selected driver from the print server in response to a
determination that the condition has been met.
Description
CROSS REFERENCES
[0001] The present application claims priority from U.S.
Provisional Patent Application Ser. No. 61/394,264, which is
incorporated herein by reference in its entirety for all it
discloses.
BACKGROUND
[0002] Embodiments of the invention relate to computer network
communication, and more particularly, printing in a dynamic roaming
environment. Organizations often use a variety of computing
devices. Various computer systems may use a thin-client or a
virtual desktop display in conjunction with a centralized server or
mainframe, and also use traditional workstations and handheld
devices.
[0003] A thin-client may be a computing device that includes
hardware, software, or both in a client-server architecture
network. However, such a network may use a central server for
processing and may transmit and receive input and output over a
network or other communication medium established between the
device and the remote server. In some examples, a thin-client
device may run web browsers or remote desktop software, such that
significant processing may occur on the server.
[0004] Printing in such environments may present a number of
significant challenges. Traditionally, print drivers are stored and
maintained on each device, and this can cause administrative
overhead and maintenance issues. The problem may be exacerbated
with mobile thin-clients and other mobile devices, as the number of
drivers that may need to be stored can increase substantially as
more printers become available.
[0005] There are also challenges related to selecting the right
printer and print server in a dynamic environment. For example,
with a mobile device or a roaming user, it may be a challenge to
identify the appropriate printers because of the legacy
architecture for printing networks. Also, because of the
traditional ways printer networks communicate, feedback for print
jobs and identifying available printers can present challenges, as
well. Thus, there may be a need in the art for novel system
architectures to address one or more of these issues.
SUMMARY
[0006] Methods, systems, and devices are described for centralized
driver distribution in a distributed printing environment.
[0007] In one set of embodiments, a distributed printing system
includes a data store, a central server computer system, and a
print server. The data store stores multiple drivers. The central
server computer system receives notification of a print job and
selects a driver from the data store based on the received
notification of the print job. The print server receives the
selected driver from the central server computer system and
transmits the print job to a printer using the selected driver.
[0008] In another set of embodiments, a method of printing in a
distributed printing environment includes storing drivers at a
centralized data store. Notification is received of a print job,
and a driver is selected from the centralized data store based on
the received notification. The driver corresponds to a printer. The
selected driver is transmitted to a print server in communication
with the printer.
[0009] In another set of embodiments, a method of printing in a
distributed printing environment includes receiving, at a print
server, a driver selected for a print job from a centralized data
store external to the print server. The selected driver is
installed on the print server, and the print job is transmitted
from the print server to a printer using the selected driver.
BRIEF DESCRIPTION OF THE DRAWINGS
[0010] A further understanding of the nature and advantages of the
present invention may be realized by reference to the following
drawings. In the appended figures, similar components or features
may have the same reference label. Further, various components of
the same type may be distinguished by following the reference label
by a dash and a second label that distinguishes among the similar
components. If only the first reference label is used in the
specification, the description is applicable to any one of the
similar components having the same first reference label
irrespective of the second reference label.
[0011] FIG. 1 is a block diagram illustrating a system for
distributed printing in a dynamic roaming and traditional static
environments, according to various embodiments of the
invention.
[0012] FIG. 2 is a block diagram illustrating a central server
computer system in a system for distributed printing in a dynamic
roaming and traditional static environments, according to various
embodiments of the invention.
[0013] FIG. 3 is a block diagram illustrating a data store in a
system for distributed printing in a dynamic roaming and
traditional static environments, according to various embodiments
of the invention.
[0014] FIG. 4 is a block diagram illustrating a backend in a system
for distributed printing in a dynamic roaming and traditional
static environments, according to various embodiments of the
invention.
[0015] FIG. 5 is a block diagram illustrating a logical path taken
by print data in a system for distributed printing in a dynamic
roaming and traditional static environments, according to various
embodiments of the invention.
[0016] FIG. 6 is a block diagram illustrating a system for
centralized print driver distribution in a distributed printing
environment, according to various embodiments of the invention.
[0017] FIG. 7 is a block diagram illustrating a system for
centralized print driver distribution in a distributed printing
environment, according to various embodiments of the invention.
[0018] FIG. 8 is a block diagram illustrating a central server
computer system in a distributed printing environment, according to
various embodiments of the invention.
[0019] FIG. 9 is a block diagram illustrating a print server in a
distributed printing environment, according to various embodiments
of the invention.
[0020] FIG. 10 is a flowchart diagram illustrating a method of
printing in a distributed printing environment, according to
various embodiments of the invention.
[0021] FIG. 11 is a flowchart diagram illustrating a method of
printing in a distributed printing environment, according to
various embodiments of the invention.
[0022] FIG. 12 is a flowchart diagram illustrating a method of
printing in a distributed printing environment, according to
various embodiments of the invention.
[0023] FIG. 13 is a flowchart diagram illustrating a method of
printing in a distributed printing environment, according to
various embodiments of the invention.
[0024] FIG. 14 is a flowchart diagram illustrating a method of
printing in a distributed printing environment, according to
various embodiments of the invention.
[0025] FIG. 15 is a flowchart diagram illustrating a method of
printing in a distributed printing environment, according to
various embodiments of the invention.
[0026] FIG. 16 is a flowchart diagram illustrating a method of
printing in a distributed printing environment, according to
various embodiments of the invention.
[0027] FIG. 17 is a flowchart diagram illustrating a method of
printing in a distributed printing environment, according to
various embodiments of the invention.
[0028] FIG. 18 is a schematic diagram that illustrates a
representative device structure that may be used in various
embodiments of the present invention.
DETAILED DESCRIPTION OF THE INVENTION
[0029] The present description sets forth examples of systems,
methods, and devices for centralized driver distribution in a
distributed printing environment. In these systems, methods, and
devices, drivers for printers and other devices in a distributed
printing environment may be stored and distributed from a central
device or system. When a notification of a print job is received at
the central device or system, one of the stored drivers may be
selected and provided to a print server for the print job based on
the received notification.
[0030] This description provides examples, and is not intended to
limit the scope, applicability or configuration of the invention.
Rather, the ensuing description will provide those skilled in the
art with an enabling description for implementing embodiments of
the invention. Various changes may be made in the function and
arrangement of elements.
[0031] Thus, various embodiments may omit, substitute, or add
various procedures or components as appropriate. For instance, it
should be appreciated that the methods may be performed in an order
different than that described, and that various steps may be added,
omitted or combined. Also, aspects and elements described with
respect to certain embodiments may be combined in various other
embodiments. It should also be appreciated that the following
systems, methods, devices, and software may individually or
collectively be components of a larger system, wherein other
procedures may take precedence over or otherwise modify their
application.
[0032] Systems, devices, methods, and software are described for
printing within a distributed printing environment. In one set of
embodiments, shown in FIG. 1, system 100 includes a central server
computer system 105, a data store 110, print servers 145, and
printers 150. Each of these components may be in communication with
each other, directly or indirectly.
[0033] The central server computer system 105 may include a rules
engine 130, a session manager 135, and a print router 140. The
central server computer system 105 may be made up of one or more
server computers, workstations, web servers, or other suitable
computing devices. The central server computer system 105 may be
fully located within a single facility or distributed
geographically, in which case a network may be used to integrate
different components.
[0034] The central server computer system 105 may receive a print
job. The print job may be received from a windows session 125.
Alternatively, the print job may be received from an application
session 115 via a backend 120. The print job may also or
alternatively be received from an application session 115 via a
cloud computing environment (not specifically shown). The print job
may be received from thin-clients (e.g., SUN RAY clients available
from Oracle Corporation, WYSE clients available from Wyse
Technology, etc.), thick clients (e.g., desktops, laptops), mobile
devices, tablets, etc., although these devices are not specifically
shown in the diagram Moreover, the print job may be received from
any type of desktop or virtual desktop environment. Examples of
suitable desktop environments from which the print job may be
received include, but are not limited to, LINUX environments based
on the open-source Linux kernel; WINDOWS environments based on
software available from Microsoft, Inc.; OS/X environments based on
software available from Apple, Inc.; VMWARE virtual environments
based on software available from VMware, Inc.; CITRIX virtual
environments based on software available from Citrix Systems, Inc.;
Windows Terminal Services/Remote Desktop virtual environments based
on software available from Microsoft, Inc.; ANDROID environments
based on software available from Google, Inc.; IOS environments
based on software available from Apple, Inc.; WEBOS environments
based on software available from Hewlett Packard Company;
combinations thereof; and the like. In some embodiments, the
central server computer system 105 may receive notice or
identification for a print job, and perform the functionality
described herein based on such notice or identification only.
[0035] A set of drivers may be stored at data store 110. Data store
110 may be a single database, or may be made up of any number of
separate and distinct databases. The data store 110 may include
one, or more, relational databases or components of relational
databases (e.g., tables), object databases, or components of object
databases, spreadsheets, text files, internal software lists, or
any other type of data structure suitable for storing data. Thus,
it should be appreciated that a data store 110 may each be multiple
data storages (of the same or different type), or may share a
common data storage with other data stores. Although in some
embodiments the data store 110 may be distinct from a central
server computer system 105, in other embodiments it may be
integrated therein to varying degrees.
[0036] As noted above, notification of a requested print job may be
received at the central server computer system 105. A session
manager 135 may receive the notification, and may assign a terminal
identifier (TID) to a device requesting the job. The central server
computer system 105 may identify information about the print job
(e.g., identification and location of the applicable print server
145 and printer 150, and identification of the proper driver).
Drivers for the print job may be transmitted to the appropriate
print server 145 and to the client device requesting the job. The
drivers may be installed, and the device and print server 145 may
execute the print job with the installed drivers. Thus, the central
server computer system 105 may access the data store 110 to
distribute drivers to the print server 145 or the device, and thus
in some embodiments the drivers do not need to be maintained on
each device or print server 145. The drivers may be taken down or
uninstalled after each job, set of jobs, or period with no use.
[0037] It should be understood that the print servers 145 may be
any real or virtual machine or environment that hosts a print
driver for controlling a printer 150. Thus, in certain examples a
print server 145 may be implemented by circuitry, logic, and/or
software within the printer 150. Additionally or alternatively, a
print server 145 may include a real or virtual network server
and/or a personal computing device in communication with a printer
150.
[0038] In some embodiments, the central server computer system 105
may use the information about a print job to identify an
appropriate operating system (OS) and print driver for the print
server for a given print job. The central server computer system
105 may access the data store 110 to retrieve the OS and print
driver, and load an OS in real-time in response to receiving a
print job. The central server computer system 105 may install the
appropriate driver, thus creating a virtual print server (which
may, but need not be, print server 145). The virtual print server
executes the print job. After the print job is complete, the driver
and OS may be taken down. In alternative embodiments, print servers
may not be dynamically generated in response to individual print
jobs or even at all. For example, the central server computer
system 105 may distribute incoming print jobs among a fixed set of
physical or virtual print servers 145.
[0039] In some embodiments, a printer 150 is selected (e.g.,
automatically or by a user). The print router 140 at the central
server computer system 105 may receive the selection. At the print
router140, the selected printer may be mapped to a 1) driver of a
table of drivers, and 2) a print server 145 of a table of print
servers. In certain examples, this mapping may be performed based
on static relationships between printers, drivers, and print
servers. For example, these static relationships may be stored as
tables within the data store 110.
[0040] Additionally or alternatively, a rules engine 130 at the
central server computer system 105 may be used in the selection of
the printer. The rules engine 130 may be configured to dynamically
map a print job to a print server 145 and printer 150 for the print
job. By way of example, upon notification or receipt of the print
job, the rules engine 130 may access a set of rules to determine
the correct print server 145 and printer 150 for the print job. The
rules may dynamically make this determination based on the location
of the device. The type of device, attributes of the print job, and
other factors may be used by the rules engine 130 to determine the
correct type and location for the print server 145 and printer 150.
This rules engine 130 functionality may not be necessary in all
embodiments of the invention to identify an appropriate printer
150, print server 145, or driver for a print job. Accordingly, the
rules engine 130 may be eliminated from certain embodiments.
[0041] In some embodiments, feedback from a printer 150 is received
at the print server 145, and then forwarded on to a print router
140. The print router 140 may route the feedback (e.g., job failed,
out of ink, out of paper, etc.) to the client device. This report
may be in the form of a dialogue box. The feedback may be routed to
avoid the backend 120, even when the print job is initially routed
through the backend 120. In response to feedback from a print
router 140, a client device may direct or route a print job. This
routing may be to a new printer, or may call up alternative
functionality (e.g., a new tray) for a printer that is already in
use. Thus, instead of unidirectional printing, print jobs (e.g.,
sent through a backend 120) may be controlled by two-way
communication between the print router 140 and the device.
[0042] The components of the system 100 may be directly connected,
or may be connected via a network (not shown), which may be any
combination of the following: the Internet, an IP network, an
intranet, a wide-area network ("WAN"), a local-area network
("LAN"), a virtual private network, the Public Switched Telephone
Network ("PSTN"), or any other type of network supporting data
communication between devices described herein, in different
embodiments. A network may include both wired and wireless
connections, including optical links. Many other examples are
possible and apparent to those skilled in the art in light of this
disclosure. In the discussion herein, a network may or may not be
noted specifically. If no specific means of connection is noted, it
may be assumed that the link, communication, or other connection
between devices may be via a network.
[0043] Session manager 135 may include an API architecture which
serves as the communication control point, managing virtual desktop
sessions and brokering sessions for clients to backend 120 virtual
desktop and application sessions. The session manager 135 may
broker and pass through mechanisms for client devices to active
virtual sessions. The central server computer system 105 may
include a centralized management console (not shown), which may be
a web-based management console for configuration, real time
monitoring, and reporting. There may be management capabilities for
the entire virtual desktop/application environment.
[0044] FIG. 2 shows a block diagram of a central server computer
system 105-a. The central server computer system 105-a may be one
example of the central server computer system 105 in FIG. 1. The
central server computer system 105-a shown in FIG. 2 includes a
rules engine 130, a session manager 135, a print router 140-a, and
a print server manager 205. The rules engine 130 and the session
manager 135 shown in FIG. 2 may be substantially the same as the
rules engine 130 and the session manager 135 shown in FIG. 1. The
print router 140-a may be one example of the print router 140 shown
in FIG. 1.
[0045] The print router 140-a may match print jobs received from
external sessions 115, 125 to one or more destination printers 150
and/or print servers 145. To accomplish these tasks, the print
router 140-a may include at least a print data receiving module
210, a print source identification module 215, a print parameters
identification module 220, a printer destination identification
module 225, and a printer feedback routing module 230.
[0046] The print data receiving module 210 may be configured to
receive print data corresponding to a print job from an external
session 115, 125 via a communication channel established by the
session manager 135. In certain embodiments, the print data
received from the external session 115, 125 may be in the form of
one or more page description languages (PDLs). Examples of page
description languages that may be received at the receiving module
210 include, but are not limited to, PostScript, Portable Document
Format (PDF), Printer Command Language (PCL), Scalable Vector
Graphics (SVG), Open XML Paper Specification (XPS), and any other
page description language that may suit a particular implementation
of the principles described herein.
[0047] In other embodiments, the print data received from the
external session 115, 125 may be in the form of text or images for
use with a standard template stored by a print server 145 or a
printer 150. For example, the print data may be used to print a
personalized bracelet worn by a patient in a medical facility. In
this example, the print data may include text corresponding to the
name of the patient, and the name of the patient's doctor. This
text, when received by a print server 145 or a printer 150, may be
applied to a standard bracelet template to print a bracelet having
the name of the patient and the name of the patient's doctor.
[0048] In additional or alternative embodiments, the print data
received by the print data receiving module 210 may be in the form
of an image that has already been rasterized by the external
session 115, 125 in preparation for delivery to a printer 150.
[0049] The print data receiving module 210 may be configured to
cache the received print data at a designated storage area. In
certain examples, the designated storage area may be in a data
store 110. The cached print data may be accessible to the rules
engine 130 or any other module or process.
[0050] The print source identification module 215 may be configured
to analyze the received print data to determine certain attributes
or characteristics of the received print data. These attributes or
characteristics may also be stored for use by the other modules or
processes. For example, the print source identification module 215
may associate the received print data with a format in the data
store 110. This format information may be available to the rules
engine 130 for use in enforcing one or more rule sets.
[0051] In certain examples, the print source identification module
215 may analyze the print data received by the print data receiving
module 210 to determine a source of the print data. By way of
example, the source may be determined using information from the
session manager 135, information acquired by the print data
receiving module 210, and/or information attached to the print data
itself by the source. Once the print source has been identified,
the identity of the print source may be associated with the
received print data. For example, the identity of the print source
may be stored in the data store 110.
[0052] The print parameters identification module 220 may identify
certain print parameters for the received print data. These print
parameters may be included with the received print data and/or
determined by logical deduction (e.g., using the rules engine 130).
For instance, a user of an external session 115, 125 may specify a
particular print parameter which may be transmitted to the central
server computer system 105-a with the print data or logically
deduced from the received print data. Additionally or
alternatively, certain default print parameters may be determined
for the print data based on the identity of the source of the print
data and/or another attribute associated with the print data.
[0053] Examples of print parameters that may be identified by the
print parameters identification module 220 include, but are not
limited to, a selected type of printing media, a selected size of
printing media, a selected source of printing media, an ink or
toner color setting, a collation setting, a staple setting, a
duplex setting, a scaling setting, combinations thereof, and the
like.
[0054] The printer destination identification module 225 may be
configured to identify an appropriate destination printer 150
and/or print server 145 for print data received at the print data
receiving module 210. The printer destination identification module
225 may identify the appropriate destination printer 150 based on
one or more attributes of the print data.
[0055] In certain examples, the printer destination identification
module 225 may pass certain attributes of the print data (e.g., the
identity and/or location of the source of the print data determined
by the print source identification module 215, the print parameters
determined by the print parameters identification module 220, etc.)
to the rules engine 130. The rules engine 130 may apply a certain
set of predetermined or dynamically updated rules to the input it
receives from the printer destination identification module 225 to
determine the destination printer 150 and/or print server 145 for
the print data. The destination printer 150 and/or print server 145
determined by the rules engine 130 may then be returned to the
printer destination identification module 225.
[0056] Alternatively, instead of using a rules engine 130, the
printer destination identification module 225 may identify the
appropriate destination printer 150 based on static associations
between certain attributes and certain destination printers
150.
[0057] Once the destination printer 150 and/or print server 145 has
been identified for the print data, the print data forwarding
module 230 may be configured to forward the print data on to the
identified printer 150 and/or print server 145. The print data may
be forwarded over a local connection and/or over a network or
logical connection. Additionally, in certain examples, the print
data forwarding module 230 may be configured to receive feedback
from a printer 150 and/or a print server 145 about a specific print
job and process the feedback and/or forward the feedback to a third
party, such as the source of that particular print job.
[0058] The print server manager 205 of the central server computer
system 105-a may handle certain aspects related to the distribution
of drivers for printers to the print servers 145 and the general
maintenance of the print servers 145. Accordingly, the print server
manager 205 may include a driver identification module 235, a
driver deployment module 240, an operating system identification
module 245, and a print server instantiation module 250.
[0059] The driver identification module 235 may, in response to a
set of print data being assigned to a particular printer 150,
determine an appropriate driver for that printer 150. As described
above with regard to FIG. 1, the appropriate driver may be selected
from a central repository of drivers stored, for example, at data
store 110. The driver identification module 235 may be further
configured to determine whether an appropriate driver for the
selected printer 150 is already installed on a print server 145
chosen to send the print data to the selected printer 150. In
certain examples, the driver identification module 235 may compare
a version of the driver stored by the chosen print server 145 with
a version of the driver stored at the central repository to
determine whether the driver stored by the chosen print server 145
is current.
[0060] In the event that a determination is made that the chosen
print server 145 does not have the appropriate driver or a correct
version of the appropriate driver, the driver deployment module 240
may install the appropriate driver on the print server 145. In
certain examples, the driver deployment module 240 may access and
write to storage associated with the print server 145 via a local
connection, network connection, and/or a logical connection to
install the appropriate driver to the print server 145.
[0061] The operating system identification module 245 may be
configured to identify an appropriate operating system associated
with an appropriate driver for the selected printer 150. In the
event that a print server 145 running the appropriate operating
system and in communication with the selected printer 150 does not
exist or is unavailable, the print server instantiation module 250
may instantiate a new print server 145. The newly instantiated
print server 145 may be created on a dedicated or virtual machine
by loading the appropriate operating system to the dedicated or
virtual machine. In certain examples, an operating system image
having the appropriate driver preinstalled may be used to
instantiate the new print server 145.
[0062] FIG. 3 is a block diagram of one example of a data store
110-a that may be associated with a central server computer system
105. The data store 110-a shown in FIG. 3 may be an example of data
store 110 shown in FIG. 1. As shown in FIG. 3, data store 110-a may
store drivers 305, libraries 310, device configurations 315, tables
320, rules 325, and operating system images 330.
[0063] Data store 110-a may maintain a repository of drivers 305
for various printers 150 supported by a distributed printing system
100. In accordance with the description of FIGS. 1-2, as a print
job is received at the central server computer system 105, the
central server computer system 105 may associate the print job with
a specific printer 150, dynamically access the data store 110 to
retrieve a driver 305 appropriate for the specific printer, and
provide the retrieved driver 305 to a print server 145 associated
with the specific printer.
[0064] Because the drivers 305 are stored centrally at data store
110-a, individual machines implementing sessions 115, 125 and
individual print servers 145 may not need to store a local print
driver for each printer supported by the system 100. Moreover, as
updated versions of drivers 305 become available, a network
administrator may make the updated versions available to each print
server 145 in the system by simply updating the repository of
drivers 305 stored at the data store 110-a, thereby avoiding the
need to roll out driver updates to each print server 145
separately.
[0065] The data store 110-a may also store software libraries 310.
For example, the data store 110-a may store libraries 310
associated with the drivers 305. In certain embodiments, the
libraries 310 may include Dynamic-Link Library (DLL) or Dynamic
Shared Object (DSO) files that allow the print servers 145 to
dynamically communicate with the sessions 115, 125 which generate
the print jobs sent to printers 150. Thus, where the central server
computer system 105 provides a driver 305 to a print server 145 for
a specific printer 150, the central server computer system 105 may
include with the driver 305 one or more DLL files for that printer
150. The DLL(s) files may allow the print server 145 to provide
feedback to a session 125 from which a print job originates in a
way that is understandable to the session 125. For instance, if a
user of the session 125 generates the print job using a print
Graphical User Interface (GUI), the DLL transmitted to the print
server 145 may allow the print server 145 to provide feedback to
the user of the session 125 through the print GUI.
[0066] By way of example and not limitation, consider the case
where a print job generated by a session 125 has been sent to a
print server 145 for printing by a specific printer 150, and that
the printer 150 is out of paper. The printer 150 may send a
feedback message to the print server 145 indicating that the
printer 150 is out of paper, and the print server 145 may provide
this feedback message to a print dialog window in the session 125
using a DLL received from the central server computer system 105.
This process may allow for a more seamless printing experience for
a user of session 125, despite the fact that the session 125 may
not locally store a print driver or DLL for communicating with the
printer 150.
[0067] In certain examples, the data store 110-a may also store
device configurations 315, such as settings configurations for
printers 150. Thus, when the central server computer system 105
transmits a print job to a print server 145 associated with a
specific printer 150, the central server computer system 105 may
also include in the transmission a configuration 315 retrieved from
the data store 110-a for that printer 150. The configuration 315
may specify, for example, settings such as printer margin settings,
duplex settings, paper tray settings, ink color settings, collation
settings, and the like. The configuration 315 transmitted to the
print server 145 by the central server computer system 105 may be
specific to the printer 150, the session 115, 125 generating the
print job, and/or the character or content of the print job
itself.
[0068] Additionally, the data store 110-a may store and maintain
various tables 320. The tables 320 may reflect certain
relationships present in the system 100. For example, the tables
320 may include one or more tables 320 associating specific
sessions 115, 125 with terminal identifiers or node identifiers,
one or more tables 320 associating specific sessions 115, 125 with
physical locations, one or more tables 320 associating specific
printers 150 or print servers 145 with physical locations, one or
more tables 320 associating specific sessions 115, 125 with default
printers 150, and/or one or more tables 320 tracking any other
association in the system 100 that may suit a particular
implementation of the principles described herein.
[0069] In certain examples, two or more of the tables 320 stored by
the data store 110-a may be interrelated in such a way that allows
for logical deductions in routing print jobs to print servers 145
or other useful purposes. For instance, the data store 110-a may
include: a) a first table 320 associating each terminal identifier
at a port with a particular session 115, 125 at a specific physical
location; and b) a second table 320 associating each physical
location for a session 115, 125 with a default printer 150. In this
case, the information in the first table 320 and the second table
320 may be used by the central server computer system 105 to
associate a print job received at a port with a specific default
printer 150.
[0070] The data store 110-a may also include one or more rules 325
for use by the central server computer system 105 in routing
received print jobs to print servers 145 and printers 150. As noted
above in the description of FIGS. 1-2, the rules engine 130 of the
central server computer system 105 may be configured to dynamically
map a print job to a print server 145 and printer 150 for the print
job by accessing the set of rules 325 stored in the data store
110-a. The rules 325 may take into account factors such as the
location of the device generating the print job, the type of device
generating the print job, attributes of the print job, and other
factors. Some of these factors may be stored in the tables 320.
[0071] Additionally, the data store 110-a may include one or more
operating system images 330. The operating system images 330 may be
used, for example, in the dynamic creation of print servers 145. As
described above, certain drivers 305 may not be compatible with the
standard operating systems executed by typical print servers 145 in
the system 100. Accordingly, when a print job is indicated for a
printer 150 using one of these drivers 305, the central server
computer system 105 may retrieve a compatible operating system
image 330 from the data store 110-a and instantiate a new print
server 145 by loading the operating system image 330 onto a real or
virtual machine. The newly instantiated print server 145 may then
receive the print job from the central server computer system 105
and control the indicated printer 150 using the appropriate driver
305 to complete the print job.
[0072] Turning now to FIG. 4, a block diagram is shown of an
illustrative backend 120-a for use in a distributed printing system
100. The backend 120-a shown in FIG. 3 may be an example of the
backend 120 shown in FIG. 1. The backend 120-a may be configured to
forward print data 405 to a next destination in the printing
pipeline, such as a central server computer system 105, a print
server 145, or a printer 150, as described in more detail below. To
accomplish this functionality, the backend 120 may include a
receiving module 410 to receive the print data 405 from an
application session 115, a backend routing module 415 for
determining the next destination of the print data 405, and a
transmission module 425 to transmit the print data 405 to the
determined next destination. In some examples, the backend 120-a
may also include a rasterization module 420 for rasterizing the
print data 405 prior to transmitting the print data 405 to the
central server computer system 105.
[0073] The receiving module 410 of the backend 120-a may be
configured to receive the print data 405 over a channel of
communication with the application session 115. In some examples,
the channel of communication may include one or more local
connections (e.g., serial ports, parallel ports, etc.) between the
backend 120-a and a device implementing the application session
115. Additionally or alternatively, the channel of communication
may include one or more network connections (e.g., Ethernet, WiFi,
etc.) and/or logical connections (e.g., where the receiving module
410 of the backend 120-a and the application session 115 are
implemented by the same physical machine).
[0074] In addition to receiving the print data 405, the receiving
module 410 may also identify the application session 115 providing
the print data 405. For example, the receiving module 410 may
monitor a number of ports associated with various application
sessions 115. Each of the application sessions 115 may be assigned
a terminal identifier or a node identifier. Thus, when print data
405 is received, the receiving module 410 may take note of the
terminal identifier, the node identifier, and/or the port on which
the print data is received to associate the print data 405 with a
known application session.
[0075] The backend routing module 415 may determine the next
destination of the print data 405 based on the application session
115 from which the print data 405 was received. To this end, the
destination identification module 415 may maintain a table
associating specific application sessions 115 with specific
destinations. In certain examples, such as in the system 100 of
FIG. 1, all print data 405 received at the backend 120-a,
regardless of source, may be transmitted by the backend 120-a to a
single central server computer system 105.
[0076] In alternative examples, the backend 120-a may be
communicatively coupled to a number of separate central server
computer systems 105 such that print data 405 from different
application sessions 115 is transmitted by the backend to different
central server computer systems 105. In additional or alternative
examples, the backend 120-a may be communicatively coupled to one
or more central server computer systems 105 in addition to one or
more print servers 145 such that print data 405 from some
application sessions 115 is transmitted to a central server
computer system 105 and print data 405 from other application
sessions 115 is transmitted directly to a print server 145. In
these examples, the backend routing module 415 may determine the
next destination of each instance of print data 405 based on the
application session 115 from which the print data 405 was
received.
[0077] In certain examples, the backend routing module 415 may
further include logic for dynamically determining in real-time how
a print job is to be routed. For example, based on certain
characteristics of the print data 405, the backend routing module
415 may determine that it would be more appropriate to forward the
print data 405 to a central server computer system 105 than to a
print server 145 or printer 150. Additionally or alternatively, in
examples where the backend 120-a is communicatively coupled to
multiple alternative central server computer systems 105, the
backend routing module 415 may perform load balancing in its
distribution of different print jobs between the separate central
server computer systems 105.
[0078] As mentioned above, in certain embodiments the backend 120-a
may include a rasterization module 420. The rasterization module
420 may convert the received print data 405 into a raster image
that can be understood by a printer. In other embodiments, the
print data 405 may already have been rasterized by the application
session 115 from which the print data 405 was received. In still
other embodiments, the print data 405 may be rasterized at a print
server 145 prior to printing.
[0079] The transmission module 425 of the backend 120-a may
transmit the received print data 405 to the destination determined
by the next destination identification module 415. This
transmission may occur over one or more local connections (e.g.,
serial ports, parallel ports), one or more network connections
(e.g., Ethernet, WiFi), and/or one or more logical connections
(e.g., where the backend 120 and the next destination are
implemented by the same physical machine).
[0080] FIG. 5 illustrates a diagram of one illustrative path 500 of
print data 405 through a distributed printing system. The print
data 405 may first be generated and transmitted to a central server
computer system 105-b by a session 125. The central server computer
system 105-b may be an example of the central server computer
system 105 of FIG. 1 or FIG. 2. The session 125 may include an
application executed by a host device. In certain examples, a user
of the application issues a command to print data generated or
hosted by the application.
[0081] In certain embodiments, the session 125 may transmit the
print data 405 directly to the central sever computer system 105-b.
Alternatively, the session 125 may utilize a backend 120 to
transmit the print data 405 to the central server computer system
105. The central server computer system 105-b may perform session
identification 510 to determine the source of the print data 405.
For example, the central server computer system 105-b may look up a
terminal identifier and/or a port associated with the print data
405 in a table to identify a device from which the print data 405
originated.
[0082] Once the source of the print data 405 is known, the central
server computer system 105-b may perform print routing 515 on the
print data 405 to select an appropriate printer 150-a for the print
data 405. The printer 150-a may be an example of one of the
printers 150 shown in FIG. 1. The print routing 515 may include
applying a set of rules to one or more parameters associated with
the print data 405 and/or the identified session 125. Additionally,
the central server computer system 105-b may retrieve 520 an
appropriate driver 305-a for the identified printer 150-a from a
data store 110. The driver 305-a may be transmitted, together with
the print data 405, from the central server computer system 105-b
to a print server 145-a associated with the identified printer
150-a. The print server 145-a may be an example of the print server
145 shown in FIG. 1. In certain examples, as described above, the
print server 145-a may be dynamically instantiated in response to a
particular printer 150-a being selected for the print data 405.
[0083] The print server 145-a may install 530 the driver 305-a
received from the central server computer system 105-b to enable
the print server 145-a to communicate with the selected printer
150-a. Additionally, the print server may perform spooling 535
operations to receive and collect the print data 405, scheduling
540 operations to schedule the print data 405 for printing by the
printer 150-a, and one or more conversion 545 operations to
transform the print data into a format understood by the printer
150-a. In certain examples, the conversion 545 operations may
include rasterization of the print data 405. The print server 145-a
may then transmit the print data 405 to the selected printer 150-a
over a local connection, a network connection, and/or a logical
connection for printing.
[0084] It is worth noting that while an entire distributed printing
system 100 has been described as a whole for the sake of context,
the present specification is directed to methods, systems, and
apparatus that may be used with, but are not tied to the system 100
of FIGS. 1-5. Individual aspects of the present specification may
be broken out and used exclusive of other aspects of the foregoing
description. This will be described in more detail, below.
[0085] In one set of embodiments, systems, devices, methods, and
software are described for distributing drivers. FIG. 6 illustrates
an example of a system 600 for driver distribution. The system 600
includes a central server computer system 105-c, a data store
110-b, a print server 145-b, a printer 150-b, devices 605, and a
network 610. Each of these components may be in communication with
each other, directly or indirectly. This system 600 may be an
example of the system 100 described with reference to FIG. 1.
[0086] A device 605 may be a personal computer, a workstation, a
laptop, a phone, a personal digital assistant, a tablet, or any
other computing device. A user may input a print command, and the
device 605 may transmit aspects about the print job to the central
server computer system 105-c. For example, the device 605 may
transmit information about the type of device 605, the application
in use, the type of document to be printed, the location of the
device 605, and user preferences.
[0087] A set of drivers may be stored at data store 110-b. For
example, there may be drivers included from a number of printer
manufacturers (e.g., Hewlett Packard, Epson, Dell, Canon, and
Lexmark), and for a number of different models from each. There may
be the same, or different, drivers stored for the device 605 and
for the print server 145-b.
[0088] In some embodiments, no drivers are maintained on the device
605 or the print server 145-b; instead, drivers are distributed on
a per-print job (or per-set of print jobs) basis to both the device
605 and for the print server 145-b. In other embodiments, the print
drivers for the print server 145-b are maintained at the print
server 145-b, and the drivers for the device 605 are distributed on
a per-job (or per-set of print jobs) basis. In some embodiments,
drivers that are used over a threshold amount (e.g., a set number
of print jobs or pages per day) at a given device 605 or print
server 145-b may be maintained thereon. The threshold may be
different for different types of devices 605 and/or print servers
145-b. For example, the threshold may be specific to a printer
type, a print server type, and/or type of device 605 generating the
print job. When the use crosses a given threshold, one or more of
the drivers may be uninstalled. Thus, in some examples, a subset of
drivers may be maintained, while the rest are distributed from the
central server computer system 105-c.
[0089] As noted above, a device 605 may transmit information or
notification of a print job to the central server computer system
105-c. The central server computer system 105-c may identify
information about the print job (e.g., identification and location
of the applicable print server 145-b and printer 150-b, and
identification of the proper driver). The central server computer
system 105-c may identify the proper driver for the device 605 or
print server 145-b based on the received information about the
print job.
[0090] Drivers for the print job may be transmitted to, or
otherwise retrieved by, the appropriate print server 145-b and the
device 605 requesting the job. The drivers may be installed at the
device 605 and print server 145-b (while noting that the print
server 145-b may be a virtual print server operating as part of the
central server computer system 105-c). The device 605 and print
server 145-b may execute the print job with the installed drivers.
Thus, the central server computer system 105-c may access the data
store 110-b to retrieve and distribute drivers to the print server
145-b or the device 605, and thus in some embodiments the drivers
do not need to be maintained on each device or print server 145.
The drivers may be taken down or uninstalled after each job or
predetermined set of jobs. In some embodiments, the drivers may be
uninstalled after a period with no use, or a period with use under
a threshold amount.
[0091] In some embodiments, the print server 145 may be a virtual
print server that is dynamically generated in response to receiving
notification of the print job at the print router 140-b. For
example, consider the case where the central server computer system
implements the print router 140-b. In response to notification of
the print job being received at the central server computer system,
the driver associated with a destination printer may be selected,
and the driver may be installed on an image for a virtual machine.
The central server computer system may then launch the virtual
machine to instantiate a print server for the selected printer, and
transmit the print job to the virtual machine. The virtual machine
may manage printing of the print job at the selected destination
printer. Once printing has terminated, the server may optionally
terminate or destroy the virtual machine.
[0092] FIG. 7 illustrates another system 700 for driver
distribution. The system 700 includes a central server computer
system 105-d, a data store 110-c, a print server 145-c, a printer
150-c, devices 605, and a network 610. Each of these components may
be in communication with each other, directly or indirectly. This
system 600 may be an example of the system 100 described with
reference to FIG. 1 or the system 600 described with reference to
FIG. 6.
[0093] In the system 700 of FIG. 7, a data store 110-c associated
with the central server computer system 105-a stores a complete set
of drivers 305-a to 305-f. Additionally, the print server 145-a has
access to a data store 705 to store drivers 305-a, 305-c locally.
However, as shown in FIG. 7, the drivers 305-a, 305-c locally
available to the print server 145-a are only a subset of the
drivers 305-a to 305-f stored by the data store 110-a of the
central server computer system 105-a. The central server computer
system 105-d may control which drivers 305-a, 305-c the print
server 145-c is permitted to store locally. Additionally, the
central server computer system 105-d may periodically uninstall
certain drivers 305-a, 305-c from the data store 705 of the print
server 145-c and/or install new drivers 305 or new versions of
drivers 305 to the data store 705 of the print server 145-c.
[0094] As described above, in some examples the drivers 305-a,
305-c stored by the data store 705 associated with the print server
145-c may include drivers 305-a, 305-c that are frequently used.
Additionally or alternatively, the drivers 305-a, 305-c stored by
the data store 705 associated with the print server 145-c may
include drivers 305-a, 305-c that the central server computer
system 105-d permits the print server 145-c to access locally for a
defined period of time or until an expiration condition is met.
[0095] FIG. 8 illustrates one example of a central server computer
system 105-e that may be used in a system for distributing drivers,
such as the system 100 of FIG. 1, the system 600 of FIG. 6, or the
system 700 of FIG. 7. The central server computer system 105-e
includes a rules engine 130, a session manager 135, and a print
router 140.
[0096] The central server computer system 105-e may be an example
of the central server computer system 105 of FIG. 1, 2, 5, 6, or 7.
The central server computer system 105-e may include a rules engine
130, a session manager 135, a print router 140, and a print server
manager 205-a. The rules engine 130, the session manager 135, and
the print router 140 may each perform substantially the same
functionality as described above with respect to FIG. 1 and FIG. 2.
The print server manager 205-a may be an example of the print
server manager 205 shown in FIG. 2.
[0097] The print server manager 205-a may be configured to
coordinate various functions with respect to the deployment of
drivers 305 to one or more print servers 145. The print server
manager 205-a may include a driver identification module 235-a, a
driver deployment analysis module 705, a driver deployment module
240-a, a driver removal analysis module 710, a driver removal
module 715, an operating system identification module 245, and a
print server instantiation module 250. The operating system
identification module 245 and the print server instantiation module
250 may perform substantially the same functionality as described
above in FIG. 2.
[0098] The driver identification module 235-a may be an example of
the driver identification module 235 shown in FIG. 2. The driver
identification module 235-a may determine a correct driver stored
in a data store 110 of the central server computer system 105-e for
a given print job. To this end, the driver identification module
235-a may include a printer type analysis submodule 720 and a print
job type analysis submodule 725. In certain examples, the driver
identification module 235-a may include only one of these
submodules 720.
[0099] The printer type analysis submodule 720 may be configured to
determine a type of printer 150 corresponding to the print job. The
type of printer 150 selected for the print job may be provided to
the printer type analysis submodule 720 by the print router 140.
Once the printer type is known, the driver identification module
235-a may query a lookup table to identify the appropriate driver
305 for the printer 150. In certain examples, the operating system
of a selected print server 145 may also be taken into consideration
in the determination of the appropriate driver 305 for the printer
150.
[0100] In certain examples, more than one driver 305 may be
appropriate for a particular type of printer 150. For instance,
lightweight and a heavyweight driver 305 may be available for the
same printer 150, where the lightweight driver 305 is sufficient
for managing basic print jobs and the heavyweight driver 305
provides support for advanced options and printer functions. In
this case, the print job type analysis submodule 725 may identify
the type of print job received by the central server computer
system 105-e to determine which driver 305 is most appropriate for
the print job. For example, if a lightweight driver 305 provides
sufficient functionality for a particular print job, it may be
preferable to provide the lightweight driver 305 instead of the
heavyweight driver to the print server 145 to conserve bandwidth
and accelerate the printing process.
[0101] The driver deployment analysis module 705 of the print
server manager 205-a may be configured to determine whether to
install the driver 305 identified by the driver identification
module 235-a to a print server 145 for a particular print job. To
make this determination, the driver deployment analysis module 705
may include an installment detection submodule 730 and an update
analysis submodule 735. The installment detection submodule 730 may
query the print server 145 associated with the print job or consult
a table to determine whether the print server 145 already has the
identified driver 305 installed.
[0102] If it is determined that the print server 145 already has
the identified driver 305 installed, the update analysis submodule
735 may communicate with the print server 145 or consult a table to
determine whether the driver 305 installed on the print server 145
is a correct version. If the print server 145 does not have the
identified driver 305 installed or does not have the correct
version of the identified driver 305 installed, the driver
deployment analysis module 705 may instruct the driver deployment
module 240-a to deploy the identified driver 305 to the print
server 145.
[0103] The driver deployment module 240-a may be configured to
manage the deployment and installation of the driver 305 identified
by the driver identification module 235-a to the print server 145
identified by the print router 140. The driver deployment module
240-a may include a destination analysis submodule 740, a driver
transmission submodule 745, and a print server instruction
submodule 750.
[0104] The destination analysis submodule 740 may be configured to
identify a target location at print server 145 for copying the
identified driver 305. For example, the destination analysis
submodule 740 may communicate with the print server 145 or consult
a record to determine a file structure of the print server 145 and
a location within that file structure where the print server 145
will look for the identified driver 305 when it is ready to
transmit a print job to the printer 150.
[0105] The driver transmission submodule 745 may be configured to
transmit a digital file containing the identified driver 305 to the
target location in the print server 145 as identified by the
destination analysis submodule 740. This transmission may be
accomplished in a variety of ways, depending on the nature of the
connection between the central server computer system 105-e and the
print server 145. For example, if the central server computer
system 105-e is connected to the print server 145 locally, the
driver 305 may be transmitted to the print server over one or more
buses. Additionally or alternatively, if the central server
computer system 105-e is connected to the print server 145 via a
network connection, the driver 305 may be transmitted to the print
server 145 using one or more network packets.
[0106] The print server instruction submodule 250 may transmit
instructions to the print server related to the deployment and
installation of the identified driver 305. For example, these
instructions may include a script that the print server 145 can run
to install the identified driver 305. Additionally or
alternatively, the instructions may include one or more specified
expiration conditions and a directive to the print server 145 to
automatically remove the identified driver 305 on the occurrence of
one or more of the specified expiration conditions. Depending on
the nature of communication between the central server computer
system 105-e and the print server 145, such instructions may not be
necessary in certain examples. For example, the central server
computer system 105-e may perform all driver installation and
removal operations for the print server 145 directly.
[0107] The driver removal analysis module 710 may be configured to
determine whether the central server computer system 105-e is to
remove a driver 305 that is already installed on a target print
server 145. The driver removal analysis module 710 may include a
print job completion detection submodule 755, a driver usage
analysis submodule 760, a connection speed analysis submodule 765,
a version analysis submodule 770, and an installation period
analysis submodule 775. It should be understood that in certain
embodiments, the driver removal analysis module 710 may only
include a subset of the submodules 755, 760, 765, 770, 775 shown in
FIG. 7, as determined by the rules governing driver removal in a
particular implementation of the principles described herein.
[0108] The driver removal analysis module may make the ultimate
determination of whether to remove a driver installed at a print
server 145 based on a weighted analysis of input from each of the
submodules 755, 760, 765, 770, 775. Additionally or alternatively,
the driver removal analysis module may enforce one or more priority
rules to resolve conflicting input from two or more submodules 755,
760, 765, 770, 775.
[0109] The print job completion detection submodule 755 may
determine the status of a print job associated with the driver 305
installed on the print server 145. In certain examples, the
successful completion of a print job may weigh in favor of removing
the driver 305 from the print server 145.
[0110] The driver usage analysis submodule 760 may be configured to
evaluate the actual or anticipated usage of the driver installed on
the print server 145. In certain examples, the central server
computer system 105-e may determine whether to remove the driver
305 from a print server 145 based at least in part on the actual or
anticipated usage of the driver 305 by the print server 145. If the
driver usage analysis submodule 760 determines that the driver 305
does not meet certain anticipated or actual usage criteria, this
determination may weigh in favor of removing the driver 305 from
the print server 145. Alternatively, the driver usage analysis
submodule 745 may determine that a particular driver 305 recently
installed on the print server 145 in connection with a print job is
an objectively popular driver 305 in a system 100, which
determination may weigh against removing the driver 305 from the
print server 145.
[0111] In certain examples, the driver usage analysis submodule 760
may monitor the actual usage of the installed driver 305 by
measuring the frequency with which the print server 145 accesses
and uses the installed driver 305. For example, the driver usage
analysis submodule 760 may determine the number of actual uses by
the print server 145 of the selected driver 305 since the driver
305 was transmitted to or installed on the print server 145. This
number may be compared to a threshold minimum number of uses such
that the driver 305 is removed if the measured number of uses is
smaller than the minimum number of uses of the driver 305. In
certain examples, the threshold may be dynamically computed by the
driver usage analysis submodule 760, taking into account factors
such as the amount of elapsed time from when the driver 305 was
transmitted to the print server 145.
[0112] The connection speed analysis submodule 765 may be
configured to determine the data connection speed between the
central server computer system 105-e and the print server 145. This
connection speed may be taken into consideration in determining
whether to remove the driver 305 from the print server 145. For
example, if the connection speed is determined by the driver
removal analysis module 710 to be below a certain threshold, the
reinstallation of the driver 305 to the print server 145 for future
print jobs may be cost prohibitive. As such, a determination by the
connection speed analysis submodule 765 that the connection speed
is below the threshold may weigh against removing the driver 305
from the print server 145.
[0113] The version analysis submodule 770 may be configured to
determine whether the version of the driver 305 stored by the print
server 145 is a correct (e.g., up-to-date) version as defined by
the central server computer system. In certain examples, it may be
desirable to ensure that only current drivers 305 are stored
locally by the print server 145. Thus, a determination by the
version analysis submodule 770 that the print server 145 has an
out-of-date version of the driver 305 installed may weigh in favor
of removing the driver 305 from the print server 145.
[0114] The installation period analysis submodule 775 may determine
the length of time for which the driver 305 has been installed on
the print server 145. In certain examples, it may be desirable to
remove drivers 305 from the print server 145 that have been
installed on the print server 145 for greater than a threshold
amount of time. As such, the installation period analysis submodule
775 may compare the period of elapsed time since the last
installation of the driver 305 on the print server to a threshold.
If the period of elapsed time since the last installation is
determined to be greater than the threshold, this determination may
weigh in favor of removal from the print server 145.
[0115] The driver removal module 715 of the print server manager
205-a may remove from the print server 145 any driver 305 that has
been indicated for removal by the driver removal analysis module
710. The driver removal module 715 may include a driver location
analysis submodule 780 and a driver deletion submodule 785. The
driver location analysis submodule 780 may communicate with the
print server 145 or consult a table to identify where the driver
305 to be removed is stored on the print server 145. The driver
deletion submodule 785 may instruct the print server 145 to delete
the driver 305 stored at the identified location or directly access
the identified location to delete the driver 305.
[0116] FIG. 9 is a block diagram of an illustrative print server
145-d that can be used in a system for distributed printing. The
print server 205-c may be an example of the print server 145 shown
in FIG. 1, 5, 6, or 7. The print server 145-d may include a driver
manager 710 and a printer manager 910.
[0117] The driver manager 905 may include logic for controlling the
local storage of drivers 305 on the print server 145-d. The driver
manager may include a driver storage module 915, a driver
installation module 920, and a driver removal module 925.
[0118] The driver storage module 915 may be configured to provide
access to a local data store used to store the drivers 305. In
certain examples, the driver storage module 915 may enforce a file
structure and/or naming convention governing how and where certain
drivers 305 are stored within the data store. The driver storage
module 915 may also provide a central server computer system 105
access to the data store for the installation and removal of
drivers directly by the central server computer system 105.
[0119] The driver installation module 920 may be configured to
enable the installation of a driver 305 provided by the central
server computer system 105 to the local storage of the print server
145-d. The driver installation module 920 may include a driver
receiving submodule 930 and a driver writing submodule 935. The
driver receiving submodule 930 may include logic for receiving a
digital file containing the driver 305 from the central server
computer system 105 (e.g., over a local or network connection). The
driver writing submodule 935 may include logic for communicating
with the data storage file to write the file received from the
driver 305 to a designated location in the local storage of the
print server 145-d.
[0120] The driver removal module 925 may be configured to remove an
installed driver 305 from the local storage of the print server
145-c in response to an instruction from the central server
computer system 105 or upon the occurrence of one or more defined
expiration conditions. The driver removal module 925 may include a
removal instruction receiving submodule 940, an automatic removal
analysis submodule 945, and a driver deletion submodule 950. In
certain examples, the driver removal module 925 may include only a
subset of these submodules 940, 945, 950.
[0121] The removal instruction receiving submodule 940 may include
logic for receiving a removal instruction from the central server
computer system 105. The removal instruction may identify a driver
305 for removal from the print server 145-d. The automatic removal
analysis submodule 945 may include logic for storing one or more
automatic expiration conditions corresponding to one or more
drivers 305 stored by the print server 145-d. These automatic
expiration conditions may have been received from the central
server computer system 105 or generated locally. The automatic
removal analysis submodule 945 may further include logic for
determining whether one or more of the automatic conditions have
been met with respect to a driver 305 stored by the print server
145-d to determine whether that driver 305 should be removed from
the print server 145-d.
[0122] The driver deletion submodule 925 may include logic for
communicating with the driver storage module 915 to delete a driver
305 from the local storage of the print server 145-d. The driver
305 may be identified for removal by the removal instruction
receiving submodule 940 or the automatic removal analysis submodule
945 from the local storage of the print server 145-d.
[0123] The printer manager 910 of the print server 145-d may
control the receipt of print jobs and the distribution of the print
jobs to one or more printers 150. The printer manager 910 may
include a print spooling module 955, a print job scheduling module
960, a print job conversion module 965, a print job transmission
module 970, and a printer feedback management module 975.
[0124] The print job spooling module 955 may be configured to
receive and cache print jobs from the central server computer
system 105. The print jobs may include print jobs assigned to
different printers 150 managed by the print server 145-d. As such,
the print job spooling module 955 may also include logic for
receiving a printer assignment corresponding to each received print
job.
[0125] The print job scheduling module 960 may be configured to
schedule print jobs received by the print job spooling module 955
among the printers 150 to which the print jobs are assigned. The
print job scheduling module 960 may identify the availability of
the printers 150 to which the print jobs are assigned and schedule
the print jobs based on the order in which they were received at
the print job spooling module 955 or, for example, based on an
order designed to increase printer throughput.
[0126] The print job conversion module 965 may include logic for
converting print data in a print job received at the print job
spooling module 955 into a format that the designated printer 150
can understand. For example, the print job conversion module 965
may include logic for rasterizing the print data of a print job to
create a bitmap file for the printer 150. As described above, this
conversion may additionally or alternatively occur at the backend
120 or at the device 605 generating the print data.
[0127] The print job transmission module 970 may include logic for
transmitting a scheduled print job to the printer 150 designated
for that print job. This transmission may occur over a local
connection, a network connection, and/or a logical connection.
[0128] The printer feedback management module 975 may be configured
to receive feedback from a printer 150. In certain examples,
conditions (e.g., low supply of media, low supply of ink or toner,
malfunctions) at a printer 150 may affect the ability of the
printer 150 to function correctly. To call attention to these
conditions, the printer 150 may transmit a feedback message to the
print server 145-d. Additionally or alternatively, a printer 150
may provide information on the status of the printer 150 through a
feedback message transmitted to the print server 145-d. These
feedback messages from the printer 150 are received and processed
by the printer feedback management module 975.
[0129] As described above with reference to FIG. 3, in certain
examples, the central server computer system 105 may provide
auxiliary files including software libraries (e.g., DLL files) to
the print server 145-d in connection with a driver 305. These
auxiliary files may enable the print server 145-d to forward
feedback received from the printer 150 with respect to a print job
back to a device 605 that generated the print job. The printer
feedback management module 975 may include logic for receiving and
accessing these auxiliary files from the central server computer
system 105 to provide printer feedback to the device 605.
[0130] FIG. 10 shows an illustrative method 1000 for printing in a
distributed environment according to the principles of the present
specification. The method 1000 may be performed, for example, by
the central server computer system 105 of FIG. 1, 2, 5, 6, 7, or 8.
At block 1005, drivers are stored at a centralized data store. In
certain examples, the drivers may include print drivers. At block
1010, a notification is received of a print job. At block 1015, a
driver corresponding to a printer is selected based on the received
notification. The driver may be selected in response to receiving
the notification. At block 1020, the selected driver is transmitted
to a print server in communication with the printer. It is worth
noting that in some embodiments the driver distribution may, but
need not be, on a per-job basis. In some cases, the driver
distribution scheme, outlined above, effectively decouples the need
for the frontend device to support the drivers.
[0131] FIG. 11 illustrates another illustrative method 1100 for
printing in a distributed environment according to the principles
of the present specification. The method 1100 may be performed, for
example, by the central server computer system 105 of FIG. 1, 2, 5,
6, 7, or 8. At block 1105, drivers are stored at a centralized data
store. At block 1110, a notification is received of a print job
from a network device, where the notification includes the print
data for the print job from a network device. At block 1115, a
driver corresponding to a printer is selected based on the print
job. At block 1120, the selected driver is transmitted to a print
server in communication with the selected printer. At block 1125,
it is determined that the printer has completed the print job. At
block 1130, the selected driver is removed from the print server.
In some embodiments, the removal of the selected driver may occur
in response to the determination at block 1125 that the printer has
completed the print job.
[0132] FIG. 12 illustrates another illustrative method 1200 for
printing in a distributed environment according to the principles
of the present specification. The method 1200 may be performed, for
example, by the central server computer system 105 of FIG. 1, 2, 5,
6, 7, or 8. At block 1205, drivers are stored at a centralized data
store. At block 1210, a notification is received of a print job
from a network device, where the notification includes the print
data for the print job from a network device. At block 1215, a
driver corresponding to a printer is selected based on the print
job. At block 1220, the selected driver is transmitted to a print
server in communication with the selected printer.
[0133] At block 1225, a usage of the selected driver by the print
server is monitored. At block 1230, a determination is made as to
whether the monitored usage of the selected driver by the print
server crosses a threshold. If the threshold is crossed, the
selected driver is removed from the print server at block 1235.
Otherwise, flow returns to block 1225 where the usage of the
selected driver by the print server continues to be monitored until
the threshold is crossed.
[0134] FIG. 13 illustrates another illustrative method 1300 for
printing in a distributed environment according to the principles
of the present specification. The method 1300 may be performed, for
example, by the central server computer system 105 of FIG. 1, 2, 5,
6, 7, or 8. At block 1305, drivers are stored at a centralized data
store. At block 1310, a notification is received of a print job
from a network device, where the notification includes the print
data for the print job from a network device. At block 1315, a
driver corresponding to a printer is selected based on the print
job. At block 1320, the selected driver is transmitted to a print
server in communication with the selected printer.
[0135] At block 1325, a determination is made as to whether it is
anticipated that the print server will frequently use the selected
driver. If frequent use of the selected driver is not anticipated,
the selected driver is removed from the print server at block 1335.
If frequent use of the selected driver is anticipated, the selected
driver is allowed to remain installed on the print server at block
1330. In certain examples, the determination at block 1325 may
reoccur at a later point in time if the selected driver is allowed
to remain installed on the print server.
[0136] FIG. 14 illustrates another illustrative method 1400 for
printing in a distributed environment according to the principles
of the present specification. The method 1400 may be performed, for
example, by the central server computer system 105 of FIG. 1, 2, 5,
6, 7, or 8. At block 1405, a plurality of drivers is stored at a
centralized data store. At block 1410, notification of a print job
is received at a central server computer system. At block 1415, a
driver corresponding to a printer is selected from the plurality of
drivers based on the received notification of the print job. At
block 1420, the selected driver is installed to the virtual
machine. At block 1425, the virtual machine is launched by the
central server computer system. In certain examples, the virtual
machine may be launched by commencing execution of a software image
corresponding to the virtual machine using a hypervisor or hardware
emulator. At block 1430, the print job is transmitted to the
virtual machine. At block 1435, the virtual machine is terminated
by the central server computer system in response to a
determination that the print job has completed.
[0137] FIG. 15 illustrates another illustrative method 1500 for
printing in a distributed environment according to the principles
of the present specification. The method 1500 may be performed, for
example, by the print server 145 of FIG. 1, 5, 6, 7, or 9. At block
1505, a driver selected for a print job is received at the print
server from a centralized data store. At block 1510, the selected
driver is installed on the print server. At block 1515, the print
job is transmitted from the print server to a printer using the
selected driver.
[0138] FIG. 16 illustrates another illustrative method 1600 for
printing in a distributed environment according to the principles
of the present specification. The method 1600 may be performed, for
example, by the print server 145 of FIG. 1, 5, 6, 7, or 9. At block
1605, a driver selected for a print job is received at the print
server from a centralized data store associated with a central
server computer system. At block 1610, the print job is received at
the print server from the central server computer system. At block
1615, the selected driver is installed on the print server. At
block 1620, the print job is transmitted from the print server to a
printer using the selected driver. At block 1625, it is determined
that the printer has completed the print job, and at block 1630 the
selected driver is removed from the print server. In certain
examples, the selected driver may be removed from the print server
in response to the determination that the printer has completed the
print job.
[0139] FIG. 17 illustrates another illustrative method 1700 for
printing in a distributed environment according to the principles
of the present specification. The method 1700 may be performed, for
example, by the print server 145 of FIG. 1, 5, 6, 7, or 9. At block
1705, a driver selected for a print job is received at the print
server from a centralized data store associated with a central
server computer system. At block 1710, the print job is received at
the print server from the central server computer system. At block
1715, a condition for removing the selected driver from the print
server is received at the print server. At block 1720, the selected
driver is installed on the print server. At block 1725, the print
job is transmitted from the print server to a printer using the
selected driver. At block 1730, it is determined that the condition
for removing the driver from the print server has been met, and at
block 1735 the selected driver is removed from the print server. In
certain examples, the selected driver may be removed from the print
server in response to the determination that the condition for
removing the driver from the print server has been met.
[0140] The functionality of the central server computer system 105
of FIG. 1, 2, 5, 6, 7, or 8, the print router 140 of FIG. 1, 2, or
8, the rules engine 130 of FIG. 1, 2, or 8, the print server 145 of
FIG. 1, 5, 6, or 9, the backend 120 of FIG. 1 or 4, or the device
605 of FIG. 6, 8, or 9, may, individually or collectively, be
implemented with one or more Application Specific Integrated
Circuits (ASICs) adapted to perform some or all of the applicable
functions in hardware. Alternatively, the functions may be
performed by one or more other processing units (or cores), on one
or more integrated circuits. In other embodiments, other types of
integrated circuits may be used (e.g., Structured/Platform ASICs,
Field Programmable Gate Arrays (FPGAs), and other Semi-Custom ICs),
which may be programmed in any manner known in the art. The
functions of each unit may also be implemented, in whole or in
part, with instructions embodied in a memory, formatted to be
executed by one or more general or application-specific
processors.
[0141] A device structure 1800 that may be used for one or more
components of the central server computer system 105 of the central
server computer system 105 of FIG. 1, 2, 5, 6, 7, or 8, the print
router 140 of FIG. 1, 2, or 8, the rules engine 130 of FIG. 1, 2,
or 8, the print server 145 of FIG. 1, 5, 6, or 9, the backend 120
of FIG. 1 or 4, or the device 605 of FIG. 6, 8, or 9, or for other
computing devices or printers described herein, is illustrated with
the schematic diagram of FIG. 18.
[0142] This drawing broadly illustrates how individual system
elements of each of the aforementioned devices may be implemented,
whether in a separated or more integrated manner. Thus, any or all
of the various components of one of the aforementioned devices may
be combined in a single unit or separately maintained and can
further be distributed in multiple groupings or physical units or
across multiple locations. The example structure shown is made up
of hardware elements that are electrically coupled via bus 1805,
including processor(s) 1810 (which may further comprise a digital
signal processor (DSP) or special-purpose processor), storage
device(s) 1815, input device(s) 1820, and output device(s) 1825.
The storage device(s) 1815 may be a machine-readable storage media
reader connected to any machine-readable storage medium, the
combination comprehensively representing remote, local, fixed, or
removable storage devices or storage media for temporarily or more
permanently containing computer-readable information. The
communications system(s) interface 1845 may interface to a wired,
wireless, or other type of interfacing connection that permits data
to be exchanged with other devices. The communications system(s)
interface 1845 may permit data to be exchanged with a network.
[0143] The structure 1800 may also include additional software
elements, shown as being currently located within working memory
1830, including an operating system 1835 and other code 1840, such
as programs or applications designed to implement methods of the
invention. It will be apparent to those skilled in the art that
substantial variations may be used in accordance with specific
requirements. For example, customized hardware might also be used,
or particular elements might be implemented in hardware, software
(including portable software, such as applets), or both.
[0144] It should be noted that the methods, systems and devices
discussed above are intended merely to be examples. It must be
stressed that various embodiments may omit, substitute, or add
various procedures or components as appropriate. For instance, it
should be appreciated that, in alternative embodiments, the methods
may be performed in an order different from that described, and
that various steps may be added, omitted or combined. Also,
features described with respect to certain embodiments may be
combined in various other embodiments. Different aspects and
elements of the embodiments may be combined in a similar manner.
Also, it should be emphasized that technology evolves and, thus,
many of the elements are exemplary in nature and should not be
interpreted to limit the scope of the invention.
[0145] Specific details are given in the description to provide a
thorough understanding of the embodiments. However, it will be
understood by one of ordinary skill in the art that the embodiments
may be practiced without these specific details. For example,
well-known circuits, processes, algorithms, structures, and
techniques have been shown without unnecessary detail in order to
avoid obscuring the embodiments.
[0146] Also, it is noted that the embodiments may be described as a
process which is depicted as a flow diagram or block diagram.
Although each may describe the operations as a sequential process,
many of the operations can be performed in parallel or
concurrently. In addition, the order of the operations may be
rearranged. A process may have additional steps not included in the
figure.
[0147] Moreover, as disclosed herein, the term "memory" or "memory
unit" may represent one or more devices for storing data, including
read-only memory (ROM), random access memory (RAM), magnetic RAM,
core memory, magnetic disk storage mediums, optical storage
mediums, flash memory devices or other computer-readable mediums
for storing information. The term "computer-readable medium"
includes, but is not limited to, portable or fixed storage devices,
optical storage devices, wireless channels, a sim card, other smart
cards, and various other mediums capable of storing, containing or
carrying instructions or data.
[0148] Furthermore, embodiments may be implemented by hardware,
software, firmware, middleware, microcode, hardware description
languages, or any combination thereof. When implemented in
software, firmware, middleware or microcode, the program code or
code segments to perform the necessary tasks may be stored in a
computer-readable medium such as a storage medium. Processors may
perform the necessary tasks.
[0149] Having described several embodiments, it will be recognized
by those of skill in the art that various modifications,
alternative constructions, and equivalents may be used without
departing from the spirit of the invention. For example, the above
elements may merely be a component of a larger system, wherein
other rules may take precedence over or otherwise modify the
application of the invention. Also, a number of steps may be
undertaken before, during, or after the above elements are
considered. Accordingly, the above description should not be taken
as limiting the scope of the invention.
* * * * *