[OpenBSD]

[索引] [第六章 - 网络] [第八章 - 常见问题]

7 - 键盘和显示控制


目录



7.1 - 我如何重新映射键盘? (wscons)

ports中可以使用wscons(4)控制台驱动器的平台: alpha, amd64, hppa, i386, mac68k, macppc, sparc, sparc64, vaxzaurus

有了wscons(4)控制台,大多数选项可以用wsconsctl(8)命令控制。例如,您想用wsconsctl(8)改变键盘布局,执行如下指令:

 # wsconsctl -w keyboard.encoding=uk

下一个例子我们将"Control L"映射到"Caps Lock" 上:

 # wsconsctl -w keyboard.map+="keysym Caps_Lock = Control_L"

7.2 - OpenBSD能支持控制台鼠标吗?

alpha, amd64i386平台来说, OpenBSD提供了wsmoused(8), 一个FreeBSD上moused(8)的port,您可以通过在rc.conf(8)里加上适当的命令让它在系统启动时自动加载。

7.3 - 访问控制台的屏幕回滚缓存器 (amd64, i386, some Alpha)

在某些平台上, OpenBSD提供了一个控制台屏幕回滚缓存器。它允许您查已经滚过的屏幕内容。您只需简单的使用组合键[SHIFT]+[PGUP] 和 [SHIFT]+[PGDN]就可以在缓存器内翻看已经滚过的屏幕信息。

默认的屏幕回滚缓存器或者允许屏幕回滚的页数是8,这是vga(4)驱动的一个功能,所以没有VGA显卡的计算机将不具备屏幕回滚的功能(很多Alpha 计算机使用的是TGA显卡) 。

因为容量的限制,安装内核并未提供屏幕回滚功能。Switching consoles可以清空回滚缓存器。

7.4 - 我怎样切换控制台? (amd64, i386, Zaurus, some Alpha)

在amd64, i386 和 安装vga(4)卡的Alpha系统上OpenBSD默认提供6个虚拟终端,从/dev/ttyC0 一直到 /dev/ttyC5。ttyC4是为X Window 系统预留的,剩下的5个是字符控制台。您可以使用[CTRL]+[ALT]+[F1], [CTRL]+[ALT]+[F2], [CTRL]+[ALT]+[F3], [CTRL]+[ALT]+[F4] 和 [CTRL]+[ALT]+[F6]在它们之间切换。

X环境使用ttyC4,切换快捷键是[CTRL]+[ALT]+[F5].。当您使用X时,[CTRL]+[ALT]+[Fn] 键可以带您回字符界面;重新[CTRL]+[ALT]+[F5]将会再次进入图形环境。

如果您希望有比默认更多的控制台,使用wsconscfg(8)命令来添加屏幕ttyC6, ttyC7 或更多的。例如:


wsconscfg -t 80x25 6
将为ttyC6产生虚拟终端,使用[CTRL]+[ALT]+[F7]可以进入。如果您想在下次启动后又更多的控制台,不要忘了在您的rc.local(8)上添加命令。

注意除非您在/etc/ttys(5)里把新增加的虚拟控制台设置成"on"或者您重新启动计算机,或者您用kill(1)发送给init(8)一个HUP指令,否则您的新控制台将看不到"login:" 提示符。

在Zaurus平台,默认有两个虚拟控制台(/dev/ttyC0 和 /dev/ttyC1),进入控制台使用 [ALT]+[CALENDAR] and [ALT]+[ADDRESS] ([ALT] 键时左侧的[CTRL] 键右边第二个按键).

7.5 - 我怎样把控制台的分辨率调整为80x50? (amd64, i386, some Alpha)

amd64, i386, 和 VGA Alpha用户通常是一个25行80字符的屏幕显示,然而许多VGA显卡有能力显示更高的字符分辨率——50行80字符。

首先,必须用wsfontload(8)命令将支持更高分辨率字符显示所需的字体装入系统。标准的80x25字符界面使用8x16像素的字体,如果要把行数增大倍我们需要8x8像素的字体。

然后我们必须用virtual console命令删除和重新建立一个我们想要的更高分辨率的virtual console(虚拟控制台)。

