Cups: script de interface para impressora virtual que não executa comandos

1

Meu script:

#!/bin/bash

echo "Interface script running" >> /home/user/printer.log
cat "$6"

Minha impressora:

lpadmin -p testprint -i script.sh -v file:/dev/null -E

Ele entra no script e funciona, mas não cria o arquivo printer.log . Eu tentei vários comandos ao lado de echo (inicie outro script, inicie gedit em segundo plano) e parece que ele não executa nenhum dos comandos no script, exceto o cat "$6" . Não dá erro algum. Se eu comentar o cat "$6" , será exibido um erro ao imprimir, portanto, obviamente, ele passa pelo script.

O que estou fazendo de errado?

    
por Nolhian 01.08.2016 / 15:11

1 resposta

3

Scripts de interface são executados sob o controle de cups e não são executados como o usuário que está imprimindo. Isso significa que não está conectado ao seu terminal ou X-display; não é possível abrir janelas ou escrever no seu diretório pessoal.

Se você olhar para /etc/cups/cups-files.conf (talvez um local diferente no seu sistema operacional), há linhas como

# Default user and group for filters/backends/helper programs; this cannot be
# any user or group that resolves to ID 0 for security reasons...
User lp
Group lp

Isso significa que, no meu caso, os scripts são executados como usuário lp:lp .

Dependendo de como o cups é executado (por exemplo, systemd ), ele também pode ser executado com alguma outra camada de isolamento; por exemplo. uma "sobreposição" de /tmp , o que significa que os arquivos gravados aqui não são visíveis do lado de fora.

No entanto, /var/spool/cups/tmp pode estar disponível para escrita e visível.

por exemplo

#!/bin/bash

echo "Interface script running $$" >> /var/spool/cups/tmp/my_log
/usr/bin/mount >> /var/spool/cups/tmp/my_log
/bin/id >> /var/spool/cups/tmp/my_log
df >> /var/spool/cups/tmp/my_log
cat "$6"

Agora, em /var/spool/cups/tmp/my_log , podemos ver alguns resultados:

Interface script running 22462
/dev/vda3 on / type ext4 (rw,relatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=499340k,nr_inodes=124835,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
....
uid=4(lp) gid=7(lp) groups=7(lp)
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda3        3041808 1380564   1487012  49% /
devtmpfs          499340       0    499340   0% /dev
tmpfs             508452       0    508452   0% /dev/shm
tmpfs             508452       0    508452   0% /sys/fs/cgroup
tmpfs             508452   13016    495436   3% /run
tmpfs             101692       0    101692   0% /run/user/500
/dev/vda1         487634  119954    337984  27% /boot

Isso foi testado no CentOS 7; ele deve funcionar no Debian também.

    
por 01.08.2016 / 15:59