《OpenBSD 4.6 FAQ 中文版 第七章.键盘与显示控制》
发表于 : 2010-01-21 11:10
7 - 键盘和显示控制
--------------------------------------------------------------------------------
目录
7.1 - 我如何重新映射键盘?(wscons)
7.2 - OpenBSD能支持控制台鼠标吗?
7.3 - 访问控制台的屏幕回滚缓存器。(amd64, i386, 一些Alpha)
7.4 - 我怎样切换控制台? (amd64, i386, Zaurus, some Alpha)
7.5 - 我怎样将控制台分辨率调整为80x50? (amd64, i386, some Alpha)
7.6 - 我怎样使用一个串口控制台?
7.7 - 我怎样让控制台黑屏? (wscons)
7.8 - 我登陆时输入的全是大写字母!
7.9 - 什么是tmux(1)?
--------------------------------------------------------------------------------
7.1 - 我如何重新映射键盘? (wscons)
ports中可以使用wscons(4)控制台驱动器的平台: alpha, amd64, hppa, i386, mac68k, macppc, sparc, sparc64, vax及zaurus。
有了wscons(4)控制台,大多数选项可以用wsconsctl(8)命令控制。例如,您想用wsconsctl(8)改变键盘布局,执行如下指令:
下一个例子我们将"Control L"映射到"Caps Lock" 上:
7.2 - OpenBSD能支持控制台鼠标吗?
对alpha, amd64和i386平台来说, 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 或更多的。例如:
将为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) 文件内加入如下的几行,下次启动后将自动生效:
当对您的系统进行更改时,推荐您花一些时间读一下有关的手册页以便明白命令的作用。
第一行装入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上使用串口控制台
记录控制台输出(对于文件)。
远程管理。
方便管理大量的机器。
提供机器上的dmesg 信息,这个信息采用其余方式很难得到。
如果系统崩溃可以提供一个准确的"trace" 和 "ps"输出以便开发者有机会解决这个错误。
OpenBSD在大多数平台上支持串口控制台,然而各平台间的细节有较大差异。
注意使用串口控制台并不是一个平常的工作——您经常需要准备不常用的缆线,并且机器间的接口也不标准,在一些场合同样的机型也可能有不同的端口。我们这里假设您清楚如何选择合适的缆线以连接您的计算机与串口终端。一个完整的串行端口的指南超出了本文讨论的范围,我们仅给出一个提示:两端端口可以成功匹配并不意味着它可以正常工作。
更改/etc/ttys
在OpenBSD上启用串口控制台要执行两个步骤。首先您必须让OpenBSD把您的串行接口当成一个控制台并处在单用户模式下,这个步骤各平台差别很大。第二您必须使串行端口被用来作为一个交互式终端,以便多用户模式下用户可以登录。这个步骤各平台之间相似,我们将在这里详细描述。
终端会话由/etc/ttys文件控制。OpenBSD在设备上给您一个"login:"提示符之前,它必须在/etc/ttys文件内被启用,做完这些工作后,串行接口将代替终端进行其他工作。在平台上通常有一个键盘和屏幕作为控制台,串行终端通常是默认被禁止的。这个例子中我们还是假设使用i386平台,您必须编辑这句:
让它看起来像:
这里,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 说明:
OpenBSD的串行端口编号从tty00 开始,DOS/Windows 从COM1 开始标识它们,记住tty02 是 COM3, 不是 COM2
有些系统允许在没有显卡的计算机上进行操作,但绝不是所有系统全可以——许多系统此时会认为不具备条件。有些机器会因为仅仅没有检测到键盘而拒绝工作。
有些系统可以在BIOS里设置一个选项将所有的键盘和屏幕的活动重定向到一个串行端口,这样计算机就完全可以通过串行端口进行维修。您的计算机也许不同——当使用这项功能时,有的BIOS会绝对从串行端口装入引导,所以将不会从内核引导。有的BIOS里有一个选项"Continue Console Redirection after POST" (Power On Self Test),这个选项应该关闭,这样启动引导器和内核才能通过串行端口工作。很不幸,并非多数计算机全可以使用串行端口控制台。
不像其他的平台,PC兼容机设计时没有考虑从串口控制台运行程序。即使有这个功能的PC机也仅把它当作一个BIOS里的选项——而且一旦配置搞乱时您会发现系统又开始搜寻标准的监视器和键盘。通常情况下amd64和i386计算机有问题时您应该准备好监视器和键盘。
您需要按照上面的操作编辑/etc/ttys。
SPARC 和 UltraSPARC
这些机器设计时已经考虑了完全用串口控制台进行维护,你只需简单地拔下键盘,就可以运行串口了。
SPARC 和 UltraSPARC 说明
SPARC上的串口标记为 ttya, ttyb, etc.
不像一些其它平台, 不需要更改 /etc/ttys 就可以使用串口控制台。
SPARC/UltraSPARC系统将串口控制台的中断信号理解为一个 STOP-A 命令, 将系统回切到外部提示符, 并同时停止所有的应用程序和操作系统。 这在你需要时是很方便的,但遗憾的是一些串口终端在关闭时和一些RS-232设备开关设备会向计算机发送一些类似暂停的信号,会导致机器停止工作。请在用在生产环境前先进性测试。
如果你的系统带有键盘和监视器, 你仍然可以通过在OK提示符下键入下列命令强制用串口终端替代它们:
如果键盘和监视器(ttyC0)在 /etc/ttys (上面)里还是启用状态,你可以在X里继续使用它们。
MacPPC
MacPPC机器可以通过OpenFirmware配置串口终端,使用下面的命令:
将你的串口终端设置到 57600bps, 8N1.
MacPPC 说明
很遗憾,串口终端在多数MacPPC上不能直接使用,尽管这些机器上确实带有串口硬件,但是无法从外部访问机器。幸运的是,一些公司提供了一些附加设备可以让这个通讯端口作为串口终端(或其它用途)使用。用呢喜欢的搜索引擎查一下 "Macintosh internal serial port"。
你必须在 /etc/ttys 内将你的tty00改设为 on 并且像上面详细描述的那样用57600替代9600的默认速度,这样就可以在启动到多用户模式前进入单用户模式,然后串口终端就可以工作了。
Mac68k
串口终端可在 Booter 程序中选择, 在 "Options" 的下拉菜单里,选择 "Serial Ports"。检查 "Serial Console" 按钮, 再选择Modem或Printer端口。你需要一根Macintosh的调制解调器或打印机电缆线来连接Mac的串行端口。如果你想将这些设置为默认选项,直接在 Booter 程序中保存你修改的选项。
Mac68k Notes
调制解调器端口是tty00, 打印机端口是tty01。
除非被调用否则Mac68k不会开启串行端口,所以你的外部设备在OpenBSD启动过程开始前不会显示任何信号。(译者理解:是否需要连上串口终端后再启动一次?)
你不许如上所述启用通信端口(tty00 或者tty01)。
7.7 - 我怎样让控制台黑屏? (wscons)
当您没有在使用X时如果想在一段非活动状态后关闭监视器,您可以改变下面的wscons(4)变量:
display.vblank 设置为on将禁用垂直同步脉冲,它将使很多监视器进入一种"节能"模式。这种模式的屏幕恢复需要的时间比较长,但是减少监视器的能量消耗和产生的热量。如果设置为off,看着是黑屏状态,但是监视器还在正常的接收水平和垂直脉冲,所以需要时屏幕马上可以恢复。
display.screen_off 指定关闭的时限,以千分之一秒为单位。例如60000表示一分钟后关闭。
display.kbdact 指定键盘被激活后立刻开启监视器,通常这个功能比较受欢迎。
display.outact 指定如果有屏幕输出立刻开启监视器。
您可以在命令行使用wsconsctl(8)命令来设置这些变量:
或者可以在/etc/wsconsctl.conf文件中设置,这样可以在系统下次启动后永久生效:
无论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.6的一个新功能
对那些熟悉"screen"(提供了package)或者"window"(曾经包含在基本系统内)的人来说, 我们很容易解答这个问题, 只需说明tmux(1)提供了许多类似screen和window的功能,还有许多另外的新功能。
对那些不熟悉这些程序的人来说, tmux是一个多用型终端。也就是允许一系列其它进程来共享同一个screen进行输入输出的一个程序。在tmux中, 这样的一个程序的集合被称为一个会话(session), 每个程序包含在一个tmux的screen中。
除了共享终端, tmux可以让你从一个屏幕中分离出一个会话和它们的窗口, 让它们驻留在后台继续运行, 然后可以再次将它们关联到原来的(或不同的)screen上。一个会话可以被手动分离出来或者因意外的事件(例如网络连接断开)而分离出来, , 不管哪种情况这些程序仍然保持着正常运行。
tmux 还有许多其它的特性,例如将单个窗口分成多个区域(被称为panes,窗格),每个窗口显示内容的历史记录,还可以在各个窗口间拷贝、粘贴,配置组合键以及锁住终端。想了解更多的信息请参阅tmux(1)用户手册。
我怎样用tmux?
第一步是先运行tmux:
这会启动一个带有单个会话的新tmux,这个会话被称为"0",并会产生一个客户端在screen上显示它。多数情况下screen会显示一个带有shell提示符的窗口,并且你会注意到窗口的最后一行是一个状态行。在左边方括号内显示的是这个会话的名称, 右边是窗口的标题(对shell来说一般是空的)和时间, 中间是当前打开窗口的一个摘要。 在你新的会话里, 当前打开的窗口将包含一个空项, 例如:
简单说句关于终端的题外话:在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":
它会正常的运行, 运行在状态行上的screen部分。 你也可能注意到了状态行上的窗口名称由 "ksh" 变成了 "top" —— tmux 以当前窗口内运行的程序名称重新命名这个窗口。(译者注:也就是窗口的名称映射出正在窗口内运行的程序。)
现在, 我们假设你想从窗口内分离出tmux并且回到原始的shell,也就是你刚才运行它的地方。 当你首次同时按下<Ctrl> 和 b ,然后按下 d 就可以将tmux会话分离出来。 Ctrl-b 键组 (在tmux和它的用户手册上缩写为 "C-b") 被称为前缀键,它被用来通知tmux后面按下的键是一条指令,tmux应根据这条指令有所动作, 而不是将这个键(越过程序)直接传递到窗口里(显示)。
当你按下 Ctrl-b d 回到shell提示符后, 使用 "attach" 命令可以重新关联 tmux 会话 :
这个带有状态行的 tmux 会话又重新显示出来了, "top" 命令还在那里忙乎着。 (如果你的tmux后面没有带参数, 将产生第二个会话, 它被命名为 "1"。)
下面, 让我们来创建第二个窗口 。 这需要使用 "c" 键: 按下前缀键 Ctrl-b, 然后按下 "c" 键。 将产生一个新的窗口同样一个shell提示符将显示在screen上。 状态行将被更新及显示新的窗口:
符号 "-" 前面显示的是先前的当前窗口(上一个窗口),现在再次按下 Ctrl-b c 创建另一个新shell:
有几个命令可以用来在窗口间切换。 你目前在窗口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(译者注:俄罗斯方块。) 输入:
这个新窗口在tetris退出后就会关闭, 或者使用Ctrl-b & 组合键强制清除。这会先显示一个提示符让你确认,一经确认会关闭窗口并终止窗口内运行的程序。
另一个常用的命令是重命名一个窗口。这可以通过组合键 Ctrl-b , 。 状态行将变成一个显示 "(rename-window)" 的提示符,这时你可以输入新名称。重命名一个窗口将关闭此窗口的自动重命名功能,如果你想重新启用这项功能,按下 Ctrl-b : 可以得到命令行提示符,然后键入下列命令(下一小节将详细解释这些参数的含义):
还有一个值得记住的组合键是: 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)指定不设置本地选项而让窗口或会话采用全局选项的设定。
在配置文件中, 通常使用全局选项。我们看几个定制状态行的例子:
将上面的三行放到 .tmux.conf 文件内,然后重新启动 tmux 会发现状态行的背景颜色变成了蓝色(blue), 将当前的负荷平均值放在右侧并且强调当前窗口。 用下列命令可以完全关闭状态行:
还有许多其它的选项; 另一个很方便的选项就是在明林提示符、窗口列表以及其它的tmux交互模式中使用vi(1)风格的组合键:
当前的选项和设定值可以通过命令 "show-options" 和 "show-window-options" 列出来,同样如果在命令里加入了 "-g" 就会显示全局选项。
配置文件还可以用来修改命令组合键, 组合键就是你先按下 Ctrl-b 然后再按下另外一个键。 设置添加修改组合键的命令是 "bind-key" (亦作 "bind") ,而删除组合键的命令是 "unbind-key" (亦作 "unbind")。 下面是两个用"bind-key"设置组合键的例子:
第一行是创建组合键 Ctrl-b Ctrl-d 将tmux分离出来, 作用和默认的 Ctrl-b d 一样, 而第二行设定组合键 Ctrl-b / 来创建一个在最上层运行的新窗口。
很多人喜欢使用不同的前缀键而不是 Ctrl-b(译者注:我是觉得一只手同时按下这两个键有些费力), 这可以通过使用"set-option"和组合键来改变前缀键选项,还有就是连着按两次前缀键将输入传送至窗口(?), 将前缀键改为 Ctrl-a:
这个配置文件的目的是在tmux启动时建立一个初始设置。这个例子较前一个略复杂一些。 在tmux中一个会话不能没有窗口、窗口也不能没有会话,所以, 要通过配置文件创建窗口,必须给这些窗口赋予一个会话。 例如 (注意"new-session"命令可没有"new"这样的的缩写):
这些命令创建一个新的会话,同时在它的第一个窗口内运行一个"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-a 和 Ctrl-e 移动光标。 按下 q 或者 Escape 键退出拷贝模式, 然后, Ctrl-b ] 将拷贝的文件粘贴在当前的窗口内,就像你在当前的窗口直接输入的一样。
tmux 的脚本功能很强大, 命令提示符下可以输入多数命令或者在shell下使用绑定的组合键。 几乎所有的tmux命令全支持一个选项参数 "-t" ,它用来指定作用在哪个会话或窗口上。例如, 这个命令:
将删除会话0里的窗口1,而:
在名字为"mysession"的会话中创建一个新窗口。 很多命令可以使用其它的参数, 例如 "new-window" 命令可以使用一个 "-n" 选项来给新窗口命令, 而 "new-session" 可以使用几个参数来指定与会话同时产生的第一个窗口的属性。当一条命令被绑定到一个键上或者从shell提示符运行这个命令时可以合理地使用这些参数。
还有一个用用处的功能是将一个单独的窗口分割成几个区域, 称为窗格。 在4.6版内, 你可以用 Ctrl-b " 组合键垂直地(由上至下)分割一个窗口。 一个窗格可以通过 Ctrl-b Alt-Up 及 Ctrl-b Alt-Down 来增大或缩小,同时可以用 Ctrl-b o 切换窗格。 另外, 一个窗口被分割成窗格后可能变为一种或几种固定的布局, 它们通过 Ctrl-b Space 循环切换,但这些布局内的窗格则不能改变大小。目前tmux的功能已经扩展为支持水平分割窗口(Crtl-b %),因此一旦被应用就变成了固定布局(也同样是键入Ctrl-b Space)马上就可以随意横向或纵向地改变大小。
--------------------------------------------------------------------------------
目录
7.1 - 我如何重新映射键盘?(wscons)
7.2 - OpenBSD能支持控制台鼠标吗?
7.3 - 访问控制台的屏幕回滚缓存器。(amd64, i386, 一些Alpha)
7.4 - 我怎样切换控制台? (amd64, i386, Zaurus, some Alpha)
7.5 - 我怎样将控制台分辨率调整为80x50? (amd64, i386, some Alpha)
7.6 - 我怎样使用一个串口控制台?
7.7 - 我怎样让控制台黑屏? (wscons)
7.8 - 我登陆时输入的全是大写字母!
7.9 - 什么是tmux(1)?
--------------------------------------------------------------------------------
7.1 - 我如何重新映射键盘? (wscons)
ports中可以使用wscons(4)控制台驱动器的平台: alpha, amd64, hppa, i386, mac68k, macppc, sparc, sparc64, vax及zaurus。
有了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, amd64和i386平台来说, 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上使用串口控制台
记录控制台输出(对于文件)。
远程管理。
方便管理大量的机器。
提供机器上的dmesg 信息,这个信息采用其余方式很难得到。
如果系统崩溃可以提供一个准确的"trace" 和 "ps"输出以便开发者有机会解决这个错误。
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 说明:
OpenBSD的串行端口编号从tty00 开始,DOS/Windows 从COM1 开始标识它们,记住tty02 是 COM3, 不是 COM2
有些系统允许在没有显卡的计算机上进行操作,但绝不是所有系统全可以——许多系统此时会认为不具备条件。有些机器会因为仅仅没有检测到键盘而拒绝工作。
有些系统可以在BIOS里设置一个选项将所有的键盘和屏幕的活动重定向到一个串行端口,这样计算机就完全可以通过串行端口进行维修。您的计算机也许不同——当使用这项功能时,有的BIOS会绝对从串行端口装入引导,所以将不会从内核引导。有的BIOS里有一个选项"Continue Console Redirection after POST" (Power On Self Test),这个选项应该关闭,这样启动引导器和内核才能通过串行端口工作。很不幸,并非多数计算机全可以使用串行端口控制台。
不像其他的平台,PC兼容机设计时没有考虑从串口控制台运行程序。即使有这个功能的PC机也仅把它当作一个BIOS里的选项——而且一旦配置搞乱时您会发现系统又开始搜寻标准的监视器和键盘。通常情况下amd64和i386计算机有问题时您应该准备好监视器和键盘。
您需要按照上面的操作编辑/etc/ttys。
SPARC 和 UltraSPARC
这些机器设计时已经考虑了完全用串口控制台进行维护,你只需简单地拔下键盘,就可以运行串口了。
SPARC 和 UltraSPARC 说明
SPARC上的串口标记为 ttya, ttyb, etc.
不像一些其它平台, 不需要更改 /etc/ttys 就可以使用串口控制台。
SPARC/UltraSPARC系统将串口控制台的中断信号理解为一个 STOP-A 命令, 将系统回切到外部提示符, 并同时停止所有的应用程序和操作系统。 这在你需要时是很方便的,但遗憾的是一些串口终端在关闭时和一些RS-232设备开关设备会向计算机发送一些类似暂停的信号,会导致机器停止工作。请在用在生产环境前先进性测试。
如果你的系统带有键盘和监视器, 你仍然可以通过在OK提示符下键入下列命令强制用串口终端替代它们:
代码: 全选
ok setenv input-device ttya
ok setenv output-device ttya
ok reset
如果键盘和监视器(ttyC0)在 /etc/ttys (上面)里还是启用状态,你可以在X里继续使用它们。
MacPPC
MacPPC机器可以通过OpenFirmware配置串口终端,使用下面的命令:
代码: 全选
ok setenv output-device scca
ok setenv input-device scca
ok reset-all
将你的串口终端设置到 57600bps, 8N1.
MacPPC 说明
很遗憾,串口终端在多数MacPPC上不能直接使用,尽管这些机器上确实带有串口硬件,但是无法从外部访问机器。幸运的是,一些公司提供了一些附加设备可以让这个通讯端口作为串口终端(或其它用途)使用。用呢喜欢的搜索引擎查一下 "Macintosh internal serial port"。
你必须在 /etc/ttys 内将你的tty00改设为 on 并且像上面详细描述的那样用57600替代9600的默认速度,这样就可以在启动到多用户模式前进入单用户模式,然后串口终端就可以工作了。
Mac68k
串口终端可在 Booter 程序中选择, 在 "Options" 的下拉菜单里,选择 "Serial Ports"。检查 "Serial Console" 按钮, 再选择Modem或Printer端口。你需要一根Macintosh的调制解调器或打印机电缆线来连接Mac的串行端口。如果你想将这些设置为默认选项,直接在 Booter 程序中保存你修改的选项。
Mac68k Notes
调制解调器端口是tty00, 打印机端口是tty01。
除非被调用否则Mac68k不会开启串行端口,所以你的外部设备在OpenBSD启动过程开始前不会显示任何信号。(译者理解:是否需要连上串口终端后再启动一次?)
你不许如上所述启用通信端口(tty00 或者tty01)。
7.7 - 我怎样让控制台黑屏? (wscons)
当您没有在使用X时如果想在一段非活动状态后关闭监视器,您可以改变下面的wscons(4)变量:
display.vblank 设置为on将禁用垂直同步脉冲,它将使很多监视器进入一种"节能"模式。这种模式的屏幕恢复需要的时间比较长,但是减少监视器的能量消耗和产生的热量。如果设置为off,看着是黑屏状态,但是监视器还在正常的接收水平和垂直脉冲,所以需要时屏幕马上可以恢复。
display.screen_off 指定关闭的时限,以千分之一秒为单位。例如60000表示一分钟后关闭。
display.kbdact 指定键盘被激活后立刻开启监视器,通常这个功能比较受欢迎。
display.outact 指定如果有屏幕输出立刻开启监视器。
您可以在命令行使用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.6的一个新功能
对那些熟悉"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-a 和 Ctrl-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-Up 及 Ctrl-b Alt-Down 来增大或缩小,同时可以用 Ctrl-b o 切换窗格。 另外, 一个窗口被分割成窗格后可能变为一种或几种固定的布局, 它们通过 Ctrl-b Space 循环切换,但这些布局内的窗格则不能改变大小。目前tmux的功能已经扩展为支持水平分割窗口(Crtl-b %),因此一旦被应用就变成了固定布局(也同样是键入Ctrl-b Space)马上就可以随意横向或纵向地改变大小。