Failed to Open PDD File

【相关环境】:linux 4.18.8-1-ARCH,cups 2.2.6-1

【问题描述】:今日使用打印机,发现打印机并没有任何相应。打开打印机管理界面,显示“rendering finished“,但是在打印状态中显示”Failed to open PPD file:….“。

【相关操作】:在前几天为了给/腾地方,尝试把32G的swap缩小到8G,swap和/在同一个磁盘上,磁盘是120G渣士顿SSD。当时做法:1)从U盘启动(U盘中是Archlinux),挂载/,再挂载另一个分区(在其他的磁盘上)作为备份之用;2)将/中的内容全部复制到备份分区;3)卸载/;4)使用gdisk删除原来的swap和/,再创建合适大小的swap和/;5)创建swap和/文件系统;6)挂载/,并恢复;7)重启,正常使用。

【问题分析】:ppd文件是由lp使用的,至少需要lp有r权限。而默认情况下,ppd文件的权限是rw-r—–(为了安全起见,这个权限是必须的)。为了能让lp读ppd文件,则需要将ppd文件的组修改为lp(而非将ppd文件的权限修改为rw-r–r–)。在最初检查ppd文件的时候,发现ppd文件的组是root而非lp,这就造成了lp没有权限读ppd文件。而造成这种问题的原因可能就是在备份恢复根目录文件的时候cp修改了部分权限(但是问什么会这样仍然不清楚)。

【解决方案】:修改ppd权限为rw-r—–,修改owner为root,grp为lp。

在linux 上建立php服务器

最近闲的折腾,打算搞搞私有云。于是打算从自己的小站开始折腾,正好最近也有JavaWeb课程的课程设计。所以也就一并折腾了。但是这篇文章是在三级项目结题之后完成的。

首先说明一下我的平台:Archlinux 4.11.3-1-Arch,算是比较新的。

搭建网页服务器的总体构想是,利用nginx(可以读作engine x)作为网关,然后转发到php-fpm上,实现php网站服务器。下面是Nginx介绍

Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。
起初是供俄国大型的门户网站及搜索引擎Rambler(俄语:Рамблер)使用。此软件BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。

在php端,用php-fpm来完成。关于php-fpm的简介如下:

FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。

它的功能包括:

支持平滑停止/启动的高级进程管理功能;

可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置);

stdout 和 stderr 日志记录;

在发生意外情况的时候能够重新启动并缓存被破坏的 opcode;

文件上传优化支持;

“慢日志” – 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢;

fastcgi_finish_request() – 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等);

动态/静态子进程产生;

基本 SAPI 运行状态信息(类似Apache的 mod_status);

基于 php.ini 的配置文件。

在Archlinux上面安装以上两个软件是很简单的

$ sudo pacman -S nginx fcgi php-fpm

安装完毕之后就可以对他们两个进行配置了。首先配置nginx,默认的配置文件位于/etc/nginx目录下,名为“nginx.conf“。打开之,首先找到 user html,取消注释,并将html改为http

user http;

实际上上面这一步并不是必须的,然而处于强迫症和优雅综合征,我还是改了。然后可以设置一下worker_process和worker_cpu_affinity,这两个都设置为auto即可。如果你想方便debug,可以开启日志,然后选择你的日志地点即可。

最重要的一步是配置我们的服务器以及网页的根目录,我们找到http字段,确保这个字段中有如下内容:

include mime.types;

default_type application/octet-stream;

sendfile on;

tcp_nopush on;

至于log和keepalive_timeout两个选项,如果有需要,请自行打开即可。

然后是这里面的server字段,listen表示侦听端口,默认的话我们使用80端口,然后是servername,这个我们使用localhost,注意在这里我们需要加入root字段,也就是我们网页的根目录假设我们的目录为/srv/http,那么我们需要在server字段中添加

root /srv/http/;

由于我们需要建立php服务器,所以我们在下面找到

location ~ \.php$ {

这个字段表示php配置,由于我们已经配置了root,在同一个server中,里面所有的location都会

继承我们配置的root,所以这里就不要在配置root,将其注释掉即可。但是我们需要添加fastcgi_pass字段:

fastcgi_pass unix:/run/php-fpm/php-fpm/sock;

fastcgi_index <你的index文件>

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

include fastcgi.conf;

保存退出即可。

解释一下上面的内容,首先我们在nginx.conf中配置了nginx的基本工作方式,worker以及log等,然后在http字段中配置了我们的服务器(如果有多个Server字段,也就意味着多个服务器,用这种方式我们可以实现虚拟主机,在tomcat中的host的作用和这里的Server差不多),在服务器字段中我们配置了我们的根目录,也可以在这里配置错误页面。然后最后我们在这里面配置了我们的php信息,添加了fastcgi的配置,使fastcgi能够找到php-fpm,并利用其完成php页面的解析。


然后说说php的配置,php的默认配置文件在/etc/php目录中,配置文件为php.ini

我们需要做的仅仅是找到open_basedir,然后在后面添加上我们的网站根目录即可。


最后保存退出,为了能够验证效果,我们可以在我们的根目录创建一个index.php的测试页面,这个页面中我们输出phpinfo

<?php phpinfo(); ?>

然后先后启动php-fpm和nginx

sudo systemctl enable php-fpm nginx

sudo systemctl start php-fpm nginx

然后通过浏览器进入我们刚刚产生的那个页面,就可以看到效果了