컵스: 가상 프린터의 인터페이스 스크립트가 명령을 실행하지 않습니다.

컵스: 가상 프린터의 인터페이스 스크립트가 명령을 실행하지 않습니다.

내 스크립트:

#!/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에서도 작동합니다.

관련 정보