闪光警告 mini-Howto <author>Alessandro Rubini, <tt/rubini@linux.it/ <date>v2.2, 11十一月 1997 <abstract> 文件解释在一个系统上如何使用 termcap 设定一个闪光警告 和描述如何依需求使喇叭声无效. </abstract> <!--目录 --> <toc> <!--文件开始 --> <sect>介绍 <p> 每当一个 BEL 字元(ASCII 代码 7)输出时 Linux console 发出喇叭声 .虽然预设行为是一个正确的选择 ,许多用户不喜欢他们的电脑发出发出哔哔声.这份 mini-Howto 意义用来解释如何告诉应用程式说不要产生 BEL 代码.它也解释如何教导核心和 X 视窗系统当一个 BEL 产生时避免发出哔哔声.注意文件大部分 谈及文字 console ,当设定 X 伺服器 是容易的 catch-all 针对在一个图形的环境工作的任何使用者. <p> 面对一个爱挑剔的电脑以我的意见最好的方法是修正 硬体,我自己的电脑甚至没有配置一个扩音器. <sect>Spekearectomy <p> Speakerectomy 针对喇叭声的问题 最直接的解决方法就是把喇叭拿(拔)掉, 这样就听不到喇叭的声音了. .这个运作是直接的和你 甚至不需要任何其他的做法,如果你要的话它仍有改进的空间. <p> PC 是通常装备一个笨拙的切换较低的 CPU 时脉的开关. 当你在一个多工环境中工作时这开关是从未使用,当 你甚至不需要把电脑慢下来执行游戏基础在 软体 loops 上.不幸的是我们不能使用切换增加 处理器速度,但是我们可以使用它使扩音器 启动/无效 .有时扩音器是有用的假使你享受一个 silent number cruncher cruncher,例如信号结束的一个 lenghty 编辑.修改开关功能性,只要从主要的电路版和它依序连接扩音器的线分开来 . <p> 膝上型电脑的拥有人,不幸的不容易的使用 扩音器,他们其中没有一个剩馀的切换开关去转变成另一个 不同的工作.针对这样的用户较好的解决方案是设定 他们的软体避免发出哔哔声,如以下的描述. <sect>每一个 console 发出哔哔声设定 <p> 在 Linux 1.3.43 时候, Martin Mares 加入设定发出哔哔声 程度和持续的能力,靠修改 <tt/ console.c/.每一个 console 可以是被设定特色一个不同的持续 和/或者 喇叭声音的程度 ;任务被完成靠使用 escape 顺序输出 到 console 设备.你可以设定你自己的 <tt>~/.profile</tt> 或者 <tt>~/.login</tt>档案选择一个不同的哔声设定联接到 各 console (或者完全一点也不发出哔哔声,如果需要的话). <p> escape 顺序如以下运作: <itemize> <item>ESC-<tt/[10;/xx<tt/]/ 选择喇叭声频率用赫芝.这个值 应在□围 21-32766,否则这个值是没有被定义. 如果 `xx' 参数值遗失了,预设值是 (750赫兹) 将会运作, 当在 `ESC-<tt/[10]/. <item>ESC-<tt/[11;/xx<tt/]/ 选择喇叭声持续,在 milli-seconds (毫秒). 如果你指定超过 2秒,预设使用 (125ms).然後再一次 ,如果 `xx' 参数值遗失了 (ESC-<tt/[11]/) 预设值 将会被使用. </itemize> <p> 选择,例如,一个 50Hz 程度可以持续一秒钟,你可以使用 "<tt/echo -e "\\33[10;50]\\33[11;1000]"/" with <tt/bash/ (where "-e" 意思是 `了解 Escape 顺序'.如果你使用 <tt/tcsh/ 相同的 命令拼写如 "<tt/echo "\\033[10;50]\\033[11;1000]"/". <p> 尽管我不知道 <tt/setterm/ 命令的任何版本但它 支持这样的设定,这命令的将来的版本也许好好 支持命令行选项来设定喇叭声声音. <p> 如果你执行 Linux-1.3.43 或者较新的,你也许满意 escape 顺序和避免阅读更多的.如果你执行较旧的核心,或者如果 你要闪光警告,你要阅读文件其馀的部分. <sect>基本概念关於 Termcap 和 Terminfo <p> 档案 <tt>/etc/termcap</tt>是一个文字档案它列出 <tt/term/inal <tt/cap/abilities. 数个应用程式使用 <tt/termcap/ 资料在萤幕周围移动指标和做 别的萤幕导向的工作. <tt/tcsh/, <tt/bash/, <tt/vi/ 以及其他 <tt/curses/-基础应用程式使用 <tt/termcap/ 资料库. <p> 资料库描述数个终端机的类型. <tt/TERM/ 环境变数在运行时选择正确的行为 ,靠命名一个 <tt/termcap/ 栏位是被 应用程式所使用. <p> 在资料库内部,每一个终端机的能力显示当一个 two-letter 代码和一个实际的 escape 顺序的表示 被使用来取得想要的效果.在不同的能力之间的分隔符字元 是使用冒号 (":").举一实例,听得见的 喇叭声,它的代码 "bl",通常出现当 "<tt/bl=^G/".顺序 告诉它喇叭声声音是获得靠列印 control-G 字元, ASCII BEL . <p> 除 <tt/bl/ 能力外, <tt/vb/ 能力是被 重新组织.它是被使用来表现 "闪光警告". <tt/vb/ 通常在 <tt>termcap</tt> 档案 <tt/linux/ 的栏位有遗失. <p> 大部分的现代应用程式和程式库使用 <tt/terminfo/ 资料库 代替 <tt/termcap/. 资料库中每一个终端机型态使用一个档案 和位於 <tt>/usr/lib/terminfo</tt>;避免使用极大的 目录,每一个终端机的类型的描述是储存在由它的首字母决定的一个 目录中; 那个 <tt/linux/ 栏位, 因此,是 <tt>/usr/lib/terminfo/l/linux</tt>.建立一个 <tt/terminfo/ 栏位你将 ``编译'' <tt/termcap/ 描述; 谈及 <tt/tic/ 程式和它的说明页. <sect>定义一个闪光警告 <p> 你可以加栏位针对 <tt/vb/ 能力在你的自己的 termcap 档案中,如果没有已经定义一个. Dennis Henriksen (duke@diku.dk) 建议插入下列各行在 <tt/termcap/ 栏位中针对 <tt/linux/ (注意在旧的 distributions 中栏位是叫做 <tt/console/ ): <tscreen><verb> :vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\ </verb></tscreen> 寻迹 backslash 在资料库是被使用做 escape newline. Dennis' 的码做下列各项 (他自己说的): <itemize> <item>储存指标位置 (uust一个安全谨慎). <item>改变背景颜色数次在标准和非标准之间. <item>恢复指标位置. </itemize> <sect>使喇叭声在上文字 console 失效 <p> 如果你强制使闪光警告在你的 console 上你可以使用 "<tt/bl/" 在 <tt/termcap/ 栏位和定义它使用相同的字串 建议针对在 "<tt/vb/" 之上.靠近是便利的如果你不 要自已设定每一个应用程式 (它如以下的描述,无论如何). 我在所有机器上使用这选项在哪里我可以执行 Linux 和我 不能拆开喇叭. <sect>告诉应用程式避免发出哔哔声 <p> 这是一不完全的应用程式的清单它可以是被指示去 使用 <tt/vb/ 栏位针对当前的终端机的形态 (使用任一 <tt/termcap/ 资料或者 <tt/terminfo/ 这个): <itemize> <item> X 伺服器:使用 "<tt/xset b/"命令来选择 bell 的行为.这个指令取三个数值的 参数:大小,程度和持续. "<tt/xset -b/" 使 喇叭声完全无效.设定 X 伺服器影响在显示器上所有执行的 应用程式. <item><tt/xterm/: xterm 可以转换各喇叭声到一个看得见的或者 听得见的信号.如果你使用喇叭声,"<tt/xset/" 的设定 将会运作.喇叭声在 <tt/xterm/ 预设是 听得见的,但是你可以使用 "<tt/-vb/" 命令行选项 和 "<tt/xterm*visualBell: true/" 的办法转变它成一个 看得见的闪光.你可以拴牢看得见的/听得见的信号在 运行时靠 control--left-mouse-button 叫出选单 .如果你执行 X 你最有可能的 不需要下列资料. <item><tt/tcsh/ (6.04 和以後的): "<tt/set visiblebell/". 这指示可以是安放的在 <tt/.cshrc/ 或者可以是互动式的执行 .重设喇叭声只要 "<tt/unset visiblebell/".使任何通知命令无效,使用 "<tt/set nobeep/" 取代. <item><tt/bash/ (任何 bash,如我所知道):放 "<tt/set bell-style visible/" 在你的 <tt>~/.bashrc</tt>中.可能的喇叭声形态 可以是 "没有"或者 "可听得见的". <item><tt/bash/ (with <tt/readline/,如同其他的 <tt/readline/ 基於应用程式):放 "<tt/set prefer-visible-bell/" 在 <tt>~/.inputrc</tt>. <item><tt/nvi/ 和 <tt/elvis/: 放 "<tt/set flash/" 在 <tt>~/.exrc</tt>或者说 "<tt/:set flash/" 互动式的 (注意 那个冒号).使闪光警告无效使用 <tt/noflash/ 在 <tt/flash/ 的地方. <item><tt/emacs/: 放 "<tt/(setq visible-bell t)/"在你的 <tt>~/.emacs</tt>.它是靠 "<tt/(setq visible-bell nil)/" 使其没有效用. <item><tt/less/:使用 "<tt/-q/"在命令行上使用闪光警告, 使用 "<tt/-Q/" 使任何报告无效.预设选项可以 放进你的环境变数 "<tt/LESS/". <item><tt/screen/: 执行 CtrlA-CtrlG 命令.改变 所有虚拟萤幕的行为.看 man page 在 "CUSTOMIZATION" 之下针对安装预设值. </itemize> <sect>问题的黑暗边 <p> 坏消息是它不是每一个应用程式都使用 <tt/termcap/ 或者 <tt/terminfo/.大部分小的程序特色在 C 原始码码中使用 'backslash-a' (警报) 字元. "alarm" 码在字串中变成一个字面上的 ASCII BEL 当储存成二进位的.真的 应用程式通常不会掉入这种类,但是注意新学 C 的人 他们给你他们自己的程式.是所有最坏的的是电脑科学的学生 ,真的. <p> 唯一的方法使这些程式沉默的应用程式是 spekearectomy,或者依 Martin Mares 的方法使用 escape 顺序. </article>