私のスクリプト:
#!/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
これは私の場合、スクリプトがユーザーとして実行されていることを意味します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でも動作します。