閃光警告 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>