第二十一章、系统配置工具(网络与打印机)与硬件侦测
最近升级日期:2009/09/15
除了手动配置之外,其实系统提供了一个名为 setup 的命令给系统管理员使用喔!这个命令还能够配置网络呢。 此外,我们也应该要知道如何在 Linux 底下连接打印机吧!否则一些数据怎么印出来? 另外,如果你的主板支持 CPU 温度侦测的话,我们还能够利用 lm_sensors 这个软件功能来侦测硬件的电压、风扇转速、 CPU 温度等资讯呢!


大标题的图示CentOS 系统配置工具: setup

系统配置除了使用手动的方式编辑配置档之外 (例如 /etc/inittab, /etc/fstab 等),其实在 Red Hat 系统的 RHEL, CentOS 及 Fedora 还有提供一支综合程序来管理的,那就是 setup 这个命令的功能罗!老实说, setup 其实只有在 Red Hat 的系列才有, 在其他的 Linux distributions 并不存在,因此,鸟哥并没有很要求一定要学会这家伙的。 只不过,setup 还是挺好用的,所以我们还是来玩玩吧!

这个 setup 的处理方法非常的简单,就是利用 root 的身份下达这个命令,如果你已经使用远程操作系统的话, 记得最好切换一下语系成为英文语系 (比较不会出现边框是乱码的情况) ,结果就会出现如下的画面了。

setup 的命令运行画面示意图
图1.0、 setup 的命令运行画面示意图

如上图所示,那就是 setup 提供的各项系统配置功能。这个画面的使用方式其实在图中的最底下一行有说明了, 可以利用 [tab] 按键在三个画面中切换,使用 Run Tool 可以开始配置该项目,使用 Quit 可以离开 setup 命令。 那么上面的主菜单部分有哪些功能呢?这些配置的基本功能是这样的:

底下我们就来约略的介绍一下这些玩意儿吧!除了网络 IP 的配置外,其余的部分鸟哥会很快的带过去而已。 毕竟 setup 仅是一个统整的工具,每个配置项目其实都牵涉到各自的基础功能,那些基础功能还得要持续摸索的...


小标题的图示使用者身份验证配置

在按下了『 Authentication configuration 』项目后,会出现如下画面:

Setup 命令的使用者身份认证机制
图 1.1.1、Setup 命令的使用者身份认证机制

我们的 Linux 除了使用自己提供的使用者口令验证机制之外,还能够使用其他外部身份验证服务器所提供的各项验证功能喔。 在上面图示的左侧 User Information 的地方指的是:我们系统上的使用者可以使用什么方式对外取得帐号资讯, 也就是说,这部主机除了 /etc/passwd 的帐号之外,还能够使用其他的帐号来登陆系统的。我们支持的帐号管理服务器主要有 LDAP, NIS, Winbind 等。

至於右侧的 Authentication 则是登陆时需要提供的身份验证码 (口令) 所使用的机制为何。 在默认的情况下,我们身份验证仅参考本机的 /etc/passwd, /etc/shadow 而已,而且使用 MD5 的口令验算机制, 因此上图右侧的部分仅会有最上方两个而已。事实上,这个部分的配置主要是修改了 /etc/sysconfig/authconfig ,同时还加入了各个服务器的用户端程序配置功能哩。

你一定会问,那么什么时候可以用到这个机制呢?思考一下,如果你的网络环境是计算机教室, 你希望每个同学都能够有自己的帐号来登陆每部主机。此时,你会希望每部主机都帮同学创建同一个帐号吗? 那如果每一个同学都想要修改口令,那就糟了!因为每部主机都得要重新修改口令才行啊!这个时候帐号管理服务器就很重要了。 他的功能有点像底下这样:

身份管理服务器的功能示意图
图 1.1.2、身份管理服务器的功能示意图

如上图所示,我 vbird 想要登陆某一部主机时,这部主机会向外要求帐号资讯,就是最上方那部服务器。 此时,你只要在最上方的服务器上将该帐号配置好,并且在每部主机都利用 NIS 或 LDAP 功能来指定身份查询的方向, 那么 vbird 就能够使用同一组帐号口令来登陆每部主机了,这样管理是否很方便呢?因为只要管理一部服务器即可嘛! 我们在服务器篇谈到 NIS 时再来实作这个环境喔!

Tips:
其实 NIS 与 LDAP 等等的,都是一种网络通讯协议,我们可以透过网络通讯协议来进行数据的传输。 使用者帐号资讯当然也能够透过这个机制来管理罗!有兴趣的朋友请继续阅读鸟哥写的服务器篇罗~ ^_^
鸟哥的图示

小标题的图示网络配置项目(手动配置IP与自动取得)

网络其实是又可爱又麻烦的玩意儿,如果你是网络管理员,那么你必须要了解区域网络内的 IP, gateway, netmask 等参数,如果还想要连上 Internet ,那么就得要理解 DNS 代表的意义为何。如果你的单位想要拥有自己的域名, 那么架设 DNS 服务器则是不可或缺的。总之,要配置网络服务器之前,你得要先理解网络基础就是了! 没有人愿意自己的服务器老是被攻击或者是网络问题层出不穷吧!^_^

但鸟哥这里的网络介绍仅止於当你是一部单机的 Linux 用户端,而非服务器!所以你的各项网络参数只要找到网络管理员, 或者是找到你的 ISP (Internet Service Provider) ,向他询问网络参数的取得方式以及实际的网络参数即可。 通常网络参数的取得方式在台湾常见的有底下这几种:

  1. 手动配置固定 IP

    常见於学术网络的服务器配置、公司行号内的特定座位等。这种方式你必须要取得底下的几个参数才能够让你的 Linux 上网的:

    • IP
    • 子网络遮罩(netmask)
    • 通讯闸(gateway)
    • DNS 主机的 IP (通常会有两个,若记不住的话,硬背 168.95.1.1 即可)

  2. 网络参数可自动取得

    常见於 IP 分享器后端的主机,或者是利用电视线路的缆线上网 (cable modem),或者是学校宿舍的网络环境等。 这种网络参数取得方式就被称为 dhcp ,你啥事都不需要知道,只要知道配置上网方式为 dhcp 即可。

  3. 透过 ADSL 宽带拨接

    不论你的 IP 是固定的还是每次拨接都不相同 (被称为浮动式 IP),只要是透过宽带调制解调器『拨接上网』的,就是使用这种方式。 拨接上网虽然还是使用网络卡连接到调制解调器上,不过,系统最终会产生一个替代调制解调器的网络介面 (ppp0) , 那个 ppp0 也是一个实体网络介面啦!

了解了网络参数的取得方法后,你还得要知道一下我们透过啥硬件连上 Internet 的呢?其实就是网络卡嘛。 目前的主流网卡为使用以太网络协议所开发出来的以太网卡 (Ethernet),因此我们 Linux 就称呼这种网络介面为 ethN (N 为数字)。 举例来说,鸟哥的这部测试机上面有一张以太网卡,因此鸟哥这部主机的网络介面就是 eth0 罗 (第一张为 0 号开始)。

好了,那就让我们透过 setup 来配置网络吧!按下『 Network Configuration 』会出现如下画面:

setup 的网络介面选择示意图
图 1.2.1 、 setup 的网络介面选择示意图

上图中那个 eth1.bak 是系统捉错的文件,因为这个程序会跑到 /etc/sysconfig/network-scripts/ 目录下找出档名为 ifcfg-ethN 的文件内容来显示的。因为鸟哥仅有一张网卡,因此那个 eth1 不要理会他!直接点选 eth0 之后就会产生如下的画面:

网络介面的各项网络参数配置示意图
图 1.2.2 、 网络介面的各项网络参数配置示意图

上图中那个 Name 与 Device 名称最好要相同,尽量不要修改他!这里的配置是这样的:

  1. 如果你是使用手动配置的话,『 Use DHCP 』一定不能勾选,然后将底下的 Static IP, Netmask, Default gateway IP 配置值填上去即可。这三个配置值请洽你的网络管理员喔。

  2. 如果你是使用 DHCP 的自动取得 IP 方式,勾选『 Use DHCP 』后,将后面的三个配置清空,这样就配置好网络参数了;

如果你是使用 ADSL 拨接的话,那么上面的配置项目就不适用了。 你得要使用 (1)adsl-setup 来进行配置,然后再以 (2)adsl-start 来启动 ADSL 拨接, 详细的方法我们会在服务器篇再来介绍的。上面谈的都是 IP 的取得方式,并没有谈到主机名称解析的部分 (DNS)。 只有手动配置者才需要进行 DNS IP 的配置,使用 dhcp 及 adsl-start 者都不需要进行底下的动作啦! 假设你的 DNS IP 为中华电信的 168.95.1.1 时,那就得这样配置:

[root@www ~]# vim /etc/resolv.conf
nameserver 168.95.1.1

重点是 nameserver 后面加上你的 DNS IP 即可!一切配置都妥当之后,你还得要进行一个任务,那就是重新启动网络看看罗! 重新启动网络的方法很简单,这样做即可:

[root@www ~]# /etc/init.d/network restart
Shutting down interface eth0:               [  OK  ]
Shutting down loopback interface:           [  OK  ]
Bringing up loopback interface:             [  OK  ]
Bringing up interface eth0:                 [  OK  ]

由於网络涉及的范围相当的广泛,还包括如何进行网络除错的工作等,鸟哥将这部份写在服务器篇了,所以这里不再多费唇舌。 假设你现在已经连上 Internet 了,那么防火墙的配置则不可不知啊!底下就来谈谈。


小标题的图示防火墙配置

防火墙的认识是非常困难的,因为你必须要有很强的网络基础概念才行。CentOS 提供的这个简单的配置其实有时候反而会让我们困扰不已。基本上,这里仅是介绍『你可以这样做』,但并不代表『你必须这样做』! 所以,有兴趣的还是得要再继续钻研网络技术喔! ^_^。好了,在按下 Firewall configuration 后,会出现如下画面:

setup 进入防火墙配置示意图
图 1.3.1 、 setup 进入防火墙配置示意图

上图中主要出现两个部分,一个是关於 SELinux 的部分,一个则是防火墙的部分。SELinux 我们在第十七章介绍过了,这里不再浪费篇幅。 请依据你的需求配置 Enforcing, Permissive 或 Disabled 吧!(当然最好还是务必要启动 SELinux 啦!)

防火墙的部分,由於我们安装时建议不要启动防火墙, 因此上图你会看到『 Disabled 』的部分被选择了。但是由於现在你的系统已经上网了 (假设已经上网了), 那么你务必要启动防火墙来管理网络才好。由於默认你的防火墙会开放远程主机对你的登陆连线, 因此最好使用 Customize (客户配置) 来改变配置比较好喔!按下『 Customize 』会出现如下图示:

客制化防火墙抵挡机制的示意图
图 1.3.2 、 客制化防火墙抵挡机制的示意图

这个地方不是三言两语讲的完的!包括信任装置,以及允许进入的服务器封包~很是麻烦。基本上,你只要这样想就好了:

  • Trusted Devices:这是信任装置, 如果你有两张网络卡,一张是 eth0 对内,一张是对外,假设是 eth1 ,那么如果你想要让 eth0 的进出封包都是为信任,那么这里就可以将 eth0 勾选。不过,要非常非常注意, 接到外部网域 (Internet) 的那张网络卡,千万不能勾选,否则大家就都能够透过那张网卡连到你的主机上! 在默认的情况中,这里都不要选择任何介面啦!

  • MASQUERADE Devices:这个是『封包伪装』的功能, 亦即是进行 IP 分享器的功能啦!如果你的 Linux 主机是作为类似 IP 分享器的功能, 那么对外那张网络卡就得要启动 MASQUERADE 才行!因为我们尚未谈到网络服务器,因此这里可千万不要随意选择。

  • Allow incoming:这里提到的就是各个服务的内部项目, 举例来说,你的 Linux 有提供 WWW 服务,又希望大家都能够来查阅, 那么这个时候就可以在 WWW 那个项目前面勾选啦!你要注意到的是,默认 Linux 都会开放 ssh 这个服务 (如上图), 记得先将他取消勾选喔!因为这个 ssh 现在很容易被攻击!所以不要开放人家使用这个服务连线到你的主机上。

基本上,这个动作仅是在创建 /etc/sysconfig/iptables 这个文件而已。 而这个文件默认是不存在的 (因为我们没有启动防火墙啊!) 。这里你先有个概念即可,因为,我们未来会介绍以 shell script 的方式创建属於您自己的防火墙系统,细节我们会在服务器篇慢慢作介绍的啊!

如果你已经有网络了,记得在这个项目的配置中,於图 1.3.1 选择防火墙为『 Enable 』的状态,按下『 Customize 』进入图 1.3.2 当中取消 ssh 的勾选,最后再回到 1.3.1 当中按下『 OK 』来启动 Linux 用户端的防火墙配置吧! 这样你的系统就具有最起码的防火墙功能罗! ^_^


小标题的图示键盘形式配置

某些情况底下你的键盘可能会发生一些对应错误的情况,举例来说,使用的键盘并非台湾常见的 104 按键导致很多英文对应不起来。 此时你可以使用 setup 来修改喔!按下『 Keyboard configuration 』会出现如下的画面:

键盘形式选择
图 1.4.1 、键盘形式选择

其实这个文件就仅会修改 /etc/sysconfig/keyboard 啦!很简单的配置项目。


小标题的图示系统服务的启动与否配置

我们在第十八章谈过系统服务的启动与关闭, 当时介绍过 ntsysv 吧?没错~这个 System services 的项目就是会呼叫出 ntsysv 这支程序来处理服务的配置啦!详细的配置请回第十八章参考吧!这里不再浪费篇幅罗! 因为....鸟哥实在太会碎碎念了,再加上图示,唔!好占篇幅~ @_@


小标题的图示系统时钟的时区配置

我们知道地球是圆的,所以想要看王建民在纽约投球都得要三更半夜才有办法看的到!这也就是说, 其实在同一个时间点全世界的时钟指的时间都不相同啊!我们的 Linux 是支持多国语系的国际化操作系统, 所以你可以将这部主机拿到任何地方且不需要修改系统时钟,因为系统会主动的依据你提供的时区来变化时间的。 当你将笔记本计算机带到美国纽约并且想要变更成为美国时间时,可以按下『 Timezone configuration 』的项目:

setup 的时区选择
图 1.6.1 、 setup 的时区选择

如上图所示,你在上半部画面中,可以使用键盘方向键来选择正确的位置,然后再用 [tab] 移动到 [OK] 即可! 时区的配置,其实就是找出与 /etc/sysconfig/clock 有关的配置项目而已。实际上,上面图示出现的咚咚,就与 /usr/share/zoneinfo/ 目录内的数据有关而已。


小标题的图示X 窗口介面解析度配置

X Window System 我们会在第二十四章再来详细说明,这里仅是告知一下, 如果你想要变更你的 X 窗口介面的解析度时,就可以使用这个项目了。不过要注意的是,这个项目的运行不可以使用类似 ssh 通讯协议连线后,在远程主机上运行这个配置项目。因为这个项目的运行会产生一个新的 X 终端机在 tty7 或 tty8 上头, 因此,你如果使用远程连线机制的话,会看不到画面的啦!理解乎?

在你点选了『 X configuration 』之后,就会出现如下的图样。其中以硬件及配置两个页面较常被变更。 先来瞧瞧图示吧:

setup 的 X 解析度配置
图 1.7.1 、 setup 的 X 解析度配置

如上所示,由於窗口解析度的范围与萤幕的支持有关,因此你必须要先处理萤幕的升级频率后才能够修改窗口解析度。 所以我们会先处理『硬件』部分,鸟哥的萤幕是旧式的 4:3 传统萤幕,所以选择 1024x768 ,如果你的萤幕是新型的宽萤幕, 那么请自行挑选适当的解析度吧。处理完毕后就能够开始配置窗口解析度了,如下所示:

setup 的 X 解析度配置
图 1.7.2 、 setup 的 X 解析度配置

如上图所示,此时会出现可调整的解析度啦!整理整理就能够显示出你想要的窗口解析度。 其实这些配置都是修改 /etc/X11/xorg.conf 这个配置档啦!等到了第二十四章时,我们再来详细的谈谈这玩意吧! 至於关於 X 方面的登录文件则在 /var/log/Xorg.0.log 罗!


鸟哥个人认为,这个 setup 的工具是很好用的~只是,如果能够完全清楚整个系统架构的话, 再来玩这个小程序会比较好啦! ^_^。另外,原本的旧版 CentOS 还有提供打印机的配置功能,不过由於新版的数据已经转由 CUPS 负责列印, 而列印可以使用浏览器介面来显示,因此就取消了这个 setup 的组件啦!底下我们就来玩玩如何简单的配置你的打印机吧!


大标题的图示利用 CUPS 配置 Linux 打印机

打印机对於日常生活来说,很重要吧!呵呵~没错啊!尤其我们的 Linux 主机如果未来还要作为 Printing server 的话,那么自然就得要先创建好打印机的连线啦!在本章里面我们仅谈论一下如何让你的 Linux 可以连接到打印机, 让你的 Linux 可以顺利的将文件数据列印出来啦!现在就来谈谈先!


小标题的图示Linux 的列印组件 (列印工作、伫列、服务与打印机)
  • 硬件支持度

要谈论 Linux 的列印,首先就得要知道 Linux 底下整个列印的行为是怎样的一个流程呢?而且, 也得要了解一下你的硬件是否支持列印工作嘛!在硬件部分,你必须要在 BIOS 将打印机的支持启动才行! 不过,这大概都属於旧式打印机才需要的动作啦!为啥呢?因为现在打印机大部分都是 U盘 或者是网络打印机了, 根本不需要使用 25 针序列埠的支持!

Tips:
为什么会谈到 25 针序列埠以及 BIOS 的支持呢?这是因为鸟哥曾经发生过一件糗事。 由於鸟哥常用旧型主机的关系,所以总喜欢先在 BIOS 里面将没用到的装置项目全部取消 (disable), 所以没有接打印机的情况下,当然连打印机的序列埠 (Parallel) 也关闭了。没想到后来为了测试打印机的连线取得一台旧式打印机, 要命啊!连续测试两天的时间却无法顺利的列印出正确的文件资讯!最后才想到可能是 BIOS 内部的问题。 进入 BIOS 将打印机支持启动成为 EPP/SPP 之后,俺的 Linux 就能够顺利的捉到打印机并进行列印~真想哭啊! 不是感动的想哭,是气的想哭!
鸟哥的图示

除了主机本身的支持之外,你的打印机也必须要能够支持 Linux 才行!其实并不是 Linux 的问题啦!而是打印机制造商必须要能够提供给 Linux 用的驱动程序,这样你的 Linux 才能够使用该型号的打印机。 老实说,鸟哥是 HP 打印机的爱好者,因为 HP 打印机对 Linux 的支持非常好!但是另一牌的 L 开头的打印机总是很慢或者不推出给 Linux 用的驱动程序,所以该牌的打印机很难安装在 Linux 主机上!真困扰。

Tips:
因为鸟哥过去所待的研究室大多购买 HP 的打印机,所以测试打印机时完全没有出现任何问题。 但是某天在家里使用鸟嫂购买的 L 牌的事务机时,连忙了三天却都无法连接到该打印机来顺利输出。 最终查询 Linux 打印机支持网站,才发现该型号的事务机根本没有推出给 Linux 用的驱动程序, 所以就无法顺利使用该打印机~最终...鸟哥就放弃该测试了~唉!真浪费时间!
鸟哥的图示

那到底你该如何确认你的打印机有支持 Linux 呢?或者是,如果你想要购买新的打印机时, 如何查询该打印机能否在 Linux 上面安装呢?很简单,直接到底下的网站去查询一下即可喔!

举例来说,鸟哥现在的研究室有一部 HP 的 LaserJet P2015dn 打印机,我想要知道这部打印机对 Linux 的支持度好不好, 那就先进入上述的网站连结,出现如下的画面:

打印机支持网站的主画面
图 2.1.1 、 打印机支持网站的主画面

在如上画面中请按下『 Printers 』来观察打印机的特色吧!会出现如下画面:

选择打印机示意图
图 2.1.2 、 选择打印机示意图

在上图中填入正确的厂牌 (HP) 以及正确的打印机型号 (LaserJet P2015dn) 后,请按下『 Show 』那个按钮, 该网站就会从数据库内捉出支持度的情况给你看,如下图所示:

鸟哥的打印机对 Linux 的支持度
图 2.1.3 、 鸟哥的打印机对 Linux 的支持度

在显示的画面中,你最要注意的是那个企鹅数量啦!如果达到 3 只,那就代表支持度是非常完美的。 两支企鹅是可接受的范围内。如果是小於一只企鹅时,那么该打印机对 Linux 的支持可能就是比较差的喔! 还好,鸟哥这部含有网络功能的打印机还有两只企鹅的支持,等一下应该能够顺利安装到俺的 Linux 测试机上吧!


  • 列印组件

你有没有发现,在打印机还没有启动电源的情况底下,其实我们还是可以透过软件来将某个工作列印出来的, 只是该项工作就会被放入到等待的环境中 (伫列) 。为什么会这样呢?这是因为整个列印的行为被区分为许多部分, 每个部分都可以单独存在的啦!我们将整个部分绘制成下图来瞧瞧:

列印行为之各组件示意图
图 2.1.4、 列印行为之各组件示意图

我们大概可以将上图区分为几个部分来说明:

  • 列印工作:

    例如 Open Office 这类较大型的办公室软件中,可以利用内建的程序产生列印的动作。 我们也可以使用类似 lpr 这类命令列程序来直接列印某个文件。列印软件产生的列印动作,就是产生一个列印的工作 (job), 这个列印工作就会进入排队等待 (伫列, queue) 的环境中,等待列印服务来进行输出。

  • 列印伫列:

    这是放置列印工作的重要项目!这个列印伫列与列印服务有关。一般来说,列印伫列会以打印机的名字来命名, 让大家知道你的列印工作将要使用哪部打印机输出之故。当列印工作放置到伫列后,就开始等待列印服务的取用与输出了。

  • 列印服务:

    就是实际负责沟通伫列内的列印工作与打印机的服务啦!列印服务其实就是将伫列内的列印工作,将她的数据转成打印机认识的格式后, 直接交给打印机来输出而已。但是列印服务必须要认识与沟通打印机,因此他就得要连上打印机与驱动打印机才行。 目前常见的列印服务有 CUPS 与 LPRng ,不过以 CUPS 为主流啦!

    一般我们说的打印机驱动程序,其实就是将列印工作的数据转成打印机格式啦! 而目前常见的打印机格式为使用 Postscript 的列印格式,Linux 默认的 CUPS 本身就支持这种列印格式,因此, 只要你购买的打印机有支持 postscript ,那么安装起来应该是很轻松的才是。我们在上面提到的打印机支持网站中, 里面的驱动程序很多就是 postscript 打印机描述文件 (Postscript Printer Description (注1))

    那万一没有 PPD 文件呢?没关系,我们可以透过打印机制作商提供的其他定义档 (例如 Ghostscript) 来解释列印工作的数据, 让打印机认识该格式后,就能够顺利列印了!这也就是说,其实打印机驱动程序就是将数据转成打印机认识的格式后, 就能够加以输出了。而常见的格式为 Postscript 及 Ghostscript 罗!

    那么这些列印的 PPD 驱动程序档放在哪里呢?其实就放在 /usr/share/cups/model/ 底下啦! CentOS 已经提供一些默认的驱动程序了,如果想要取得升级的 PPD 驱动程序档,请参考上面的打印机网站, 从那上头来下载即可呦!若想要直接下载全部的 PPD 文件,可以参考连结: http://www.linuxprinting.org/download/PPD/
Tips:
为什么需要列印伫列 (queue) 呢?因为打印机只能够给单一任务进行列印,没办法像 CPU 可以交错运行的! 所以列印工作就得要排队等待打印机的列印,而打印机得要将前一份工作列印完毕后才能够列印下一份工作! 否则如果是交错列印,那印出的东西不就混杂在一起了?这样说了解吗? ^_^
鸟哥的图示

小标题的图示CUPS 支持的连线模式

如果你的打印机具有网络卡,那么你当然可以使用网络连线到你的打印机上面罗!不过,这种打印机提供什么服务呢? 也就是说,你可以使用什么连线协议来连上打印机呢?常见的打印机连线分享方式有底下这些:

  • socket
    数据透过 internet socket(端口)来传送,一般为 port 9100 或 35。如果想要进行数据的传输与列印,可以透过在浏览器上面输入: socket://host-printer:9100/ 来进行。不过,这种模式不常用就是了。

  • LPD (Line Pritner Daemon)
    LPD 是较早之前的列印服务,刚刚上头提到的 LPRng 就是使用这种方式的连线啦! LPD 主要是利用序列埠来达成列印的需求,打印机名称就是 LPT1/LPT2... 等等。 目前还是可以在比较早期的 Linux distributions 看到这种列印方式。

  • IPP (Internet Printing Protocol)
    这是目前比较流行的打印机列印协议,我们的 CUPS 默认也是支持这种协议啊!当启动 IPP 时,打印机会启动 port 631 ,列印的数据就是透过这个 port 来进行传送的。另外,如果你的打印机或者 Linux 主机启动了 ipp 之后, 嘿嘿!你可以直接使用浏览器,输入: ipp://printer_IP/printername,或者是: http:/printer_IP:631 就能够直接线上处理打印机的配置了!方便的很啊!

  • SMB (Server Message Block)
    这家伙就是网络上的芳邻啦!协议使用的是: smb://user:password@host/printer 。

CentOS 5.x 默认提供的就是 CUPS 的 IPP 协议喔!而且 CUPS 默认启动就启动了, 因此,你可以随时随地的以 Web 介面配置自己的打印机呢!真是非常方便! 那如果你的打印机是透过线材 (U盘/序列埠) 连上主机的呢?那就得要考虑底下的连接介面罗!

  • parallel :平行序列埠啊,就是 25 针那种玩意儿!他是连接到 /dev/lp[0-2] 等装置。 在 CUPS 里面的装置使用格式为: parallel:/dev/lp0

  • U盘 :一般越来越常见的 U盘 打印机啊! CUPS 使用的格式为: usb:/dev/usb/lp0

小标题的图示以 Web 介面控管网络打印机

事实上,管理 Linux 的打印机是非常简单的一件事情,因为你只要启动 CUPS 之后,再以浏览器介面来管理即可。 不过,在默认的情况底下,要进行浏览器介面的管理动作时,你必须要:

  • 必须要启动 CUPS 这个服务 (/etc/init.d/cups start)
  • 具有 root 的权限 (需要 root 的口令来配置);
  • 默认仅能在本机 (localhost) 管理,无法使用远程连线连到此 Linux 管理;

如果你想要在区域网络内将打印机的控制权挪出来给其他用户管理时,就得要修改 CUPS 的配置了。 在这里,我们先以本机的方式来处理打印机的连线喔!首先,鸟哥以具有网络卡的打印机 HP LaserJet P2015dn 这部为例 (因为鸟哥也只有这部打印机具有网卡啊!),这部打印机的 IP 为 192.168.201.253,而鸟哥 Linux 测试机 IP 为 192.168.201.250。然后,你可以这样做:


  • 确认打印机存在且支持 CUPS 认识的相关协议

如果想要加入 CUPS 的网络打印机,那么你的打印机当然就得要支持 CUPS 认识的通讯协议罗!如何确定呢? 首先,你必须要依照你打印机所提供的手册去配置好 IP ,以鸟哥上面的环境来说,我的打印机 IP 为 192.168.201.253 , 因此我可以这样确定该打印机是否存在喔:

# 1. 先确定 IP 是否正确:
[root@www ~]# ping -c 3 192.168.201.253
PING 192.168.201.253 (192.168.201.253) 56(84) bytes of data.
64 bytes from 192.168.201.253: icmp_seq=1 ttl=255 time=0.464 ms
64 bytes from 192.168.201.253: icmp_seq=2 ttl=255 time=0.313 ms
64 bytes from 192.168.201.253: icmp_seq=3 ttl=255 time=0.356 ms

--- 192.168.201.253 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.313/0.377/0.464/0.067 ms
# 重点是有没有出现回应的时间参数,亦即是 time 那个栏位喔!

# 2. 使用 nmap 测试打印机有没有出现列印相关的服务端口:
[root@www ~]# nmap 192.168.201.253
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-05-27 22:07 CST
Interesting ports on 192.168.201.253:
Not shown: 1676 closed ports
PORT     STATE SERVICE
80/tcp   open  http
139/tcp  open  netbios-ssn
515/tcp  open  printer
9100/tcp open  jetdirect
MAC Address: 00:18:FE:9E:4C:58 (Unknown)

Nmap finished: 1 IP address (1 host up) scanned in 3.875 seconds
# 鸟哥这部打印机仅支持 LPD 服务 (515) 以及 HP 独家的服务 (9100)

这样就确定我的打印机实际存在,且这部打印机仅支持 HP 独家的网络服务 (port 9100) 以及旧版的 LPD 服务而已, 这个资讯很重要,因为等一下我们使用 CUPS 连线时,就得要使用这个 LPD 的服务喔!另外,请特别给他留意一下, 那个 nmap 是个可以扫瞄主机端口的软件 (port scan) ,这个软件其实是黑客软件,他默认并没有安装到 CentOS 上, 但是你可以使用『 yum install nmap 』来安装他。请注意,因为这个软件可以是恶意攻击的,因此千万不要用来查阅别人的主机,否则恐怕会有违法之虞喔!!

接下来,让我们来了解一下,系统有没有 CUPS 的支持吧!


  • 查询你 Linux 主机是否启动 CUPS 服务

再来查看看你的主机是否已经启动了 CUPS 呢?使用 netstat 这个命令看看:

[root@www ~]# netstat -tlunp | grep 631
tcp  0  0 127.0.0.1:631     0.0.0.0:*         LISTEN      4231/cupsd
udp  0  0 0.0.0.0:631       0.0.0.0:*                     4231/cupsd

确实有启动 631 端口以及 cupsd 的服务。接下来,我们可以直接连上 CUPS 了!请打开浏览器, 然后在网址列输入『 http://localhost:631 』即可!因为浏览器要连接的并非正规的 WWW 服务端口, 因此就得要加上冒号 (:) 来指定端口连接!顺利的话,应该可以出现如下画面:

CUPS 进站画面
图 2.3.1、 CUPS 进站画面

主画面主要可以分为上下两个按钮列来说明,其中又以下方的按钮列为常见的操作项目。我们会用到的按钮大概就是:

  • Add Printer:新增打印机,就是从这个按钮开始的!
  • Manage Jobs:列印工作管理,如果有列印工作要取消的,这个就对了!
  • Manage Printers:管理打印机,包括是否启动或者是删除打印机等。

不罗唆,赶紧来新增打印机看看!按下『 Add Printer 』项目吧:

CUPS 新增打印机的画面示意图
图 2.3.2、 CUPS 新增打印机的画面示意图

上面图示中,最重要的其实是那个『 Name 』的项目,那就是你打印机的伫列名称!未来所有列印的工作都是放在该名称底下排队的! 鸟哥的这个打印机名称比较复杂啦!你可以取个比较简单的名字,以后比较容易使用命令列软件来列印啦! 至於位置 (Location) 与描述 (Description) 都是这个打印机的说明,可写可不写!写完后按下『 continue 』吧!

选择打印机所提供的服务项目
图 2.3.3、选择打印机所提供的服务项目

接下来则是选择这个打印机伫列所连线的打印机提供什么服务的列印功能?你可以看到前一小节我们使用 nmap 的时候就发现 port 9100 就是 HP JetDirect ,因此我们可以选择上图的第一个项目。 由於这部打印机也提供 port 515 的 LPD 服务,因此你也可以选择上图的『 LPD/LPR Host or Printer 』项目。 不过,在这里鸟哥选择的是第一项啦!选择完毕后再按下『 Continue 』进入打印机的实体位置项目,如下图:

填写打印机的实际连线方式,要填正确!
图 2.3.4、填写打印机的实际连线方式,要填正确!

上图有提供很多范例,我们由於使用到 port 9100 ,因此使用的就是 socket:// 那个范例使用的状态。 填写正确的位置后,接下来按下『 Continue 』来继续选择打印机的型号吧!

选择打印机的实际型号(驱动程序确认)
图 2.3.5、选择打印机的实际型号(驱动程序确认)

如上图所示,我们选择的是 HP 的厂牌!厂牌选择完毕后会出现如下图的型号选择:

选择打印机的实际型号(驱动程序确认)
图 2.3.6、选择打印机的实际型号(驱动程序确认)

但上图中我们并没有看到 P2015dn 这部打印机的型号!那怎办?没关系,可以连线到 http://www.linuxfoundation.org/en/OpenPrinting 网站下载适当的驱动程序后, 按下上图中的『浏览』按钮来选择该文件即可。不过,从该网站的介绍中,可以发现鸟哥的这部打印机似乎使用默认的 Postscript 驱动程序即可,该网站也没有提供这部打印机的驱动程序啊!那怎办?没关系,在 /usr/share/cups/model/ 目录下就有默认的驱动程序啦!所以请按下『浏览』来处理一下!

选择驱动程序文件
图 2.3.7、选择驱动程序文件

如上图所示,选择正确的驱动程序,然后再按下『开启』按钮,最后按下『 Add Printer 』按钮就可以进入管理员口令输入画面:

输入管理员帐号口令(默认用 root)
图 2.3.8、输入管理员帐号口令(默认用 root)

到此为止我们的打印机配置就 OK 了!如果你回到 CUPS 的进站画面,并且点选 Printers 之后,就会出现如下的打印机画面:

打印机的控制画面
图 2.3.9、打印机的控制画面

上面画面中的按钮都看的懂吧?其中比较重要的是那个『 Set As Default 』项目, 那就是配置为『默认打印机』,当你产生列印工作后,该工作默认就会丢给这个 hp_lj_p2015dn 的伫列来处理的意思喔。 接下来,当然就是按下『 Print Test Page 』看看能否列印出正确的画面罗!如果可以顺利的列印,恭喜您! 打印机配置成功!


小标题的图示以 Web 介面控管 U盘 本机打印机

上一小节提到的是网络打印机,那如果你的打印机是一般普通的具有 U盘 介面的打印机呢? 由於打印机的装置档名为 /dev/usb/lp0 开始的名称,既然已经知道打印机名称了,那么我们先来注意看看 U盘 是否有捉到该打印机, 由於我们的 Linux 已经能够处理随插即用 (PnP) 的装置,因此直接运行 ls 去查阅档名是否存在即可:

[root@www ~]# ll /dev/usb/lp0
crw-rw---- 1 root lp 180, 0 Jun  1 22:32 /dev/usb/lp0
# 这个文件会被自动的创建起来,你不需要手动创建这个文件喔!

老实说,除非你的 U盘 打印机是非常冷门的机种,否则,我们的 CUPS 应该已经自动的捉到并且配置好该打印机罗! 以鸟哥为例,鸟哥办公室的事务机为 HP Diskjet F380 ,如果使用列出 U盘 装置的 lsusb 时,可以看到:

[root@www ~]# lsusb
Bus 001 Device 001: ID 03f0:5511 Hewlett-Packard Deskjet F300 series
Bus 002 Device 001: ID 0000:0000
Bus 002 Device 002: ID 0d62:a100 Darfon Electronics Corp. Benq Mouse

接下来,同样的我们使用 CUPS 的 Web 介面来配置一下这部打印机吧!在网址列输入 http://localhost:631 之后再按下『Manage Printers』会出现如下画面:

由 HAL 机制顺利取得的 U盘 打印机
图 2.4.1 、由 HAL 机制顺利取得的 U盘 打印机

由上图我们可以发现 CUPS 已经捉到了打印机了!连驱动程序都安装妥当!这是怎么回事啊? 这是因为 CentOS 提供了 HAL 的机制来处理 PnP 装置的缘故。关於 HAL 的机制我们会在下一小节再来讨论。 不过由於这个装置使用的是 HAL 提供的装置档名,我们如果想要使用 /dev/usb/lp0 来作为打印机的输出档名的话, 那么就自己来创建一个打印机的伫列吧!同样的在 CUPS 画面中按下『 Add Printer 』来新增一个打印机:

 输入伫列名称
图 2.4.2 、 输入伫列名称

指向第一个 U盘 装置处
图 2.4.3 、指向第一个 U盘 装置处

如上图所示,你要指定的是那个有 #1 的位置,那就是我们的第一个 U盘 插槽位置喔!

选择打印机的驱动程序
图 2.4.4 、选择打印机的驱动程序

最终结果
图 2.4.5 、最终结果

如上图所示,最后就会多出一个名为 deskjet_f380 的打印机名称,接下来当然就是『 Print Test Page 』测试看看能否列印罗。 如果能够列印得出来,那就是配置妥当了。所以说, U盘 打印机的配置要简单太多罗! ^_^


小标题的图示将 Linux 本机打印机开放成为网络打印机

想像一个状况,你仅有 U盘 打印机安装在 Linux 上头,整个办公室或实验室里面仅有这部打印机。 虽然你可以加装列印服务器来使 U盘 打印机变成网络打印机,但总是得多花钱啊! 有没有办法可以让你的本机打印机变成网络打印机呢?有的,那就是修改 CUPS 的配置即可。如何修改呢? 我们还是透过 CUSP 的浏览器介面来处理即可喔!选择『Administration』会出现如下画面(在画面的最右边):

勾选可让 CUPS 成为列印服务器的功能
图 2.5.1 、勾选可让 CUPS 成为列印服务器的功能

如上图所示,在箭头指定的地方进行勾选即可。勾选完毕后按下『 Change Settings 』就能够让你的 CUPS 变成列印服务器! 而你原本的打印机就会成为:『ipp://你的IP:631/printers/打印机伫列名称』,举例来说,鸟哥这部 Laserjet p2015dn 在网络上看到的就会是:『ipp://192.168.201.250/printers/hp_lj_p2015dn』的名称啊! 你可以在其他用户端计算机上面以这个 URI 来进行连线哩!


小标题的图示手动配置打印机