您在rc.local(8) 文件内加入如下的几行,下次启动后将自动生效:

wsfontload -h 8 -e ibm /usr/share/misc/pcvtfonts/vt220l.808
wsconscfg -dF 5
wsconscfg -t 80x50 5
当对您的系统进行更改时,推荐您花一些时间读一下有关的手册页以便明白命令的作用。

第一行装入8x8字体,第二行删除控制台5(使用[CTRL]+[ALT]+[F6]进入),第三行创建一个新分辨率50x80的控制台。当您完成这些设置时您会发现您的主终端和其他默认终端的屏幕分辨率是80x25的模式,但是新创建的控制台5(使用[CTRL]+[ALT]+[F6]进入)已经是80x50的分辨率了。

记住 [CTRL]+[ALT]+[F1] 是屏幕 0 (ttyC0). 如果您需要更改其他的屏幕分辨率,简单地对更改分辨率的屏幕应用上述过程,就可以将其的分辨率更改为80x50

您需要避免更改屏幕4(ttyC4, [CTRL]+[ALT]+[F5])的分辨率,因为它是给X预留的图形屏幕。同样您也无法修改主控制台(也就是ttyC0)的分辨率。

正如您所料,所有这些命令必须用root的身份输入,或者用sudo(8)(更好)。

注意: 并非所有的图形卡上这样设置全可以成功。不幸的是并非所有的图形卡全支持80x50字符终端所需调用的字体。在这种情况下,您可以考虑运行X。

7.6 - 我怎样使用一个串口控制台?

有很多原因可能让您在OpenBSD上使用串口控制台 OpenBSD在大多数平台上支持串口控制台,然而各平台间的细节有较大差异。

注意使用串口控制台并不是一个平常的工作——您经常需要准备不常用的缆线,并且机器间的接口也不标准,在一些场合同样的机型也可能有不同的端口。我们这里假设您清楚如何选择合适的缆线以连接您的计算机与串口终端。一个完整的串行端口的指南超出了本文讨论的范围,我们仅给出一个提示:两端端口可以成功匹配并不意味着它可以正常工作。

更改/etc/ttys

在OpenBSD上启用串口控制台要执行两个步骤。首先您必须让OpenBSD把您的串行接口当成一个控制台并处在单用户模式下,这个步骤各平台差别很大。第二您必须使串行端口被用来作为一个交互式终端,以便多用户模式下用户可以登录。这个步骤各平台之间相似,我们将在这里详细描述。

终端会话由/etc/ttys文件控制。OpenBSD在设备上给您一个"login:"提示符之前,它必须在/etc/ttys文件内被启用,做完这些工作后,串行接口将代替终端进行其他工作。在平台上通常有一个键盘和屏幕作为控制台,串行终端通常是默认被禁止的。这个例子中我们还是假设使用i386平台,您必须编辑这句:


     tty00   "/usr/libexec/getty std.9600"   unknown off
让它看起来像:

     tty00   "/usr/libexec/getty std.9600"   vt220   on secure
这里,tty0是串行端口,我们把它当作一个终端。vt220(其他可能的选项包括 vt100, xterm等)是匹配您终端的termcap(5)入口,on 表示为串行端口激活getty ,所以会出现 "login:"提示符,"secure"允许root登录这个控制台(这里可能是也可能不是您所希望的),而9600是终端的波特率。如果您在这里把波特率设成您硬件所能支持的最大值往往会产生问题而非有更好的效果。多数系统有一个"默认"的速度(被启动光盘和(或)启动引导器的默认支持的通常是9600),请您在这里保持默认值,除非您有真正的修改原因。

注意您在使用控制台安装系统时不要做这一步,因为系统此时正运行在单用户模式下,不必为登录使用getty。

在某些平台和某些配置下如果只能使用串口控制台,您必须让系统进入单用户模式才可以才可以做这些更改。

amd64 和 i386

为了让启动程序把串行端口当作一个控制台, 您需要编辑文件/etc/boot.conf,包含这行:
     set tty com0
