22 FreeBSD连载:调整控制台设置

调整系统设置在FreeBSD系统中 , 很多设置都需要直接更改设置文件 , 例如系统启动脚本rc.conf , 控制终端设置文件/etc/ttys等 。虽然大部分很多系统的参数可以通过安装程序Sysinstall来设置 , 但是改动配置文件更为直接 。并且对于管理员来讲 , 只有了解配置文件是如何控制系统的表现 , 才能从根本上解决在实际操作中遇到的各种问题 。
调整控制台设置
控制台是个人用FreeBSD系统使用者最常进行操作的位置 , 因此应该调整控制台设置 , 使其最适合使用者的习惯 。可以在控制台上调整显示使用的字体、键盘映射、屏幕保护、虚拟终端等设置 。其中一些设置可以通过安装程序sysinstall来进行 , 然而有的设置必须通过命令方式或更改配置文件来完成 , 而且命令行方式具有更大的灵活性 。
虚拟终端与ttys设置
FreeBSD的控制台上有多个虚拟终端 , 可以在系统启动之后使用Alt键加上功能键来切换虚拟终端 。系统缺省只激活四个虚拟终端 , 这已经满足绝大多数的需要 。其中第四个虚拟终端在缺省情况下没有运行登录程序 , 这是因为X Server运行时也需要一个虚拟终端 , 因此必须将一个没有进程占据的控制台终端留给X Window使用 。
而通过更改内核的设置 , FreeBSD可以支持16个虚拟终端设备 , 由于通常个人计算机只有F1-F12共12个功能键 , 事实上只能使用12个虚拟终端 。其设备文件从ttyv0到ttyv15 , 可以使用MAKEDEV来创建这些设备文件 。为了增加虚拟终端的数量 , 除了更改内核设置、创建设备文件之外 , 还需要编辑系统文件/etc/ttys 。这个文件中有下面的内容是与此相关的:
# namegettytypestatuscomments
#
# This entry needed for asking passWord when init goes to single-user mode
# If you want to be asked for password, change "secure" to "insecure" here
console noneunknown off secure
#
ttyv0"/usr/libexec/getty Pc"cons25onsecure
ttyv1"/usr/libexec/getty Pc"cons25onsecure
ttyv2"/usr/libexec/getty Pc"cons25onsecure
ttyv3"/usr/libexec/getty Pc"cons25off securettyv3对应的行的第四列为 “off” , 这说明这个终端并没有运行getty程序 , 不会出现登录提示 。增加虚拟终端就意味着在这个文件中增加相应的设置行 , 例如要增加一个虚拟终端 , 就应该修改这个文件中的相应项为:
ttyv3"/usr/libexec/getty Pc"cons25onsecure
ttyv4"/usr/libexec/getty Pc"cons25off secure修改完这个文件之后需要重起系统 , 在内核支持的条件下 , 系统将增加一个虚拟终端 。
如果用户在控制台上运行了X Window , 由于X Server也需要控制Alt加功能键这样的组合键 , 因此控制台将这类组合键留给X Window , 不再使用它们来切换到其他虚拟终端 。此时切换到其他虚拟终端的热键为Ctrl加Alt再加上相应功能键 , 而从其他虚拟终端切换回X Window仍然为Alt 功能键F4 。这样的方式甚至不限于X Server , 也适用于其他直接使用控制台、截留键盘的程序 。
在/etc/ttys文件中 , 可以看到每个虚拟终端最后一个参数为 “secure” , 这表示这个终端位于安全可信赖的物理位置上 , 因此在这个终端上可以允许直接使用root帐号登录 , 如果将其改为 “insecure” , 那么root用户将不能在这个终端上直接登录 。由于控制台为系统最基本的终端设备 , 一般只有管理员或其他可信赖的用户才能使用 , 因此对应于这些虚拟终端 , 设置都为 “secure”。
这样一旦控制台的物理安全受到危害 , 系统安全就受到严重的影响 。正由于系统信赖控制台 , 当系统使用单用户模式启动时 , 不会询问root的口令 , 这个设置是由ttys文件中的console项来进行控制的 , 可以将ttys文件中的console项中对应的 “secure” 改为 “insecure” , 就表示控制台是不能信赖的 , 那么系统在进入单用户状态时 , 将验证root的口令 。在控制台的物理访问控制不能保证的情况下 , 这个设置虽然不能完全保证非法使用者不能进入单用户状态并获得系统的控制权 , 但提供了相当重要的保护能力 。
ttys文件中 , 除了针对虚拟终端的设置之外 , 还对串行终端ttys0等 , 用于网络连接的伪终端ttyp0等 , 提供了设置 。要增加相应终端 , 与控制台虚拟终端类似 , 除了更改系统内核、设备文件之外 , 还需要在ttys文件为相应设备提供入口 。
控制台键盘设置
kbdcontrol命令就用于更改键盘设置 , 包括键盘的映射方式、击键的重复率等 , 键盘的映射文件保存在/usr/share/syscons/keymaps/目录下 , 通常的标准101/102键盘可以使用us.iso.kbd文件 。以下例子中使用 “-l” 参数指定键盘映射文件 , 使用 “-r” 参数指定键盘速度 。
# kbdcontrol -l /usr/share/syscons/keymaps/us.iso.kbd
# kbdcontrol -r fast除了可以用fast来表示键盘速度之外 , 还可以精确指定键盘击键的间隔和重复时间 , 例如fast模式就等同于250.34 , 表示击键间隔为250ms , 重复时间为34ms , normal模式对应于500.126 , slow对应于1000.504 。
指定键盘映射文件的好处是可以自己定义键盘的映射方式 , 例如可以使用更改键盘配置文件的方法来屏蔽Ctrl-Alt-Del热键 , 就可以使用编辑器打开us.iso.kbd文件 , 将Ctrl-Alt-Del对应的功能由boot改为nop , 表示输入这个击键序列时不进行任何操作 。或者可以为boot功能定义其他组合键 。
控制台显示设置
控制台的字体文件均保存在/usr/share/syscons/fonts目录下 , 通常使用的字体有8x8大小、8x14大小和8x16大小 , 可以指定使用那些字体文件作为系统使用的这些大小的字体 。将这些字体文件载入需要使用vidcontrol命令:
# vidcontrol -f 8x8 /usr/share/syscons/fonts/cp437-8x8.fnt其中cp437指的是字体代码页为437 , 这是英文编码 , 中文编码为Code Page 936(GB) 。由于中文为双字节文字 , 控制台驱动程序处理起来比较困难 , 还没有对应中文编码的控制台字体文件 。
vidcontrol不仅用于载入字体文件 , 还可以改变屏幕的模式 , 例如可以将屏幕更改为80x50大小:
# vidcontrol 80x50由于80x50模式需要使用8x8字体 , 因此这需要首先载入8x8字体 。如果内核编译时选择了VESA支持选项 , 并且使用的显示卡也兼容VESA显示模式 , 还可以将屏幕模式设置为132x60大小 , 充分利用计算机系统大屏幕显示器的优势 。可以使用vidcontrol -i mode来查看当前硬件支持的显示模式 。由于不同的显示模式使用的不同大小的字体 , 必须载入必要大小的字体才能改换到相应模式下 。
vidcontrol还可以用于设置控制台下激活屏幕保护的时间间隔 , 使用 “-t” 参数指定激活时间 。
而控制台屏幕保护则是通过一个载入可加载模块的方式设置的 , 在/modules目录中已经安装了几个不同的屏幕保护模块 , 如black_saver_mod.ko、green_saver_mod.ko、daemon_saver_mod.ko、logo_saver_mod.ko等 , 这些模块可以使用kldload命令载入内存 , kldstat查看各个内核模块的状态 , 或者kldunload命令将其卸载 。载入不同的屏幕保护模块 , 就将激活不同的屏幕保护 。在系统启动时Boot Loader的提示下 , 可以使用load命令载入模块 , 也可以通过Boot Loader的资源文件/boot/loader.rc , 用于指定在启动时应该自动执行那些操作 。
通常 , 可以使用logo_saver_mod作屏幕保护 , 这是一个FreeBSD吉祥物的图标 。
在FreeBSD 3.0-Release之前 , FreeBSD使用/lkm目录下 , 后缀为.o的可加载模块 , 而管理模块的命令相应为modload、modstat和modunload 。这些模块为a.out格式内核使用的可加载模块 , 而.ko为ELF内核使用的模块 。使用那种格式的内核 , 就应该载入那种格式的可加载模块 , 3.1之后如果仍然使用a.out格式的内核 , 也可以仍然使用这些模块 。
在3.1-Release之后 , FreeBSD引入了系统启动时显示启动图标的能力 , 如同Windows系统在启动时显示蓝天白云图案一样 , FreeBSD系统也能够在启动时显示一个预设的图像文件 , 而启动时产生的检测信息隐藏在图象后面 , 这个功能称为splash 。这个系统启动标志是和新版本的控制台屏幕保护能力是紧密相结合的 , 当载入这个splash模块而使得启动显示相应的图标之后 , 每当空闲时间到达而屏幕保护被激活时 , 就会显示这个图像作为屏幕保护 。
为了设置启动标志及其屏幕保护 , 首先要内核支持splash伪设备(需要pseudo-device splash配置行) , 再生成一个小于640x480 , 256色的非压缩的bmp图象文件 , 然后将其复制到/boot目录下 , 更改/boot目录下的loader.rc文件 , 设置boot loader载入处理图象文件的模块splash_bmp 。
# cp logo.bmp /boot
# cat/boot/loader.rc
load kernel
load -t splash_image_data logo.bmp
load splash_bmp这也是使用boot loader的资源文件loader.rc的一个例子 , 可以定制这个资源文件 , 指定boot loader自动载入相关模块 , 以及执行其他boot loader的命令 。
控制台鼠标设置
FreeBSD使用一个守护进程moused来接管对鼠标的控制 , 它可以通过sysinstall很方便的进行设置 。moused就能将鼠标的输入传递给控制台驱动程序 , 这样就可以在文本状态下使用鼠标进行操作 , 例如在普通情况下可以进行粘贴操作 , 在应用程序支持的条件下 , 还能和应用程序进行交互 。缺省条件下仅有第一个虚拟控制台支持这种鼠标操作 , 在这个控制台上使用 “vidcontrol -m off” 就能关闭鼠标指针 , 禁止这种操作 , 以后仍然可以使用 “vidcontrol -m on” 许可鼠标的操作能力 。
系统缺省只在第一个控制台虚拟终端设备上打开鼠标指针 , 因此为了在其他虚拟终端上使用鼠标 , 必须在相应的控制台上使用vidcontrol -m on命令 。
执行moused , 必须要指定鼠标连接的端口和类型 , 这样moused才能和鼠标通信 。常用的鼠标有连接到串口的鼠标 , 它使用的设备为串口设备/dev/cuaa0(串口1)或/dev/cuaa1(串口2) , 如果使用ps/2接口的鼠标 , 使用的设备为/dev/psm0 , 如果使用总线类型接口的鼠标 , 使用的设备为/dev/mse0 。为了使用相应的端口 , 首先要保证相应的设备被内核正确探测 , 这可以使用dmesg来查看系统的硬件检测信息 , 检查设备驱动sio0,sio1(串口设备) , psm0,或者mse0等是否被内核检测到 。然后就能启动moused了:
# vidcontrol -m on
# moused -p /dev/cuaa0 -t auto使用auto作为鼠标类型的参数 , 让moused来决定鼠标使用的协议 , 一般情况下moused能够侦测出正确的协议 。一般ps/2鼠标使用ps/2协议 , 普通总线鼠标使用busmouse协议 , 串口鼠标使用的协议类型较多 , 通常标记为MS-2key两键的鼠标使用microsoft协议 , PC-3key三键鼠标使用mouse system协议 , 此外还有intellimouse等不同的协议 。
由于Unix下习惯使用三键鼠标进行操作 , 因此个人计算机上常用的两键鼠标就有些不合适 , 此时可以使用同时按下左右两键来模拟第三个键 , 对于moused , 这需要使用参数 “-3” 支持 , 这是全屏幕的moused设置程序不能进行设置的 。moused还能更改鼠标的另一些属性 , 例如滚动速度、点按速度等 。
此外在使用了moused之后 , moused将维护一个伪设备文件/dev/sysmouse , 这个设备文件行为就如同一个鼠标端口设备 , 能被其他要使用鼠标的程序 , 如X Server所使用 , 简化了这些程序的设置任务 。
一些Linux二进制格式的程序与这个设备文件不兼容 , 如果需要使用Linux的访问鼠标的应用程序 , 如X Server , 就不能使用moused , 而要让Linux程序直接访问物理鼠标设备文件 。
如果要保留这些键盘、显示、鼠标设置 , 就需要更改系统启动配置文件rc.conf中的相关参数设置 , 这样每次启动系统将自动使用必要的命令载入正确的设置 , 以下为与这些设置相关的项 , 这些项均被被作为参数传递给上述的设置命令 , 因此需要根据具体设置更改下列选项 。
keymap="NO"# keymap in /usr/share/syscons/keymaps/* (or NO).
keyrate="NO"# keyboard rate to: slow, normal, fast (or NO).
keybell="NO"# bell to duration.pitch or normal or visual (or NO).
keychange="NO"# function keys default values (or NO).
cursor="NO"# cursor type {normal|blink|destructive} (or NO).
scrnmap="NO"# screen map in /usr/share/syscons/scrnmaps/* (or NO).
font8x16="NO"# font 8x16 from /usr/share/syscons/fonts/* (or NO).
font8x14="NO"# font 8x14 from /usr/share/syscons/fonts/* (or NO).
font8x8="NO"# font 8x8 from /usr/share/syscons/fonts/* (or NO).
blanktime="NO"# blank time (in seconds) or "NO" to turn it off.
saver="NO"# screen saver: blank/daemon/green/snake/star/logo/NO.
moused_enable="NO" # Run the mouse daemon.
moused_type="auto" # See man page for rc.conf(5) for available settings.
moused_port="/dev/cuaa0" # Set to your mouse port.
moused_flags="-3"# Any additional flags to moused.【22 FreeBSD连载:调整控制台设置】未完 , 待续 。。。