カップス:仮想プリンタのインターフェイススクリプトはコマンドを実行しません。

カップス:仮想プリンタのインターフェイススクリプトはコマンドを実行しません。

私のスクリプト:

#!/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でも動作します。

関連情報