使用第一个串行端口作为您的控制台。默认的波特率是9600bps,这个值可以在/etc/boot.conf文件内stty参数的那行修改。这个文件在您的启动硬盘上,也可以放在安装软盘内,或者您可以在某次(或第一次)使用串口控制台从OpenBSD second-stage boot loader启动时当出现boot>提示符时键入命令。

amd64 和 i386 说明:

SPARC 和 UltraSPARC

这些机器设计时已经考虑了完全用串口控制台进行维护,你只需简单地拔下键盘,就可以运行串口了。

SPARC 和 UltraSPARC 说明

 ok setenv input-device ttya
 ok setenv output-device ttya
 ok reset

MacPPC

MacPPC机器可以通过OpenFirmware配置串口终端,使用下面的命令:
 ok setenv output-device scca
 ok setenv input-device scca
 ok reset-all
将你的串口终端设置到 57600bps, 8N1.

MacPPC 说明

Mac68k

串口终端可在 Booter 程序中选择, 在 "Options" 的下拉菜单里,选择 "Serial Ports"。检查 "Serial Console" 按钮, 再选择Modem或Printer端口。你需要一根Macintosh的调制解调器或打印机电缆线来连接Mac的串行端口。如果你想将这些设置为默认选项,直接在 Booter 程序中保存你修改的选项。

Mac68k Notes

7.7 - 我怎样让控制台黑屏? (wscons)

当您没有在使用X时如果想在一段非活动状态后关闭监视器,您可以改变下面的wscons(4)变量: 您可以在命令行使用wsconsctl(8)命令来设置这些变量:
 # wsconsctl -w display.screen_off=60000
 display.screen_off -> 60000
或者可以在/etc/wsconsctl.conf文件中设置,这样可以在系统下次启动后永久生效:

     display.vblank=on               # enable vertical sync blank
     display.screen_off=600000       # set screen blank timeout to 10 minutes
     display.kbdact=on               # Restore screen on keyboard input
     display.outact=off              # Restore screen on display output

无论display.kbdact 或 display.outact,任何一个设置为on, blanker就会被激活。

7.8 - 我登陆时输入的全是大写字母!

实际上这是一个特色,不是程序错误。

事实上所有的Unix命令和用户名全是用小写字母。然而,有些非常老的终端只能显示大写字母,所以如果没这个特色,他们很难使用Unix。在一个工作区如果您输入您的名字时全使用大写字母,getty(8)将假设您的终端无法显示小写字母,然后在屏幕上用大写字母显示显示您的名字,并把您键入的内容视为实际上全应该是小写字母,如果您使用密码是大小写混合的或大写的,这时就会出问题。(系统会认为您键入的是小写字母,而与实际的密码不匹配。)

在login提示符下键入CTRL-D将会终止getty(8),然后init(8)会重新调入一个新的,这个新的getty(8)可以正常分辨大小写。

7.9 - 什么是tmux?

说明: tmux是OpenBSD 4.8的一个新功能

对那些熟悉"screen"(提供了package)或者"window"(曾经包含在基本系统内)的人来说, 我们很容易解答这个问题, 只需说明tmux(1)提供了许多类似screen和window的功能,还有许多另外的新功能。

对那些不熟悉这些程序的人来说, tmux是一个多用型终端。也就是允许一系列其它进程来共享同一个screen进行输入输出的一个程序。在tmux中, 这样的一个程序的集合被称为一个会话(session), 每个程序包含在一个tmux的screen中。

除了共享终端, tmux可以让你从一个屏幕中分离出一个会话和它们的窗口, 让它们驻留在后台继续运行, 然后可以再次将它们关联到原来的(或不同的)screen上。一个会话可以被手动分离出来或者因意外的事件(例如网络连接断开)而分离出来, , 不管哪种情况这些程序仍然保持着正常运行。

tmux 还有许多其它的特性,例如将单个窗口分成多个区域(被称为panes,窗格),每个窗口显示内容的历史记录,还可以在各个窗口间拷贝、粘贴,配置组合键以及锁住终端。想了解更多的信息请参阅tmux(1)用户手册。

我怎样用tmux?

第一步是先运行tmux:

$ tmux

