昨天研究了一下关于在Linux下实现打印操作的相关内容,整理记录如下:

1.什么是CUPS

CUPS(Common UNIX Printing System,即通用Unix打印系统)是FedoraCore3中支持的打印系统,它主要是使用IPP(Internet PrintingProtocol)来管理打印工作及队列,但同时也支持”LPD”(Line Printer Daemon)和”SMB”(ServerMessage Block)以及Socket等通信协议。

在Unix/Linux发展之初,打印总是会受到各种各样的限制,最初的打印都是用LPD(命令行方式的打印守护程序)来实现的,它不支持IPP(Internet打印协议),而且也不支持同时使用多个打印设备。而CUPS的出现,提供了一套完整的管理打印设备、实现可靠打印、网络打印的一套完整方案。此外,在Linux下进行CUPS驱动开发是遵循GPL协议规定的,也就是说必须开源。

CUPS实际上是一个集成的服务。包括了前端接收打印命令的相关程序,后端控制打印机硬件的程序,中间则是打印驱动。首先来看看CUPS驱动打印机的方式。当CUPS接受到打印命令时,首先会进行一个格式的预转换,比如将.jpg等各种文件先转换成PostScript格式,然后进一步将PostScript格式转换成 CUPS内部格式,这个称为PostScript到PostScript转换,这两种格式还是有区别的,网上能找到更为详细的说明文件,这里我们不去深究它。

但需要知道的是一般的打印机并不能直接只是PostScript格式的信息,所以在使用过程中我们还需要安装一类解释性的驱动,让CUPS能通过这类驱动将信息转换成一般打印机能识别的信息,现在使用的最多的这类驱动名叫GhostScript。有了这个驱动还不够,我们还需要foomatic来连接CUPS和GhostScript,它是一个脚本程序(用perl写的),用来打包各种不同格式的打印机命令,有了这些基础我们就可以开始安装和配置整套的CUPS打印系统了。

2.CUPS的安装及打印机的配置

首先我们要对CUPS进行安装,这里以Ubuntu为例:

sudo aptitude install cupsys cupsys-client

这里使用aptitude是因为在ubuntu中,aptitude比apt-get在处理包依赖上面更有优势,比如在实现remove操作的时候,使用aptitude能够提供多套解除包依赖的方案供操作者选择。

然后安装GhostScript和foomatic:

 sudo aptitude install ghostscript

    sudo aptitude install foomatic

其他系统的用户也可以访问官网链接地址下载对应的源码包自行编译安装。对于ghostscript一般来说可以支持大多数的打印机了,如果有特殊的打印机不能够支持,可以到链接地址下载更多的驱动程序。

这样安装部分就已经完成了,接下来进行配置:

首先在浏览器输入localhost:631,从本地631端口进入打印机配置系统。

cups的配置文件位置为/etc/cups/cupsd.conf 打开可以在里面进行一些设置,比如更改侦听端口或添加新的端口等:

Listen localhost:631

#本地监听地址

Listen /var/run/cups/cups.sock

#默认的监听端口

Listen 192.168.1.3:631

#自行添加的监听端口

配置文件里也可以对打印机网络状态及安全性管理进行设置,这里不再详述。配置好这些内容之后就可以添加打印机了,我们进入本地web管理页面,点击Administation,在里面找到add printer,按照提示选择机器型号、链接端口类型等。

只是在设置Name的时候要注意,这个名字会影响到命令行操作,所以尽量简短好记吧。一切选择妥当之后可以点击打印测试页看设置是否成功。

3.CUPS打印指令简介

    详细的指令集可以参照官网帮助文档链接地址,或者使用linux里的man指令,这里只记录一些常用的。

lp filename: 最常用的,调用默认打印机和默认配置对文件进行打印

lpstat -p -d:输出当前各个打印机的工作状态,并且显示目前的默认打印机是哪个

lpoptions  -d printername:更改默认打印机为指定打印机

cancel job-id/-a:CUPS打印系统会对每一个打印任务进行编号,使用cancel指令可以中止某一个任务,或者接-a终止全部

lpmove job-id destination-printer:将某个任务移动到另外一台打印机

lp -o [...]  打印方式设置,方框里面可接的内容非常丰富:

lp -o media=Letter filename: US Letter (8.5×11 inches, or 216x279mm)

lp -o media=Legal filename:US Legal (8.5×14 inches, or 216x356mm)

全部模板及尺寸如下:

  • Letter- US Letter (8.5×11 inches, or 216x279mm)
  • Legal- US Legal (8.5×14 inches, or 216x356mm)
  • A4- ISO A4 (8.27×11.69 inches, or 210x297mm)
  • COM10- US #10 Envelope (9.5×4.125 inches, or
    241x105mm)
  • DL- ISO DL Envelope (8.66×4.33 inches, or 220x110mm)
  • Transparency- Transparency media type or source
  • Upper- Upper paper tray
  • Lower- Lower paper tray
  • MultiPurpose- Multi-purpose paper tray
  • LargeCapacity- Large capacity paper tray

