鸟哥的 Linux 私房菜
为取得较佳浏览结果,请爱用 firefox 浏览本网页
目录 | Linux 基础文件 | Linux 架站文件 | Linux 企业运用 | 新手讨论 |
     
 
第二十一章、系统设定工具(网路与印表机)与硬体侦测
最近更新日期: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 指令。 那么上面的主选单部分有哪些功能呢?这些设定的基本功能是这样的:

  • Authentication configuration
    这是与使用者身份认证有关的设定,包括本机的帐号与利用远端伺服器提供的帐号来登入本机等功能的设定;

  • Firewall configuration
    简单的设定 (1)防火墙与 (2)SELinux 的启动模式 (Disable, Enforcing, Permissive)。 SELinux 请参考第十七章的说明, 防火墙则请参考伺服器篇的解释了。这个地方的设定比较简单, 有时候可能会让你自己搞不清楚设定值的意义。所以,还是手动处理比较妥当;

  • Keyboard configuration
    就是键盘按键的对应表。注意,这个设定仅与 tty 介面有关,至于 X Window 则不是以这个为设定值;

  • Network configuration
    设定网路参数的地方,包括 IP, network, netmask, dns 等等,不过, 还需要看完伺服器篇关于网路基础的介绍后, 才能够比较了解设定值的意义啦!

  • System services
    其实就是第十八章提到的 ntsysv 的内容喔~亦即设定一些系统服务是否在开机时启动的地方;

  • Timezone configuration
    安装的时候不是可以透过全世界地图挑选时区吗? 这个就是在安装完毕后重新选择时区的地方;

  • X configuration
    设定 X Window 相关的设定,例如解析度啦等等的。我们会在第二十四章再提到 X Window 方面的基础知识。

底下我们就来约略的介绍一下这些玩意儿吧!除了网路 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 将印表机的支援启动才行! 不过,这大概都属于旧式印表机才需要的动作啦!为啥呢?因为现在印表机大部分都是 USB 或者是网路印表机了, 根本不需要使用 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 介面设定自己的印表机呢!真是非常方便! 那如果你的印表机是透过线材 (USB/序列埠) 连上主机的呢?那就得要考虑底下的连接介面啰!

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

  • USB :一般越来越常见的 USB 印表机啊! 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 介面控管 USB 本机印表机

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

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

老实说,除非你的 USB 印表机是非常冷门的机种,否则,我们的 CUPS 应该已经自动的捉到并且设定好该印表机啰! 以鸟哥为例,鸟哥办公室的事务机为 HP Diskjet F380 ,如果使用列出 USB 装置的 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 机制顺利取得的 USB 印表机
图 2.4.1 、由 HAL 机制顺利取得的 USB 印表机

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

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

指向第一个 USB 装置处
图 2.4.3 、指向第一个 USB 装置处

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

选择印表机的驱动程式
图 2.4.4 、选择印表机的驱动程式

最终结果
图 2.4.5 、最终结果

如上图所示,最后就会多出一个名为 deskjet_f380 的印表机名称,接下来当然就是‘ Print Test Page ’测试看看能否列印啰。 如果能够列印得出来,那就是设定妥当了。所以说, USB 印表机的设定要简单太多啰! ^_^


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

想像一个状况,你仅有 USB 印表机安装在 Linux 上头,整个办公室或实验室里面仅有这部印表机。 虽然你可以加装列印伺服器来使 USB 印表机变成网路印表机,但总是得多花钱啊! 有没有办法可以让你的本机印表机变成网路印表机呢?有的,那就是修改 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
     USB         : 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 主机上面接着一台 USB 介面的印表机,这台 USB 介面的印表机是 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:列出目前系统上面各个 USB 埠口的状态,与连接的 USB 装置;
  • iostat:与 vmstat 类似,可即时列出整个 CPU 与周边设备的 Input/Output 状态。

lspci, lsusb, iostat 是本章新谈到的指令,尤其如果你想要知道主机板与各周边相关设备时,那个 lspci 真是不可多得的好工具!而如果你想要知道目前 USB 插槽的使用情况以及侦测到的 USB 装置, 那个 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 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 07)
00:01.3 USB Controller: Silicon Integrated Systems [SiS] USB 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 主机板晶片组,使用 USB 驱动为 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 介面装置,如果是想要知道系统接了多少个 USB 装置呢?那就使用 lsusb 吧! 这个指令也是很简单的!

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

范例一:列出目前鸟哥的测试用主机 USB 各埠口状态
[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
# 如上所示,鸟哥的主机有两个 USB 控制器 (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 可以约略的了解到目前系统的状态啊! 还有目前的主机硬体资料呢!知道这些资讯后,我们就可以来玩一些比较不一样的东西啰! ^_^


小标题的图示驱动 USB 装置

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

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


  • 关于 USB 的晶片版本

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

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

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

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

[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 USB 2.0 'Enhanced' Host Controller (EHCI) Driver
srcversion:     006DD5CF82C35E943696BE7
....(底下省略)....


  • 启动 USB 的随身碟或快闪碟

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

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

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

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


  • 启动 USB 印表机

要驱动 USB 印表机也很简单啊!只要做好 USB 印表机的装置代号即可!反正我们的 usb 模组已经载入了嘛! 目前的 CentOS 5.x 会主动的帮我们建立印表机的装置档名,所以底下的动作我们根本不需要进行。 不过如果你的 Linux 是较老式的系统,那可能得要使用 mknod 来建立起 USB 印表机才行。 透过核心装置代码(注3)的查询,我们知道 USB 印表机的主要/次要装置代码为 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

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


小标题的图示使用 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 大多能够类似视窗作业系统,就是能够即时的侦测随插即用硬体! 例如 USB 介面的各项硬体设备等等。那我们也知道其实所有的硬体都是档案,这些装置档案必须要使用 mknod 才能建立的! 那到底 (1)硬体如何侦测与 (2)装置档案如何主动建立呢?这就与 udev 及 HAL 这两个东西有关了。

事实上,系统所有的硬体应该都是给核心管理的,但我们知道作业系统在记忆体内是受保护的,使用者根本无权使用作业系统核心。 为了解决这个问题于是有 udev 的产生。这个 udev 是个使用者层级软体,他可以让使用者自行处理 /dev 底下的装置! 如此一来就能够解决一般用户在使用类似 USB 时,需要额外硬体的问题。(注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 ,因此第一个 USB 快闪碟装置应该是 /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 等;
  • USB 的驱动模组主要有 OHCI 与 UHCI,至于 USB 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 来查询更详细资讯。
  • 承上题,那么如果单纯只想要知道 USB 装置呢?又该如何查询?
    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:准备完毕 USBlm_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:简单修订一些语句,修改章节的习题,并没有改到什么重要的资讯。



 
     
本网页主要以 firefox 配合解析度 1024x768 作为设计依据
http://linux.vbird.org is designed by VBird during 2001-2009. Aerosol Lab.