我的脚本:
#!/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 上运行。