也可以自定义尺寸,比如想输出照片6寸(15.2cmx10.2cm) 只需要输入指令lp -o media=Custom.15.2×10.2cm filename即可

lp -o landscape filename :打印成横版

lp -o orientation-requested=N:设置旋转方向,其中:

  • -o orientation-requested=3- 不旋转
  • -o orientation-requested=4- 顺时针旋转90°
  • -o orientation-requested=5- 逆时针旋转90°
  • -o orientation-requested=6- 旋转180°

lp -o sides=two-sided-short-edge filename :打印双面横版

lp -o sides=two-sided-long-edge filename:打印双面竖版

其中默认输出是单面,即one-sided

lp -o page-set=odd filename :只打印奇数页

lp -o page-set=even filename :只打印偶数页

其中默认是打印到所有页上

这里只记录的常用的指令,其他的指令可以自行查阅网站说明

Linux下通用打印系统CUPS使用教程的更多相关文章

  1. 不错的linux下通用的java程序启动脚本

    不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...

  2. [转载]linux下如何查看系统和内核版本

    原文地址:linux下如何查看系统和内核版本作者:vleage 1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version Linux version 2 ...

  3. Windows和Linux下通用的线程接口

    对于多线程开发,Linux下有pthread线程库,使用起来比较方便,而Windows没有,对于涉及到多线程的跨平台代码开发,会带来不便.这里参考网络上的一些文章,整理了在Windows和Linux下 ...

  4. 不错的linux下通用的java程序启动脚本(转载)

    转自:http://www.cnblogs.com/langtianya/p/4164151.html 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包 ...

  5. 【转】不错的linux下通用的java程序启动脚本

    虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用 ...

  6. linux 下如何查看和踢除正在登陆的其它用户 ==>Linux下用于查看系统当前登录用户信息的4种方法

    在linux系统中用pkill命令踢出在线登录用户 由于linux服务器允许多用户登录,公司很多人知道密码,工作造成一定的障碍 所以需要有时踢出指定的用户 1/#who   查出当前有那些终端登录(用 ...

  7. Linux下禅道系统的搭建

    说明: 禅道系统的搭建,分两大部分 1.xampp环境的搭建 2.禅道系统的搭建 *********************************************************** ...

  8. linux下printf打印带颜色的字符串

    转载:http://blog.chinaunix.net/uid-28917424-id-3889917.html 前不久就在某位同学的博客里看到,但是今天找了好久没找到,就直接google了,现贴出 ...

  9. linux 下ftp的安装配置 图文教程

    0.安装ftp的前置条件是关掉SElinux # vi /etc/selinux/config 修改 SELINUX=” disabled ” ,重启服务器.若相同,则跳过此步骤. 1. 可先查看是否 ...

随机推荐

  1. 部署maven的一些要点、遇到的问题和心得体会

    maven的部署.遇到的问题和心得体会 2013-10-24 | 阅:  转:  |  分享         部署maven的一些要点.遇到的问题和心得体会 (图片看不了,可以下载doc文件) 一.  ...

  2. HTML5 本地文件操作之FileSystemAPI实例(三)

    文件夹操作demo 1.读取根目录文件夹内容 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFi ...

  3. chain33 区块链开发框架诞生记

    chain33 诞生记 很多年没有写博客了,应该说,自从2013年开始玩比特币,就没有写过了.这5年来,做了很多事情,也见了很多以前做梦都没有想到过都事情.我做的最开心的事情,也是觉得最有意义的事情, ...

  4. MFC/Windows API 使用过的函数(持续更新)

    /*******************使用默认画笔对象**************************** // //绘制矩形 pDC->MoveTo(50, 50); //返回值是一个指 ...

  5. multiMap遍历方法

    /* multimap中的三种遍历方法 multimap中如果没有查找到相应元素,则返回的迭代器是依据该元素的排列顺序该键应该插入的位置 如果找不到,则方法一和方法二返回的两个迭代器应该相等 */ # ...

  6. linux下获取硬盘使用情况[总结]

    1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场景,我们需要在写日志过程中判断硬盘空间 ...

  7. MySQL数据库localhost的root用户登陆遭遇失败

    问题:Access denied for user 'root'@'localhost' (using password: YES)打开MySQL目录下的my.ini文件(Linux的话是/etc/m ...

  8. java实现文件的断点续传的下载

    java的断点续传是基于之前java文件下载基础上的功能拓展 首先设置一个以线程ID为名的下载进度文件, 每一次下载的进度会保存在这个文件中,下一次下载的时候,会根据进度文件里面的内容来判断下载的进度 ...

  9. GPUImage API 文档之GPUImagePicture类

    GPUImagePicture类静态图像处理操作,它可以是需要处理的静态图像,也可以是一张作为纹理使用的图片,调用向它发送processImage消息,进行图像滤镜处理. 方法 - (id)initW ...

  10. ImportError DLL load failed: %1 不是有效的 Win32 应用程序

    操作系统:win7 64位,安装mysqldb 后提示:ImportError DLL load failed: %1 不是有效的 Win32 应用程序,是由于安装的32位的 MySQL-Python ...