这会启动一个带有单个会话的新tmux,这个会话被称为"0",并会产生一个客户端在screen上显示它。多数情况下screen会显示一个带有shell提示符的窗口,并且你会注意到窗口的最后一行是一个状态行。在左边方括号内显示的是这个会话的名称, 右边是窗口的标题(对shell来说一般是空的)和时间, 中间是当前打开窗口的一个摘要。 在你新的会话里, 当前打开的窗口将包含一个空项, 例如:

0:ksh*

简单说句关于终端的题外话:在OpenBSD系统内, 应用程序通过TERM环境变量可以知道终端的能力,这是设定在terminfo(5)数据库内的一个项目,它可以告诉应用程序有关终端的情况, 例如, 是否支持彩色, 是否支持插入行, 或者其它很多事情。 有件重要的事情是数据库中"xterm"项不包括颜色, 所以tmux默认不会使用彩色, 如果你想要彩色显示应该把TERM中的"xterm"设置成"xterm-xfree86"("XTerm*termName" X resource 可以设置在 .Xdefaults 内以便让所有的xterms使用它)。 另一件重要的事情是tmux内启动的shell中的TERM被设定到"screen"或者从shell运行的程序可能显示会不正确 - tmux 自己会进行设定, 但请注意不要在shell的启动文件里修改它。

我们还是回到状态行, 数字 "0" 是窗口索引, "ksh" 是这个窗口的名字, 而这里的 "*" 表明这是当前的窗口显示在状态行上。 任何输入全会传递到shell并显示出来。例如,如果你输入"top":

$ top

它会正常的运行, 运行在状态行上的screen部分。 你也可能注意到了状态行上的窗口名称由 "ksh" 变成了 "top" —— tmux 以当前窗口内运行的程序名称重新命名这个窗口。(译者注:也就是窗口的名称映射出正在窗口内运行的程序。)

现在, 我们假设你想从窗口内分离出tmux并且回到原始的shell,也就是你刚才运行它的地方。 当你首次同时按下<Ctrl> b ,然后按下 d 就可以将tmux会话分离出来。 Ctrl-b 键组 (在tmux和它的用户手册上缩写为 "C-b") 被称为前缀键,它被用来通知tmux后面按下的键是一条指令,tmux应根据这条指令有所动作, 而不是将这个键(越过程序)直接传递到窗口里(显示)。

当你按下 Ctrl-b d 回到shell提示符后, 使用 "attach" 命令可以重新关联 tmux 会话 :

$ tmux attach

这个带有状态行的 tmux 会话又重新显示出来了, "top" 命令还在那里忙乎着。 (如果你的tmux后面没有带参数, 将产生第二个会话, 它被命名为 "1"。)

下面, 让我们来创建第二个窗口 。 这需要使用 "c" 键: 按下前缀键 Ctrl-b, 然后按下 "c" 键。 将产生一个新的窗口同样一个shell提示符将显示在screen上。 状态行将被更新及显示新的窗口:

0:top- 1:ksh*

符号 "-" 前面显示的是先前的当前窗口(上一个窗口),现在再次按下 Ctrl-b c 创建另一个新shell:

0:top  1:ksh- 2:ksh*

有几个命令可以用来在窗口间切换。 你目前在窗口2,如果你键入Ctrl-b p , 就会切换到前一个窗口,也就是窗口1;如果键入 Ctrl-b n 则会切换到下一个窗口: 但目前因为没有窗口3,所以当前窗口会"转回"到窗口0。 你也可以按下 Ctrl-b w 而进入一个打开窗口的交互式菜单, Ctrl-b l (译者注:注意这里是l,表示last,不是1)切换到最后一个窗口(标记为"-"), 或者 Ctrl-b 0 切换到窗口0, Ctrl-b 1 到窗口1, 以此类推, 一直到 Ctrl-b 9 切换到窗口9。 所以, (译者注:假设你还在窗口2)要回到最"顶"端的窗口0, 你可以直接按 Ctrl-b 0 ,或者按两次 Ctrl-b p 就切换到窗口1了, Ctrl-b n 就从窗口2转回到0, 或者按下 Ctrl-b w 然后从列表中选择窗口0。

