Eu encontrei as seguintes 2 perguntas dentro do site U & L que parecem dar dicas como uma maneira possível de fazer isso. Essas duas perguntas:
- Visualizar todos os trabalhos de impressão do usuário na linha de comando
- Como mostrar o histórico de trabalhos de impressão do CUPS?
Pode parecer que você pode usar lpstat
para conseguir o que deseja. Percebi que eu poderia executar este comando:
$ sudo lpstat -W completed
mfc-8480dn-1652 root 1024 Tue 28 Jan 2014 01:19:34 AM EST
E este aqui:
$ 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
Mas o -u all
não fez nada para mim.
$ sudo lpstat -W completed -u all | head -2
$
Curiosamente, eu poderia fazer isso:
$ 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
Assim, uma maneira rápida de fazer isso seria formalizar uma lista dos usuários em seu sistema e adicioná-la como um subcomando ao argumento -u
da seguinte forma:
$ sudo lpstat -W completed -u $(getent passwd | \
awk -F: '{print $1}' | paste -sd ',')
Só para mostrar que isso mostra todos os usuários localmente, você pode obter uma lista exclusiva de seus usuários assim:
$ sudo lpstat -W completed -u $(getent passwd | \
awk -F: '{print $1}' | paste -sd ',') | awk '{print $2}' | sort -u
ethan
root
sam
tammy
Problemas?
Um problema com isso é que, se o usuário que está imprimindo no CUPS não tiver uma conta local, ela não será exibida.
Mas se você tiver um diretório que contenha seus arquivos de controle LPD, normalmente é a configuração / var / spool / cups , you'll notice a bunch of control files in there. These files are kept as a result of the
MaxJobs, cujo valor padrão é 500 quando não definido.
$ sudo ls -l /var/spool/cups/ | wc -l
502
Outra fonte de nomes de usuários?
Se você examinar esses arquivos, perceberá que eles contêm nomes de usuários e não apenas aqueles que estão presentes no sistema.
$ strings /var/spool/cups/* | grep -A 1 job-originating-user-name | head -5
job-originating-user-name
tammyB
--
job-originating-user-name
tammyB
Assim, podemos selecionar todas as entradas que contenham o nome de usuário seguido pelo 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
Esta lista pode então ser adaptada da mesma forma como estávamos usando originalmente para pegar a lista de usuários de getent passwd
, assim:
$ 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