我在 Redhat 7 操作系统上安装了 cups-pdf 3.0 beta 2。
我手动编译了代码(按照他们的说明地点)在我安装cups-devel-1.6.3-17.el7_1.1之后。我正在运行 cups-devel-1.6.3-17.el7_1.1。我暂时禁用 SELinux 只是为了确保它不会干扰此操作。
我使用以下命令创建了一台名为 Cups-PDF 的打印机:
/usr/sbin/lpadmin -p Cups-PDF -v cups-pdf:/ -m CUPS-PDF_opt.ppd -D "PDF Virtual printer" -E
其中 CUPS-PDF_opt.ppd 是发行版中的文件档案。
我有以下问题:
- 重新启动cups后,打印机定义消失了。不知道为什么,每次重新启动杯子时我都必须重新创建它。但现在它在 Printers.conf 中。也许是因为 SELinux 曾经被启用过。
- cups-pdf 似乎没有读取我在 /etc/cups 中复制的 cups-pdf.conf 文件。这是配置文件在 cups-pdf.h 文件中的默认位置。这些文件在 /var/spool/cups 而不是 /var/spool/cups-pdf/${USER} 中生成。
echo "Test" | lpr -P Cups-PDF
生成文本文件而不是 pdf 文件。当我打印http://localhost:631/printers/Cups-PDF?which_jobs=all在 FireFox 中打开页面,然后它工作正常,在 /var/spool/cups 文件夹中生成一个文件,如果我将其扩展名设置为 pdf,则它打开几乎可以正常。当我在 Windows 上使用 Acrobat Reader 打开它时,它显示错误:字体“DSXFCQ+ NimbusSansL”包含错误的 /BBox。
我究竟做错了什么?我还检查了文件的安全权限,它们看起来没问题。我尝试过的所有打印命令都是使用 root 运行的。
谢谢
只是更新:我检查了消息,我仍然得到这个:
Jan 8 18:17:58 computer setroubleshoot: failed to retrieve rpm info for /usr/lib/cups/backend/cups-pdf
Jan 8 18:17:58 computer setroubleshoot: SELinux is preventing /usr/lib/cups/backend/cups-pdf from remove_name access on the directory cups2pdf-3920. For complete SELinux messages. run sealert -l 497551b3-64a7-466e-8f91-1b8b3dff4884
Jan 8 18:17:58 computer python: SELinux is preventing /usr/lib/cups/backend/cups-pdf from remove_name access on the directory cups2pdf-3920.
***** Plugin catchall (100. confidence) suggests **************************
If you believe that cups-pdf should be allowed remove_name access on the cups2pdf-3920 directory by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep cups-pdf /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
另一个更新:在我遵循最后一条日志消息的建议后,它开始正常工作。
答案1
该问题似乎与 SELinux 有关。根据我的消息中的第二次更新授予remove_name访问权限后,它开始工作。
如果其他人需要它,这里是我用来为 cups-pdf 配置 SELinux 的 te 文件。它是基于一产品页面外的链接:http://cups-pdf.de/documentation.shtml。
module cups_pdf 3.0beta2;
require {
class dir { add_name create getattr remove_name search setattr write };
class file { create getattr read setattr unlink write open};
type cupsd_t;
type home_root_t;
type user_home_dir_t;
type user_home_t;
type print_spool_t;
type unconfined_home_dir_t;
type unconfined_home_t;
type var_spool_t;
}
allow cupsd_t home_root_t:dir { getattr search };
allow cupsd_t user_home_dir_t:dir { getattr search };
allow cupsd_t user_home_t:dir { add_name create getattr remove_name search setattr write };
allow cupsd_t user_home_t:file { create getattr open read setattr unlink write };
allow cupsd_t unconfined_home_dir_t:dir { getattr search };
allow cupsd_t unconfined_home_t:dir { add_name create getattr remove_name search setattr write };
allow cupsd_t unconfined_home_t:file { create getattr open read setattr unlink write };
allow cupsd_t var_spool_t:dir { add_name create getattr remove_name search setattr write };
allow cupsd_t var_spool_t:file { create getattr open read setattr unlink write };