有时你想创建一个窗口直接运行一个程序,而不是先进入shell再键入命令来运行。 你可以在tmux的命令提示符下键入 Ctrl-b : 让状态行显示显示一个 ":" 提示符,这时你就可以输入命令了。所有的tmux命令在用户手册上全可以查到。 这时需要一条 "new-window" 命令, 每条命令全有一个可以用于速记的别名,这样可以不必输入命令的全名,"new-window"的速记别名是"neww"。所以,如果你要创建一个新窗口运行tetris(译者注:俄罗斯方块。) 输入:

neww tetris

这个新窗口在tetris退出后就会关闭, 或者使用Ctrl-b & 组合键强制清除。这会先显示一个提示符让你确认,一经确认会关闭窗口并终止窗口内运行的程序。

另一个常用的命令是重命名一个窗口。这可以通过组合键 Ctrl-b , 。 状态行将变成一个显示 "(rename-window)" 的提示符,这时你可以输入新名称。重命名一个窗口将关闭此窗口的自动重命名功能,如果你想重新启用这项功能,按下 Ctrl-b : 可以得到命令行提示符,然后键入下列命令(下一小节将详细解释这些参数的含义):

setw -u automatic-rename

还有一个值得记住的组合键是: Ctrl-b ? , 这会显示所有tmux的组合键和可运行的命令。 例如, Ctrl-b ? 会显示 c 键被绑定到 "new-window"(新窗口) 命令, 而 n 键则表示 "next-window" (下一窗口)命令。

配置 tmux

很多用户希望自己设置tmux的外观和行为, 这可以通过配置文件 ~/.tmux.conf 来完成。 这个文件是一个tmux的命令列表,tmux启动时会在会在创建第一个会话前调用这个文件。 所有tmux的命令全列在它的用户手册里, 但是少数一些常用的解释你可能希望放在你的配置文件里,我们在下面讨论。

最主要的是设定选项, 在tmux里有两类选项: 会话选项窗口选项 ,会话选项控制会话的行为以及某窗口的窗口选项会话选项窗口选项都可以在全局选项里设定。 当tmux要确定会话或窗口的某一个选项的具体设置值时, 它首先查找是否存在该选项的本地选项, 如果这个选项在本地没有设定,tmux才会使用这个选项的全局设定值。

会话选项带有 "set-option" (亦作 "set") 命令, 而窗口选项带有 "set-window-option" 命令 (亦作 "setw")。 如果你不愿意为每个用户设置当前窗口或会话的本地选项,你可以设定全局选项, 使用 "-g" 标签(global)。 这些命令也可以使用一些其它的标签, 例如 "-u" (表示unset)指定不设置本地选项而让窗口或会话采用全局选项的设定。

在配置文件中, 通常使用全局选项。我们看几个定制状态行的例子:

set -g status-bg blue
set -g status-right '#(sysctl vm.loadavg)'
setw -g window-status-current-attr underscore

将上面的三行放到 .tmux.conf 文件内,然后重新启动 tmux 会发现状态行的背景颜色变成了蓝色(blue), 将当前的负荷平均值放在右侧并且强调当前窗口。 用下列命令可以完全关闭状态行:

set -g status off

还有许多其它的选项; 另一个很方便的选项就是在明林提示符、窗口列表以及其它的tmux交互模式中使用vi(1)风格的组合键:

set -g status-keys vi
setw -g mode-keys vi

当前的选项和设定值可以通过命令 "show-options" 和 "show-window-options" 列出来,同样如果在命令里加入了 "-g" 就会显示全局选项。

配置文件还可以用来修改命令组合键, 组合键就是你先按下 Ctrl-b 然后再按下另外一个键。 设置添加修改组合键的命令是 "bind-key" (亦作 "bind") ,而删除组合键的命令是 "unbind-key" (亦作 "unbind")。 下面是两个用"bind-key"设置组合键的例子:

bind C-d detach
bind / neww 'exec top'

第一行是创建组合键 Ctrl-b Ctrl-d 将tmux分离出来, 作用和默认的 Ctrl-b d 一样, 而第二行设定组合键 Ctrl-b / 来创建一个在最上层运行的新窗口。

