How to show the CUPS printer jobs history?
Yes a program exists: lpstat
- print cups status information
$ lpstat -W completed
-W which-jobs Specifies which jobs to show, completed or not-completed (the default). This option must appear before the -o option and/or any printer names, otherwise the default (not-completed) value will be used in the request to the scheduler.
Or if you prefer via the following web pages:
https://localhost:631/printers/[NameOfPrinter]?which_jobs=completed
http://localhost:631/jobs?which_jobs=completed
Kind regards
The other answer when tried produced the following:
$ sudo lpstat -W completed
mfc-8480dn-1652 root 1024 Tue 28 Jan 2014 01:19:34 AM EST
Adding a user, saml
gives you that user's history:
$ sudo lpstat -W completed -u saml | head -2
mfc-8480dn-1524 saml 23552 Thu 28 Nov 2013 10:45:44 AM EST
mfc-8480dn-1526 saml 699392 Sat 30 Nov 2013 10:34:34 AM EST
But the -u all
mentioned in this U&L Q&A titled: View all user's printing jobs from the command line did nothing for me.
$ sudo lpstat -W completed -u all | head -2
$
Curiously I could do this:
$ sudo lpstat -W completed -u saml,root | head -3
mfc-8480dn-1524 saml 23552 Thu 28 Nov 2013 10:45:44 AM EST
mfc-8480dn-1526 saml 699392 Sat 30 Nov 2013 10:34:34 AM EST
mfc-8480dn-1652 root 1024 Tue 28 Jan 2014 01:19:34 AM EST
So one hackish way to do this would be to formalize a list of the users on your system and then add that as a subcommand to the -u
argument like so:
$ sudo lpstat -W completed -u $(getent passwd | \
awk -F: '{print $1}' | paste -sd ',')
Just to show that this sees all the users locally you can get a unique list of your users like so:
$ sudo lpstat -W completed -u $(getent passwd | \
awk -F: '{print $1}' | paste -sd ',') | awk '{print $2}' | sort -u
ethan
root
sam
tammy
Issues?
One problem with this is if the user printing to CUPS does not have an account locally then they won't get displayed.
But if you have a directory that contains your LPD control files, typically it's /var/spool/cups, you'll notice a bunch of control files in there. These files are kept as a result of the
MaxJobs` setting, which defaults to 500 when unset.
$ sudo ls -l /var/spool/cups/ | wc -l
502
Another source of usernames?
If you look through these files you'll notice that they contain usernames, and not just ones for accounts that are present on the system.
$ strings /var/spool/cups/* | grep -A 1 job-originating-user-name | head -5
job-originating-user-name
tammyB
--
job-originating-user-name
tammyB
So we could select all the entries that contain the username followed by the B.
$ sudo strings /var/spool/cups/* | grep -A 1 job-originating-user-name | \
grep -oP '.*(?=B)' | sort -u
ethan
guest-AO22e7
root
sam
saml
slm
tammy
This list can then be adapted in the same way as we were originally using to take the list of users from getent passwd
, like so:
$ sudo lpstat -W completed -u $(strings /var/spool/cups/* | \
grep -A 1 job-originating-user-name | \
grep -oP '.*(?=B)' |sort -u | paste -sd ',')
mfc-8480dn-1525 tammy 545792 Thu 28 Nov 2013 01:36:59 PM EST
mfc-8480dn-1526 saml 699392 Sat 30 Nov 2013 10:34:34 AM EST
mfc-8480dn-1652 root 1024 Tue 28 Jan 2014 01:19:34 AM EST
mfc-8480dn-1672 saml 1024 Sun 09 Feb 2014 01:56:26 PM EST
References
- why is /var/spool/cups so huge?
I think /var/log/cups/page_log
etc. has the history of completed jobs.
An alternative is the web interface
http://localhost:631/
which also shows completed jobs. I'm not sure where the web interface gets its information from.