내 스크립트:
#!/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-디스플레이에 연결되지 않았음을 의미합니다. 창을 열거나 홈 디렉터리에 쓸 수 없습니다.
(아마도 OS의 다른 위치에서) 보면 /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에서도 작동합니다.