很多人喜欢使用不同的前缀键而不是 Ctrl-b(译者注:我是觉得一只手同时按下这两个键有些费力), 这可以通过使用"set-option"和组合键来改变前缀键选项,还有就是连着按两次前缀键将输入传送至窗口(?), 将前缀键改为 Ctrl-a:

set -g prefix C-a
unbind C-b
bind C-a send-prefix

这个配置文件的目的是在tmux启动时建立一个初始设置。这个例子较前一个略复杂一些。 在tmux中一个会话不能没有窗口、窗口也不能没有会话,所以, 要通过配置文件创建窗口,必须给这些窗口赋予一个会话。 例如 (注意"new-session"命令可没有"new"这样的的缩写):

new -d 'exec top'
neww -d
neww -d

这些命令创建一个新的会话,同时在它的第一个窗口内运行一个"top", 然后在创建另外两个窗口。 这里的"-d"标签表示tmux不会分离出这个新会话或将新窗口作为当前窗口。 在将这些行写入 .tmux.conf 文件前, 还有另外一个问题。 当不带参数地运行tmux时,它会执行 "new-session" 命令, 所以你在shell中键入 "tmux" , 配置文件会告诉 tmux 产生一个新会话, 然后来自shell的命令告诉它在创建另一个, 所以你最终有两个会话。 为了避免这种情况, 当从配置文件创建一个会话时应该以"tmux attach"启动tmux - 这意味着它从 .tmux.conf 文件创建会话,然后马上在没有创建第二个会话前将它分离出来。

tmux高级用法

这小节简要叙述一些tmux的高级用法,更多的信息请参用户手册

在tmux里你可以在窗口间拷贝粘贴。 这是通过拷贝文字到拷贝模式, 然后使用粘贴命令进行粘贴。 进入拷贝模式的组合键是 Ctrl-b [ 。 在拷贝模式内 (用窗口选项 "mode-keys" 设定为emacs, vi 键的设定请参看手册) 可以使用箭头键定位光标, Ctrl-Space 开始选择、 Ctrl-w 拷贝。 你还可以使用 Page Up, Page Down, Ctrl-aCtrl-e 移动光标。 按下 q 或者 Escape 键退出拷贝模式, 然后, Ctrl-b ] 将拷贝的文件粘贴在当前的窗口内,就像你在当前的窗口直接输入的一样。

tmux 的脚本功能很强大, 命令提示符下可以输入多数命令或者在shell下使用绑定的组合键。 几乎所有的tmux命令全支持一个选项参数 "-t" ,它用来指定作用在哪个会话或窗口上。例如, 这个命令:

$ tmux kill-window -t0:1
将删除会话0里的窗口1,而:
$ tmux new-window -tmysession

在名字为"mysession"的会话中创建一个新窗口。 很多命令可以使用其它的参数, 例如 "new-window" 命令可以使用一个 "-n" 选项来给新窗口命令, 而 "new-session" 可以使用几个参数来指定与会话同时产生的第一个窗口的属性。当一条命令被绑定到一个键上或者从shell提示符运行这个命令时可以合理地使用这些参数。

还有一个用用处的功能是将一个单独的窗口分割成几个区域, 称为窗格。 在4.6版内, 你可以用 Ctrl-b " 组合键垂直地(由上至下)分割一个窗口。 一个窗格可以通过 Ctrl-b Alt-UpCtrl-b Alt-Down 来增大或缩小,同时可以用 Ctrl-b o 切换窗格。 另外, 一个窗口被分割成窗格后可能变为一种或几种固定的布局, 它们通过 Ctrl-b Space 循环切换,但这些布局内的窗格则不能改变大小。目前tmux的功能已经扩展为支持水平分割窗口(Crtl-b %),因此一旦被应用就变成了固定布局(也同样是键入Ctrl-b Space)马上就可以随意横向或纵向地改变大小。

[索引] [第六章 - 网络] [第八章 - 常见问题]


[back]www@openbsd.org
$OpenBSD: faq7.html,v 1.78 2008/03/01 11:31:08 steven Exp $