Cups:虚拟打印机的接口脚本不执行命令

Cups:虚拟打印机的接口脚本不执行命令

我的脚本:

#!/bin/bash

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

我的打印机:

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

它进入脚本并运行,但不会创建文件printer.log。我尝试了旁边的各种命令echo(启动另一个脚本,gedit在后台启动),看起来它不执行脚本中的任何命令,除了cat "$6".它不会给出任何错误。如果我注释掉它,cat "$6"它在打印时会出错,所以它显然会通过脚本。

我究竟做错了什么 ?

答案1

界面脚本在用户的控制下运行cups,并且不会在用户进行打印时运行。这意味着它没有连接到您的终端或 X-display;它无法打开窗口或写入您的主目录。

如果您查看/etc/cups/cups-files.conf(可能是操作系统上的不同位置),则有诸如

# 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

这意味着,就我而言,脚本以 user 身份运行lp:lp

根据cups运行方式(例如systemd),它还可以在进一步的隔离层上运行;例如,“覆盖”/tmp意味着此处写入的文件在外部不可见。

然而,/var/spool/cups/tmp可能可用于书写和可见。

例如

#!/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"

现在/var/spool/cups/tmp/my_log我们可以看到一些结果:

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

这是在 CentOS 7 上测试的;它应该也可以在 Debian 上运行。

相关内容