事实上我们刚刚在上面所进行的各项动作大多是在修改 /etc/cups/ 里面的几个文件而已啊!几个重要的文件为:

  • /etc/cups/printers.conf:打印机的配置值,都写在这个文件中;
  • /etc/cups/cupsd.conf:CUPS 的主要配置档,包括做为服务器之用途的配置。
  • /etc/cups/ppd/*.ppd:就是各个打印机的驱动程序 (PPD 配置档);

既然只是改了这几个配置档,你当然也可以使用 vim 去编辑,不过,因为涉及硬件连线的问题, 因此还是建议使用 web 介面来进行修改啦。不过,某些时候如果你没有浏览器介面时,那么使用终端机介面的命令来修改也是可以的。 我们底下只以鸟哥办公室拥有的这一部 HP P2015dn 的雷射打印机来作为范例喔!


  • 1. 下载合适的 PPD 驱动程序定义档

首先你必须要前往打印机网站下载你的打印机驱动程序定义档。鸟哥之前已经查询过,这部打印机使用默认的 PPD 文件即可。 所以鸟哥这部打印机的驱动程序定义档基本上在: /usr/share/cups/model/postscript.ppd.gz 。 如果你有自己下载自己打印机的驱动程序时,请将你下载的文件放置到 /usr/share/cups/model/ 目录下, 因为后续要操作的命令会到此目录中找寻驱动程序定义档喔!


  • 2. 启动 CUPS 以及打印机

接下来请确定你的 CUPS 是有启动的,而且打印机也已经打开电源了。启动 CUPS 的方法与检查是否启动 CUPS 的操作如下:

# 1. 重新启动 CUPS 的方法!
[root@www ~]# /etc/init.d/cups restart
正在停止 cups:                  [  确定  ]
正在启动 cups:                  [  确定  ]

[root@www ~]# netstat -tlunp | grep 631
tcp   0  0 0.0.0.0:631       0.0.0.0:*      LISTEN      4939/cupsd
tcp   0  0 :::631            :::*           LISTEN      4939/cupsd
udp   0  0 0.0.0.0:631       0.0.0.0:*                  4939/cupsd
# 因为 CUPS 启动的网络服务端口就是 port 631 !所以确定是启动的!

# 2. 确认打印机提供的服务为何
[root@www ~]# nmap 192.168.201.253
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-06-03 00:43 CST
Interesting ports on 192.168.201.253:
Not shown: 1676 closed ports
PORT     STATE SERVICE
80/tcp   open  http
139/tcp  open  netbios-ssn
515/tcp  open  printer
9100/tcp open  jetdirect
# 再次强调,鸟哥这部打印机仅有提供 HP 自家的打印机协议 9100 端口!

从上面的输出可以很清楚的看到鸟哥的打印机与 Linux 上面的 CUPS 都有顺利的运行中!其中还是要强调, 你千万不要拿 nmap 去扫瞄别人家的系统!很可怕的!而由於上面输出的结果,我们也知道鸟哥这部打印机在网络上的连线方式为: socket://192.168.201.253:9100 的样式喔!这个地方也请先记录下来。


  • 3. 使用 lpadmin 进行打印机的创建与删除

命令配置/删除打印机的方式就是透过 lpadmin 这个命令啊!这个命令的语法是这样的:

[root@www ~]# lpadmin [-p 自订伫列名] [-v URI] [-m PPD] [-E] <==创建打印机
[root@www ~]# lpadmin [-d 已存在的伫列名]  <==配置成为默认打印机
[root@www ~]# lpadmin [-x 已存在的伫列名]  <==删除此一打印机伫列
选项与参数:
-p :后面接的就是打印机的伫列名称,这个名称可自订,但还是定为有意义较佳。
-v :后面接的就是装置的相关位置,常见的装置有:
     序列埠      : parallel:/dev/lp0
     U盘         : usb:/dev/usb/lp0
     网络打印机  : ipp://192.168.201.253/
     提供特殊插槽: socket://192.168.201.253:9100
-m :后面接的通常就是 PPD 的定义档,注意,要放置到 /usr/share/cups/model/ 底下!
-E :作为可接受 (accept) 此列印工作之意!

# 1. 先列出本机上面所有已经存在的打印机吧!
[root@www ~]# lpstat -a
Deskjet_F300_series accepting requests since Tue Jun  2 00:48:59 2009
deskjet_f380 accepting requests since Mon Jun  1 23:34:21 2009
hp_lj_p2015dn accepting requests since Tue Jun  2 00:22:31 2009

# 2. 删除所有已经存在的打印机吧!
[root@www ~]# lpadmin -x Deskjet_F300_series
[root@www ~]# lpadmin -x deskjet_f380
[root@www ~]# lpadmin -x hp_lj_p2015dn
[root@www ~]# lpstat -a
lpstat: No destinations added.
# 这样就确定没有任何存在的打印机罗!

# 3. 加入 hp_p2015 打印机,打印机参数如前面两小节所示:
[root@www ~]# lpadmin -p hp_p2015 -v socket://192.168.201.253:9100 \
> -m postscript.ppd.gz -E

# 4. 因为仅有一部打印机,因此让此打印机成为默认列印打印机
[root@www ~]# lpadmin -d hp_p2015

其实这个 lpadmin 命令只是在升级 /etc/cups/ 目录里面的两个数据而已, 一个是 /etc/cups/printers.conf ,这个文件主要是规范了打印机的相关装置、是否接受列印工作、 打印机的伫列名称、页面的限制等等,反正就是整个打印机的规范就是了。 至於这个打印机相关的 PPD 文件则是以打印机的伫列名称连结到 /etc/cups/ppd/ 目录下。 不相信吗?让我们来瞧瞧 printers.conf 的文件内容吧!

[root@www ~]# cat /etc/cups/printers.conf
# Printer configuration file for CUPS v1.2.4
# Written by cupsd on 2009-06-03 01:06
<DefaultPrinter hp_p2015>                <==这就是打印机伫列名称
Info hp_p2015
DeviceURI socket://192.168.201.253:9100  <==就是打印机所在的装置位置
State Idle
StateTime 1243962326
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer
</Printer>

[root@www ~]# ll /etc/cups/ppd
-rw-r--r-- 1 root root 7714 Jun  3 01:05 hp_p2015.ppd
# 这就是刚刚捉过来的,给 hp_p2015 用的打印机定义档!


  • 4. 打印机状态的观察

配置完打印机后,来观察一下目前的打印机状态吧!底下的 lpstat 是个不错用的观察命令喔!

[root@www ~]# lpstat [-adprt]
选项与参数:
-a  :列出目前可以接受列印工作的打印机伫列名称;
-d  :列出目前系统的默认打印机 (未指定列印伫列时,默认输出的打印机);
-p  :列出每部打印机目前的工作状态,包含工作的 ID;
-r  :列出目前 CUPS 服务是否有在运行?
-t  :列出目前列印系统中更为详细的资讯说明,很适合查询喔!

# 1. 列出目前系统上面所有的打印机伫列与接受工作与否的情形
[root@www ~]# lpstat -a
hp_p2015 accepting requests since Wed Jun  3 01:05:26 2009
# 有一部名为 hp_p2015 的打印机,从 2009/6/3 开始接受列印工作之意!

# 2. 列出目前的『列印系统』状态,不止包括打印机而已。
[root@www ~]# lpstat -t
scheduler is running   <==CUPS 这个服务有在运行的意思
system default destination: hp_p2015  <==默认的打印机为这一部 hp_2015
device for hp_p2015: socket://192.168.201.253:9100 <==这部打印机的装置位址
hp_p2015 accepting requests since Wed Jun  3 01:05:26 2009
printer hp_p2015 is idle.  enabled since Wed Jun  3 01:05:26 2009
# 这部打印机目前是发呆 (Idle) 的状态,但可接受列印工作!

如果不清楚你的打印机状态,使用 lpstat 就能够看的清楚罗~接下来,让我们开始来使用列印命令产生列印工作吧!


  • 5. 利用 lpr 与 lp 来产生列印工作

如果你没有浏览器或者是说,你没有图形介面的软件时,可以透过 lpr 或者是 lp 这两个命令来列印某些文件或数据流重导向的东东。底下的测试会实际列印出数据来,因此,建议你可以先将打印机电源关闭, 让 CUPS 可以接受列印伫列的工作,却无法输出到打印机,这样也方便我们后续管理命令的查询! 所以,请将打印机的电源关闭先。来看看这两个命令如何操作吧!

[root@www ~]# lpr [-P printer伫列] [-#  列印份数] -U [username] file
选项与参数:
-P  :若没有默认打印机 (default) 或者想要由不同打印机输出时,可用 -P 指定打印机
-#  :如果这份文件你想要列印多个副本时,用这个 -# 加上份数就对了!
-U  :有些打印机有限制可使用的使用者帐号,此时就得要使用这个选项;

# 1. 指定 hp_p2015 这部打印机来列印 /etc/passwd 这个文件
[root@www ~]# lpr -P hp_p2015 /etc/passwd

# 2. 关闭打印机后,将 /root/ 底下的文件档名输出到这部打印机
[root@www ~]# ll /root | lpr -P hp_p2015

要注意的是,因为鸟哥有指定默认打印机,因此上面的范例中,即使没有加上 [-P hp_p2015] 这个项目时,依旧能够顺利的列印。但如果你没有指定默认打印机,那么就一定要加上这个项目, 否则 lpr 会不知到要将数据输出到哪里去喔!看完了 lpr ,再来聊聊 lp 这个命令的用法吧:

[root@www ~]# lp [-d printer伫列] [-n 列印份数] file
选项与参数:
-d  :后面接的是打印机的伫列名称。如果有多部打印机才需要指定;
-n  :就是列印的份数啊!

# 1. 列印出 2 份 /etc/issue 数据
[root@www ~]# lp -d hp_p2015 -n 2 /etc/issue
request id is hp_p2015-11 (1 file(s))  <==以 hp_p2015 来列印,工作号码为 11

  • 6. 列印工作的观察 (lpq) 与删除 (lprm)

我们已经有产生三个工作,但是第一个工作有顺利的列印 (打印机是开启的),因此还有两个工作尚未完成才对! 那我们如何知道还有哪些列印工作在伫列内呢?可以使用底下的命令来观察喔!

[root@www ~]# lpq [-al] [-P 列印伫列]
选项与参数:
-a  :列出所有打印机上面在伫列当中的工作情况;
-l  :用其他较长格式来输出列印的相关资讯 (拥有者与文件大小等等)
-P  :后面接特定的打印机,与 -a 不同。

# 1. 显示出目前所有打印机的工作伫列状况
[root@www ~]# lpq -a
Rank    Owner   Job     File(s)               Total Size
active  root    10      (stdin)               1024 bytes
1st     root    11      issue                 1024 bytes
# 上面的意思是,有 2 份工作,第一个工作为来自 stdin 的数据流,列印号码为 10 ,
# 整份列印数据占去 1024 bytes 。同理,第二份工作为文件,档名为 issue。

# 2. 用更详细的资讯显示列印工作
[root@www ~]# lpq -l -P hp_p2015
hp_p2015 is ready and printing

root: active                  [job 10 localhost]
        (stdin)                       1024 bytes

root: 1st                     [job 11 localhost]
        2 copies of issue             1024 bytes
# 你可以看到, issue 会被列印两份的数据!

如果这些列印工作你想要取消呢?那就使用 lprm 吧!

[root@www ~]# lprm [-P printer伫列] job_id
选项与参数:
-P  :后面直接指定某部打印机的某个工作号码。注意,那个 job_id
      就是刚刚我们使用 lpq 查看到的那个 Job 的号码啦!

# 1. 将使用 lpq 看到的第 11 号列印工作取消!
[root@www ~]# lprm 11
[root@www ~]# lpq -a
Rank    Owner   Job     File(s)               Total Size
active  root    10      (stdin)               1024 bytes
# 瞧!只剩下一个工作而已罗!

整个命令模式处理打印机的任务大约到此为止,其他的,还是使用 Web 介面去管理比较方便啦!


  • 7. 一个简单的练习

假设你目前的 CentOS 主机上面接著一台 U盘 介面的打印机,这台 U盘 介面的打印机是 Samsung 的 ML-1210 打印机, 请问,您可以如何安装这部打印机?

  1. 先下载 PPD 定义档,档名为: Samsung-ML-1210-gdi.ppd 到 /usr/share/cups/model/ 当中;
  2. 加入打印机,使用下列方法:
    [root@www ~]# lpadmin -p samsung -v usb:/dev/usb/lp0 \
    > -m Samsung-ML-1210-gdi.ppd -E
    
  3. 开始给他测试练习一下:『 lpr -P samsung /etc/passwd 』如果有东西印出来,那就是 OK 啦!

另外,如果老是看到萤幕前面显示:『 Printer not connected; will retry in 30 seconds...』, 很有可能是因为我们的装置代号输入错误,请使用『 lpstat -t 』查阅一下是否正确的配置好了? 基本上,安装一部 Linux 有支持的打印机,真的是快速啦!


大标题的图示硬件数据收集与驱动,及 lm_sensors

『工欲善其事,必先利其器』,这是一句大家耳熟能详的古人名言,在我们的资讯设备上面也是一样的啊! 如同前面小节谈到的,如果你的打印机本身就没有提供给 Linux 系统用的驱动程序,那么我们就不要浪费时间在该打印机设备上了。 同理可证,如果我们想要好好的使用 Linux 安装在自己的主机上面,那么主机上面的硬件资讯最好还是能够了解一下的好。 现在一般主板也都有提供 CPU 电压与温度的侦测,那我们也能够透过 lm_sensors 这个软件来取得该数据喔! 底下就让我们来玩玩吧!


小标题的图示硬件资讯的收集与分析

现在我们知道系统硬件是由操作系统核心所管理的,由第二十章的启动流程分析中,我们也知道 Linux kernel 在启动时就能够侦测主机硬件并加载适当的模块来驱动硬件了。 而核心所侦测到的各项硬件装置,后来就会被记录在 /proc 与 /sys 当中了。 包括 /proc/cpuinfo, /proc/partitions, /proc/interrupts 等等。 更多的 /proc 内容介绍,先回到第十七章的程序管理瞧一瞧先!

Tips:
其实核心所侦测到的硬件可能并非完全正确喔!因为他仅是『使用最适当的模块来驱动这个硬件』而已, 所以有时候难免会误判啦 (虽然机率非常之低)!那你可能想要以最新最正确的模块来驱动你的硬件, 此时,重新编译核心是一条可以达成的道路。不过,现在的 Linux 系统并没有很建议你一定要重新编译核心就是了。
鸟哥的图示

那除了直接呼叫出 /proc 底下的文件内容之外,其实 Linux 有提供几个简单的命令来将核心所侦测到的硬件叫出来的~ 常见的命令有底下这些:

  • fdisk:第八章曾经谈过,可以使用 fdisk -l 将分割表列出;
  • hdparm:第八章谈过的,可观察硬盘的资讯与测试读写速度;
  • dmesg:第十七章谈过, 观察核心运行过程当中所显示的各项信息记录;
  • vmstat:第十七章谈过,可分析系统 (CPU/RAM/IO) 目前的状态;
  • lspci:列出整个 PC 系统的 PCI 介面装置!很有用的命令;
  • lsusb:列出目前系统上面各个 U盘 端口的状态,与连接的 U盘 装置;
  • iostat:与 vmstat 类似,可即时列出整个 CPU 与周边设备的 Input/Output 状态。

lspci, lsusb, iostat 是本章新谈到的命令,尤其如果你想要知道主板与各周边相关设备时,那个 lspci 真是不可多得的好工具!而如果你想要知道目前 U盘 插槽的使用情况以及侦测到的 U盘 装置, 那个 lsusb 则好用到爆!至於 iostat 则是一个即时分析软件,与 vmstat 有异曲同工之妙! 既然本节是想要使用 lm_sensors 分析各组件的温度与电压,那么这几个命令得要来使用看看才行啊! ^_^

基本上,想要知道你 Linux 主机的硬件配备,最好的方法还是直接拆开机壳去察看上面的资讯 (这也是为何第零章会谈计概啊)! 如果环境因素导致您无法直接拆开主机的话,那么直接 lspci 是很棒的一的方法:


  • lspci
[root@www ~]# lspci [-vvn]
选项与参数:
-v  :显示更多的 PCI 介面装置的详细资讯;
-vv :比 -v 还要更详细的细部资讯;
-n  :直接观察 PCI 的 ID 而不是厂商名称

范例一:查阅您系统内的 PCI 装置:
[root@www ~]# lspci
00:00.0 Host bridge: Silicon Integrated Systems [SiS] 630 Host (rev 30)
00:00.1 IDE interface: Silicon Integrated Systems [SiS] 5513 [IDE] (rev d0)
00:01.0 ISA bridge: Silicon Integrated Systems [SiS] SiS85C503/5513 (LPC Bridge)
00:01.2 U盘 Controller: Silicon Integrated Systems [SiS] U盘 1.1 Controller (rev 07)
00:01.3 U盘 Controller: Silicon Integrated Systems [SiS] U盘 1.1 Controller (rev 07)
00:01.4 Multimedia audio controller: Silicon Integrated Systems [SiS] SiS PCI Audio 
Accelerator (rev 02)
00:02.0 PCI bridge: Silicon Integrated Systems [SiS] Virtual PCI-to-PCI bridge (AGP)
00:0e.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
01:00.0 VGA compatible controller: Silicon Integrated Systems [SiS] 630/730 PCI/AGP 
VGA Display Adapter (rev 21)
# 不必加任何的参数,就能够显示出目前主机上面的各个 PCI 介面的装置呢!

不必加上任何选项,就能够显示出目前的硬件配备为何。上面就是鸟哥的测试机所使用的主机配备。 包括使用 SIS 这家公司推出的 630 主板芯片组,使用 U盘 驱动为 1.1 版的控制器, 内建 SIS 的声卡,使用内建整合的 SIS 的 AGP 显卡,以及网络卡为螃蟹卡 (型号为 RTL-8139)。 您瞧瞧!很清楚,不是嘛。

由於目前的主机配备实在太高档了,因此很多朋友学习 Linux 时,习惯以类似 VirtualboxVMWare 等虚拟机器进行模拟,此时你得要特别注意,你的硬件配备将是 Virtualbox 或 VMWare 模拟出来的,并不是原本的主机配备喔!实在是由於讨论区太多网友发问类似『我的螃蟹卡为何捉不到』等问题, 询问后,才发现他使用 VMWare 模拟硬件。此时你就得要使用 lspci 去列出 Linux 核心捉到的硬件, 而不是你原本的硬件啦!注意注意!

如果你还想要了解某个设备的详细资讯时,可以加上 -v 或 -vv 来显示更多的资讯喔! 举例来说,鸟哥想要知道那个以太网络卡更详细的资讯时,可以使用如下的选项来处理:

[root@www ~]# lspci -s 00:0e.0 -vv

-s 后面接的那个怪东西每个设备的汇流排、插槽与相关函数功能啦!那个是我们硬件侦测所得到的数据罗! 你可以对照底下这个文件来了解该串数据的意义:

  • /usr/share/hwdata/pci.ids

其实那个就是 PCI 的标准 ID 与厂牌名称的对应表啦! 此外,刚刚我们使用 lspci 时,其实所有的数据都是由 /proc/bus/pci/ 目录下的数据所取出的呢!了解了吧! ^_^


  • lsusb

刚刚谈到的是 PCI 介面装置,如果是想要知道系统接了多少个 U盘 装置呢?那就使用 lsusb 吧! 这个命令也是很简单的!

[root@www ~]# lsusb [-t]
选项与参数:
-t  :使用类似树状目录来显示各个 U盘 端口的相关性

范例一:列出目前鸟哥的测试用主机 U盘 各端口状态
[root@www ~]# lsusb
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 002 Device 002: ID 0d62:a100 Darfon Electronics Corp. Benq Mouse
# 如上所示,鸟哥的主机有两个 U盘 控制器 (bus),而 Bus 002 有接了一个设备,
# 该设备的 ID 是 0d62:a100,对应的厂商与产品为 Benq 的鼠标。

确实非常清楚吧!其中比较有趣的就属那个 ID 号码与厂商型号对照了!那也是写入在 /usr/share/hwdata/pci.ids 的东西,你也可以自行去查询一下喔!更多资讯我们留待下一小节再来讨论吧!


  • iostat

刚刚那个 lspci 找到的是目前主机上面的硬件配备,那么整部机器的储存设备, 主要是硬盘对吧!请问,您硬盘由启动到现在,已经存取多少数据呢?这个时候就得要 iostat 这个命令的帮忙了! 不过,默认 CentOS 并没有安装这个软件,因此你必须要先安装他才行!如果你已经有网络了, 那么使用『 yum install sysstat 』先来安装此软件吧!否则无法进行如下的测试喔!

[root@www ~]# iostat [-c|-d] [-k|-m] [-t] [间隔秒数] [侦测次数]
选项与参数:
-c  :仅显示 CPU 的状态;
-d  :仅显示储存设备的状态,不可与 -c 一起用;
-k  :默认显示的是 block ,这里可以改成 K bytes 的大小来显示;
-m  :与 -k 类似,只是以 MB 的单位来显示结果。
-t  :显示日期出来;

范例一:显示一下目前整个系统的 CPU 与储存设备的状态
[root@www ~]# iostat
Linux 2.6.18-92.el5 (www.vbird.tsai)    06/03/2009

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.35    0.31    0.25    0.03    0.00   99.06

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda               0.29         3.46         4.01    1116645    1295796
# 瞧!上面数据总共分为上下两部分,上半部显示的是 CPU 的当下资讯;
# 下面数据则是显示储存装置 /dev/hda 的相关数据,他的数据意义:
# tps       :平均每秒钟的传送次数!与数据传输『次数』有关,非容量!
# kB_read/s :启动到现在平均的读取单位;
# kB_wrtn/s :启动到现在平均的写入单位;
# kB_read   :启动到现在,总共读出来的文件单位;
# kB_wrtn   :启动到现在,总共写入的文件单位;

范例二:每两秒钟侦测一次,并且共侦测三次储存装置
[root@www ~]# iostat -d 2 3
Linux 2.6.18-92.el5 (www.vbird.tsai)    06/03/2009

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda               0.29         3.46         4.01    1116645    1296276

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda               0.00         0.00         0.00          0          0

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda               0.00         0.00         0.00          0          0
# 仔细看一下,如果是有侦测次数的情况,那么第一次显示的是『从启动到现在的数据』,
# 第二次以后所显示的数据则代表两次侦测之间的系统传输值!举例来说,上面的资讯中,
# 第二次显示的数据,则是两秒钟内(本案例)系统的总传输量与平均值。

透过 lspci 及 iostat 可以约略的了解到目前系统的状态啊! 还有目前的主机硬件数据呢!知道这些资讯后,我们就可以来玩一些比较不一样的东西罗! ^_^


小标题的图示驱动 U盘 装置

在现在的计算机里面,你或许真的无法想像没有 U盘 介面装置的主机~ 因为不论我们的键盘、鼠标、打印机、扫描仪、闪盘等等,几乎都是使用到 U盘 来作为传输的介面的。 所谓这 U盘 (Universal Serial Bus) 最早是在 1994 年被发展出来,到 1996 年前后发展出 version 1.0 ,当时的速度大约在 12Mbit/second,到了 2000 年发展出 version 2.0 ,这一版的速度则提高到 480Mbit/second, 这也是目前使用最广泛的一个速度。2008 年则释出 U盘 3.0,这一版的速度比 2.0 要快十倍喔! 不过目前市面上的产品还是非常的少见。(注2)

U盘 有很多的优点啦,包括他是可以延伸的,每个 U盘 port 都可以最多接到 127 个装置! 速度又快,又具有 Plug and Play (随插即用) 的优点,所以近期以来被用来作为携带式装置的主要数据传输介面呢!


  • 关於 U盘 的芯片版本

目前 U盘 1.1版本的控制器主要有两种规格,分别是:

  • OHCI (Open Host Controller Interface):主要由 Compaq 所发展,包括 Compaq, SiS, ALi 等等厂商发展的芯片都是用这个模块;

  • UHCI (Universal Host Controller Interface):主要由 Intel 所发展, 包括 Intel, VIA 等等厂商发展的芯片都是使用这个模块。

由於我们的 Linux 会将这两种 U盘 的驱动程序加载,因此不论你的 U盘 是使用哪种芯片,我们的 Linux 都可以顺利的侦测到并且正确的驱动的啦!至於 U盘 2.0 在 Linux 上都以 Enhanced Host Controller Interface (EHCI) 来驱动的。我们使用 lsmod 来找一下 hci 这个关键字看看,鸟哥的测试主机驱动了多少 U盘 模块了呢?

[root@www ~]# lsmod | grep hci
Module                  Size  Used by
uhci_hcd               25421  0
ohci_hcd               23261  0
ehci_hcd               33357  0
# 三个模块都有加载,再来找一下 ehci_hcd 的说明看看:

[root@www ~]# modinfo ehci_hcd
filename:       /lib/modules/2.6.18-92.el5/kernel/drivers/usb/host/ehci-hcd.ko
license:        GPL
author:         David Brownell
description:    10 Dec 2004 U盘 2.0 'Enhanced' Host Controller (EHCI) Driver
srcversion:     006DD5CF82C35E943696BE7
....(底下省略)....


  • 启动 U盘 的闪盘或快闪碟

我们之前谈过 U盘 的磁碟代号是: /dev/sd[a-p] 之类的,类似 SCSI 硬盘的代号, 这是因为 U盘 的磁碟装置使用 SCSI 相关的装置代号,因此,如果您要使用 U盘 闪盘的话,嘿嘿!那么您的 Linux 主机就得要支持 SCSI 装置才行~

此外,为了让 U盘 磁碟装置顺利的被使用,因此,有时候还得要启动 usb-storage 模块才行~ 所以罗,光是有 U盘 的 uhci 模块还不行,还得要配合 usb-storage 啦~ 而一般 U盘 的装置都会被主动的侦测,核心也会主动的加载 U盘 装置的驱动模块, 所以你应该不需要手动加载 usb-storage 才是。不过,如果老是无法驱动时,那么不妨手动加载 usb-storage 试看看。

顺利加载各个需要的模块之后,直接下达 fdisk -l 应该就可以看到您的 U盘 闪盘的装置代号才是!一般来说,如果是第一个 U盘 磁碟装置的话, 应该可以看到一个名为 /dev/sda1 的装置,使用 mount 将他挂载起来即可啊!

在这里要强调的是,如果你是使用类似笔记本计算机的 2.5 寸硬盘作为随身硬盘的话,由於他就是硬盘的规格, 因此你可以看到一个完整的 /dev/sda 之类的磁碟资讯,你也可以进行额外的分割。但如果是快闪碟的话, 快闪碟并不是传统的硬盘,他并不是使用磁碟读取头与磁碟盘来记录数据,因此你只能使用 /dev/sda1 之类的档名来挂载, 理论上是无法进行额外分割的喔!这部份要特别强调一下。


  • 启动 U盘 打印机

要驱动 U盘 打印机也很简单啊!只要做好 U盘 打印机的装置代号即可!反正我们的 usb 模块已经加载了嘛! 目前的 CentOS 5.x 会主动的帮我们创建打印机的装置档名,所以底下的动作我们根本不需要进行。 不过如果你的 Linux 是较老式的系统,那可能得要使用 mknod 来创建起 U盘 打印机才行。 透过核心装置代码(注3)的查询,我们知道 U盘 打印机的主要/次要装置代码为 180 /0~15, 所以,创建的方法为:

# 假设你已经有 /dev/usb/lp0 ,那我们来尝试创建 /dev/usb/lp1 看看
[root@www ~]# mkdir -p /dev/usb
[root@www ~]# mknod /dev/usb/lp1 c 180 1
[root@www ~]# chown root:lp /dev/usb/lp1
[root@www ~]# chmod 660 /dev/usb/lp1
[root@www ~]# ls -l /dev/usb/lp1
crw-rw---- 1 root lp 180, 1 Jun  3 14:27 /dev/usb/lp1
[root@www ~]# echo "testing" > /dev/usb/lp1

在我们一般的生活当中,最常见的两种 U盘 装置就是闪盘与打印机了, 所以鸟哥在这里仅就这两种装置来介绍启动的方法,如果您还有其他的 U盘 装置要驱动的话, 请参考底下这一篇的内容啊!


小标题的图示使用 lm_sensors 取得温度、电压等资讯

玩计算机硬件的朋友们一定都听过所谓的『超频』这玩意儿,所谓的『超频』就是让系统原有的运行时脉添加, 让 CPU/PCI/VGA 前端汇流排速度提升到非正规的频率,以取得较高的计算机效能。 这在早期对於单价还是很贵的计算机来说,可以让我们花比较少的钱去获得比较高效能的计算机哩! 不过,超频要注意的地方可不少,包括电压不可高出 CPU 的负荷、CPU 风扇必须要强有力, 避免因为温度过高导致系统死机等等。

不过现今的计算机速度已经够快了,我们的 Linux 主机也实在不建议您超频,因为整体效能可能添加不了多少, 但是却会让您的主机寿命减少、系统不稳定呢!而由早期超频的『技术培养』过程当中,我们知道『CPU 的温度、系统的相关电压』 是影响主机是否稳定的一项重要指标喔!所以罗,如果能够随时掌握温度、电压, 其实对於系统还是有一定程度的监控啦。

其实各大主要主板商与芯片组,都会有温度、电压的侦测器在主机内,这个我们可以在主板操作手册或者是在 BIOS 内的『 Monitor 』项目找到相关的温度、电压数据。在 Windows 系统当中,厂商有推出相关的软件来侦测,那么在 Linux 当中呢?呵呵!也是有啊!那就是 lm_sensors 这套好用的东西了!

目前较新的 Linux distributions 都默认会帮忙安装这套软件,但如果你的 Linux 是比较早期的版本,那么就只好请您自行前往 http://www.lm-sensors.org/ 官方网站直接下载 tarball 并且安装他罗~


  • 侦测主板的型号

由於 lm_sensors 主要是依据『主板芯片组的型号,带入相关的模块后,再侦测其温度、电压』的, 如果该主板芯片组并不是 lm_sensors 所支持的模块,那自然就无法找出该芯片组的温压罗~ 所以啦,我们在使用 lm_sensors 之前,必须要确定主板是有提供温度、电压的, 再来,必须要加载主板的驱动模块,然后才有办法使用 lm_sensors 来进行侦测。

好消息是, lm_sensors 本来就提供我们一个不错的主板芯片组侦测程序, 那就是 sensors-detect 这个命令。侦测到主板芯片组后,将该资讯写入配置档当中, 就可以使用 sensors 命令直接读取目前的 CPU、机壳、电源、风扇等等的资讯了! 直接来作看看吧!

[root@www ~]# sensors-detect
# sensors-detect revision 1.413 (2006/01/19 20:28:00)
....(中间省略)....
It is generally safe and recommended to accept the default answers to all
questions, unless you know what you're doing. <==就一直接受就对了!

 We can start with probing for (PCI) I2C or SMBus adapters.
 You do not need any special privileges for this.
 Do you want to probe now? (YES/no): y
Probing for PCI bus adapters...
Use driver `i2c-sis630' for device 00:00.0: Silicon Integrated Systems SIS630
Probe succesfully concluded.
# 接下来的行为当中,反正你就一直按 Enter 就可以了!让他自动去侦测!

To make the sensors modules behave correctly, add these lines to
/etc/modprobe.conf:

#----cut here----
# I2C module options
alias char-major-89 i2c-dev
#----cut here----

To load everything that is needed, add this to some /etc/rc* file:

#----cut here----
# I2C adapter drivers
modprobe i2c-sis630
modprobe i2c-isa
# I2C chip drivers
modprobe eeprom
modprobe it87
# sleep 2 # optional
/usr/bin/sensors -s # recommended
#----cut here----

Do you want to generate /etc/sysconfig/lm_sensors? (YES/no):
Copy prog/init/lm_sensors.init to /etc/rc.d/init.d/lm_sensors
for initialization at boot time.

上面就进行好型号的侦测,并且主动的创建了 /etc/sysconfig/lm_sensors 的参数配置档。不过我们依旧需要进行一些额外的处理! 包括让系统启动主动加载模块的功能!这样我们就能够直接使用 lm_sensors 来侦测而不需要手动加载侦测模块啊! 你可以这样做:

[root@www ~]# vi /etc/modprobe.conf
alias char-major-89 i2c-dev
# 将刚刚侦测到的模块给他写入到这个文件当中!

[root@www ~]# vi /etc/rc.d/rc.local
# I2C adapter drivers
modprobe i2c-sis630
modprobe i2c-isa
# I2C chip drivers
modprobe eeprom
modprobe it87
sleep 2s
/usr/bin/sensors -s

[root@www ~]# chkconfig --list  lm_sensors
lm_sensors      0:off   1:off   2:on    3:on    4:on    5:on    6:off
# 确定 lm_sensors 默认启动会启动即可!此时你可以重新 reboot ,
# 或者运行上述的 modprobe 之后,在进行底下的侦测罗!


  • 利用 sensors 侦测温度、电压等硬件参数

侦测的命令就是 sensors 啊!直接动作吧!

[root@www ~]# sensors
it87-isa-0290  <==使用到的模块功能!
Adapter: ISA adapter
VCore 1:   +1.55 V  (min =  +1.42 V, max =  +1.57 V)
VCore 2:   +1.09 V  (min =  +2.40 V, max =  +2.61 V)   ALARM
+3.3V:     +1.25 V  (min =  +3.14 V, max =  +3.47 V)   ALARM
+5V:       +2.69 V  (min =  +4.76 V, max =  +5.24 V)   ALARM
+12V:      +5.82 V  (min = +11.39 V, max = +12.61 V)   ALARM
-12V:     -17.05 V  (min = -12.63 V, max = -11.41 V)   ALARM
-5V:       -7.40 V  (min =  -5.26 V, max =  -4.77 V)   ALARM
Stdby:     +2.07 V  (min =  +4.76 V, max =  +5.24 V)   ALARM
VBat:      +0.40 V
fan1:        0 RPM  (min =    0 RPM, div = 2)
fan2:        0 RPM  (min = 3000 RPM, div = 2)          ALARM
fan3:     2689 RPM  (min = 3000 RPM, div = 2)
M/B Temp:    +33°C  (low  =   +15°C, high =   +40°C)   sensor = diode
CPU Temp:    +37°C  (low  =   +15°C, high =   +45°C)   sensor = thermistor
Temp3:        -5°C  (low  =   +15°C, high =   +45°C)   sensor = disabled
# 你可以发现一大堆的错误信息!没关系的!这是因为鸟哥的主板太旧,
# 导致 lm_sensors 误判,所以输出的结果就会有点差异!至少转速与温度是正常的啦! 

基本上,只要这样的步骤,您的主机就可以主动的侦测温度与电压,还有风扇转速等等资讯。 不过,事实上,由於主板设计的不同,所以侦测的结果很有可能是有误差的。以鸟哥的情况来说, 我所使用的主板型号是太旧了,lm_sensors 确实捉到错误的资讯啊!此时或许就需要进行调校了。 调校的步骤很简单,先确定使用 sensors 显示的结果每个项目代表的意义 (可以参考 BIOS 硬件侦测结果的顺序来排列) ,然后进入 /etc/sensors.conf 进行修改即可。

如果想要以图表输出的话,那么不妨搭配 MRTG 来进行网页绘图~ 这部分网络上面文章就比较多一点,也可以先参考鸟哥的一篇旧文章:


小标题的图示udev 与 hal 简介

从上面的介绍中,我们不难发现目前新的 Linux distributions 大多能够类似窗口操作系统,就是能够即时的侦测随插即用硬件! 例如 U盘 介面的各项硬件设备等等。那我们也知道其实所有的硬件都是文件,这些装置文件必须要使用 mknod 才能创建的! 那到底 (1)硬件如何侦测与 (2)装置文件如何主动创建呢?这就与 udev 及 HAL 这两个东西有关了。

事实上,系统所有的硬件应该都是给核心管理的,但我们知道操作系统在内存内是受保护的,使用者根本无权使用操作系统核心。 为了解决这个问题於是有 udev 的产生。这个 udev 是个使用者层级软件,他可以让使用者自行处理 /dev 底下的装置! 如此一来就能够解决一般用户在使用类似 U盘 时,需要额外硬件的问题。(注4)

但我们如何知道系统上面多了个硬件呢?这时候就得要硬件抽象层 (Hardware Abstraction Layer, HAL) 的辅助了。 HAL 可以将系统目前的所有硬件进行快照,并持续检视这个快照的内容(注5)。如果有新的 PnP 硬件插入时, HAL 就会发现目前的硬件与快照不同,此时就会通知 udev 进行新的装置的建置了!如此一来,两者的配合就能够让你的装置 PnP 罗!

目前这两个咚咚在 CentOS 上面都会是启动的,其中 udev 是在 /etc/rc.d/rc.sysinit 就启动了, 而 hal 则是在 /etc/init.d/haldaemon 这个服务才启动。让我们检查看看是否真的有启动啊!

[root@www ~]# pstree -p | egrep '(udevd|hal)'
        |-hald(4814)---hald-runner(4815)-+-hald-addon-acpi(4822)
        |                                |-hald-addon-keyb(4827)
        |                                `-hald-addon-stor(4837)
        |-udevd(401)
# 确实有启动喔!一个是 udevd 一个是 hald 啦!

老实说,如果你已经启动了这两个家伙,那么其他的事不需要进行,交给这两个小玩意儿自己处理即可。 但如果你想要多了解 udev 是如何进行装置的创建时,那么我们可以来玩玩底下的咚咚。


  • 自订装置名称进行装置创建

假设你想要将你的闪盘取名为较有趣的装置,不想再使用类似 /dev/sda1 之类的名称时,可以怎么作呢? 我们可以透过更改 udev 的守则 (rule) 来使用 mknod 创建不同名称的装置文件。举例来说, 鸟哥这部测试机的硬盘使用为 /dev/hda ,因此第一个 U盘 快闪碟装置应该是 /dev/sda1 才对! 如果你的系统使用 SATA 磁碟,那么你的快闪碟可能就得要由 /dev/sdb1 开始编号起来了。

udev 创建装置文件的守则放置到 /etc/udev/rules.d/ 目录下,在该目录下的文件可以依序进行处理的。 以最简单的语法来看,在该目录下可以使用的变量与对应可以是:

KERNEL=="核心能够分析到的档名", NAME="你要使用的装置档名"

当然还有很多语法,不过这里我们先不介绍,有兴趣的查一下本文最后的连结去看看吧! 假设鸟哥的 /dev/sda1 要取名字成为 /dev/vbirdusb ,你可以这样做:

# 1. 先在守则目录下新增一个文件,档名配置为 99-vbirdusb.rules 好了
[root@www ~]# cd /etc/udev/rules.d/
[root@www rules.d]# vi 99-vbirdusb.rules
KERNEL=="sda1", NAME="vbirdusb"
# 上面这一行就足够啦!注意,档名前的 /dev 不需要写入!

# 2. 插入一支闪盘,然后检查看看:
[root@www rules.d]# ll /dev/sda* /dev/vbirdusb
brw-r----- 1 root disk 8, 0 Jun  3 16:43 /dev/sda
brw-r----- 1 root disk 8, 1 Jun  3 16:43 /dev/vbirdusb
# 唔! /dev/sda1 不见了!取而代之的是 /dev/vbirdusb 啦!

[root@www rules.d]# mount /dev/vbirdusb /mnt
[root@www rules.d]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
....(中间省略)....
/dev/vbirdusb           976064    192784    783280  20% /mnt
# 很有趣吧!装置名称被鸟哥改过了!

虽然这样很具有个性化的需求,不过总是不太可靠~万一哪天忘记自己有进行这些动作,偏偏用核心默认的档名去处理时, 会发生很多不明的错误啊!所以将刚刚创建的数据反向删除回来吧!

# 1. 先卸载系统吧!
[root@www ~]# umount /dev/vbirdusb

# 2. 拔除闪盘,并将守则档删除!
[root@www ~]# rm /etc/udev/rules.d/99-vbirdusb.rules

# 3. 再插入闪盘,测试一下档名有没有恢复正常?
[root@www ~]# ll /dev/sda*
brw-r----- 1 root disk 8, 0 Jun  3 16:50 /dev/sda
brw-r----- 1 root disk 8, 1 Jun  3 16:50 /dev/sda1
# 看起来,档名确实恢复正常罗!

大标题的图示重点回顾
  • CentOS 提供了好用的 setup 功能,可以帮忙配置 (1)认证方式 (2)防火墙配置 (3)键盘格式配置 (4)网络配置 (5)系统默认启动的服务配置 (6)时区配置 (7)X 解析度与硬件配置 等功能;
  • 网际网络 (Internet) 就是 TCP/IP ,而 IP 的取得需与 ISP 要求。一般常见的取得 IP 的方法有:(1)手动直接配置 (2)自动取得 (dhcp) (3)拨接取得 (4)cable宽带 等方式。
  • 主机的网络配置要成功,必须要有底下的数据:(1)IP (2)Netmask (3)gateway (4)DNS 服务器 等项目;
  • DNS 服务器 IP 的指定,需写入 /etc/resolv.conf 这个文件中;
  • 默认 Linux 的列印服务使用 CUPS ,更早之前则是使用 lpd 这个服务;
  • Linux 支持的打印机网站查询: http://www.linuxfoundation.org/en/OpenPrinting
  • 列印组件主要有:列印命令、列印工作、列印伫列、列印服务、打印机
  • 网络打印机的格式主要有: ipp, smb 等类别;
  • CUPS 可使用 http://localhost:631 来连接,然后使用浏览器介面来管理!
  • PPD 指的是 postscript 列印定义档,可视为打印机的驱动程序;
  • 命令列管理打印机的方式主要透过: lpadmin, lpstat, lpq, lprm 等命令。至於产生列印工作的命令则为 lpr, lp
  • 本章新增硬件资讯的收集命令有: lspci, lsusb, iostat 等;
  • U盘 的驱动模块主要有 OHCI 与 UHCI,至於 U盘 2.0 则使用 EHCI。
  • lm_sensors 可用来侦测主板的温度、电压、风扇转速等功能;
  • 动态管理硬件,透过使用者层级的管理方式,主要透过 udev 与 HAL 的管理!

大标题的图示本章习题
( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看)
简答题部分:
  • 如果你硬是要创建一个不存在的打印机装置文件,例如: /dev/usb/lp8,该如何处置?
    首先,必须要查阅得该装置的主要装置代号,亦即 180,至於次要代号则是 8 , 再使用 mknod 来创建,因此,需要这样做:
    mknod /dev/usb/lp8 c 180 8
    chown root:lp /dev/usb/lp8
    chmod 660 /dev/usb/lp8
  • 如果你想要知道整个系统的周边硬件装置,可以使用哪个命令查询?
    lspci 可以查询到,更可使用 lspci -v 来查询更详细资讯。
  • 承上题,那么如果单纯只想要知道 U盘 装置呢?又该如何查询?
    lsusb就可以查询的到!
  • 试说明 (1)列印工作 (2)列印伫列 (3)列印命令 (4)列印服务 (5)打印机之间的相关性。
    列印命令可以产生列印工作,列印工作会在列印伫列里面排队等待被列印。在伫列内的数据於列印服务有启动的环境下, 该数据可以被转成打印机可读的格式,最终列印服务会将伫列工作转成适合的数据交给打印机列印出来。 详细数据可参考图 2.1.4 的说明。
  • 说出三种以上目前常见的网络列印通讯协议。
    例如 IPP, LPD, SMB 等均是列印的通讯协议。
  • 如何使用 lm_sensors 侦测主机内的温度,详细说明整个步骤?
    • 先确定您的主板具有温度与电压等侦测芯片,可使用 lspci 检查芯片组;
    • 启动进入 BIOS 后,查询一下是否具有硬件侦测温度、电压的项目,将输出的项目顺序记一下;
    • 确定 Linux 已经安装了 lm_sensors,再使用 sensors-detect 检查所需要的配置项目;
    • 依据上个步骤,配置 /etc/modprobe.conf 及 /etc/rc.d/rc.local 两个文件;
    • 使用 chkconfig 让 lm_sensors 启动启动,并且重新启动 (reboot);
    • 开始使用 sensors 进行侦测,也可以尝试修改 /etc/sensors.conf 的内容,以符合实际状况。
  • (挑战题)如果你的网络配置妥当了,但是却老是发现网络不通,你觉得应该如何进行测试?
    (1)先检查硬件,每个环节 (网卡、hub/switch、路由器等) 的灯号是否有亮?有亮再进行下个动作;
    (2)使用 ifconfig 检查 IP 与 netmask 的数据是否正确,若正确才可进行下一步;
    (3)使用 route 看看 default gateway 是否正确,若正确再进行下一步;
    (4)使用 ping -c 3 [gateway IP] ,若有回应才进行下一步;
    (5)使用 ping -c 3 [外部IP,例如 168.95.1.1] ,若有回应则 IP 正常,若无回应,请检查 gateway 的配置
    (6)使用 dig www.google.com 看看能否找到 IP ,找不到则请检查 /etc/resolv.conf 的配置。

大标题的图示参考数据与延伸阅读

2005/10/25:准备准备~写一些跟硬件比较有关系的数据!
2005/11/08:准备完毕 U盘lm_sensors 的部分了~啊!拖了真久~还有 RAID 的说明也差不多哩!
2005/11/09:加入了 FC4 的 setup 命令,尤其是打印机的部分,可以参考参考!
2005/11/10:终於将 iSCSI 的装置写好了~这部份真的是很有趣!不过,一般使用者可能碰不到就是了。
2005/11/13:终於将 CUPS 架构配置好自己的 Printer 部分了!
2005/11/14:连同 LVM 也大致的给他写完了!那个 resize2fs 命令确实有趣!
2005/11/25:加入一个简单的练习题~利用 dd 配合 resize2fs 来制作备份的数据!
2009/04/30:将 LVM 移动到 第十五章 ,且拿掉 iSCSI 的说明了。
2009/04/30:将旧的基於 FC4 撰写的版本移动到 此处
2009/06/03:加入 udev 与 hal 的简单说明!
2009/09/15:简单修订一些语句,修改章节的习题,并没有改到什么重要的资讯。
 
     
http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

本网页主要以Firefox配合解析度 1024x768 作为设计依据     鸟哥自由软件整合应用研究室