Visible bell mini-Howto Alessandro Rubini, rubini@ipvvis.unipv.it v2.1, Aug 1996 訳:中谷千絵 jeanne@mbox.kyoto-inet.or.jp 1996/10/06 この文書は termcap の使用方法についていくつか重要な点を説明をし、 そして必要に応じてビープ音を完全に無効にするカーネルパッチの入手に ついての情報を提供しています。 1. はじめに Linux コンソールドライバは BEL キャラクタが出力 (ASCII code 7) す る時はいつでもビープ音を鳴らします。これはデフォルトのふるまいとし て当然のことですが、多くのユーザーはコンピュータがビープ音を出すこ とを好みません。この mini-HOWTO では BEL コードを出力しないようにア プリケーションに伝える方法を説明することを予定しています。カーネル パッチの入手に関する情報が十分に提供されています。パッチは termcap とアプリケーションのデフォルト設定を壊してしてしまうのを避けるため に多目的であることを意図しています。 私の意見では最もよい解決はハードウエアで解決することで、私のコン ピュータにはスピーカーは取り外してしまってついていません。 2 Spekearectomy* (スピーカーを取り外す手術) Speakerectomy (スピーカーを取り外す手術)は、ビープ音の問題に対す るとてもあざやかな解決です。ある種の付加的な音色は価値がありますが、 ビープ音を取り除く最も簡単な方法です。 訳注[*]Speakerectomy について著者からの説明です。Speakerectomy is a neologism, an invented word. Taken from the surgical vocabulary, - ctomy means cut-and-remove. It's (loud)speaker removal -- by cutting wires. Speakerectomy という言葉は新語で、作った言葉です。 外科的な言葉に由来します。-ctomy というのは、切断し、取りはずすこと を意味します。接続線を切断してスピーカーを撤去します。。 通常 PC には、低速にするためにメインボードクロックを切り替えるあ まり役に立たないスイッチが用意されています。そのスイッチはマルチタ スク環境で動かす時にはまったく不要です。そしてソフトウエアのループ でタイミングをとっているような古い DOS のゲームを低速にする本来の 機能さえもはや使われていません。不運にもプロセッサの速度を増加する スイッチを使うことはできませんが、そのスイッチをスピーカーを有効か 無効かにするために転用することができます。長時間を要するコンパイル の終了時に、コンピュータがビープ音を鳴らすことは、静かなコンソール を望む人にとってもいいことです。 速度切替えスイッチの機能を変更するには、メインボードからそれを取 り外し、配線をスピーカーと直列に接続するだけです。 不運にもラップトップを使っている人はスピーカーにアクセスすること は簡単ではありませんし、違った目的に使用するために余っているスイッ チもありません。そのようなユーザーの場合、よりよい解決法はソフトウ エアを音を出さないように設定してみることです。 3. コンソールごとにビープ音を設定 Linux 1.2.43 に関して、Martin Mares は音の鳴り方を設定できるよう に console.c ファイルを追加しました。tty にエスケープシーケンスを 書くことで、すべてのコンソールでビープ音の持続時間とピッチを変更で きます。それぞれのコンソールと連携するそれぞれ違ったビープ音(ある いはビープ音をならなさない)を設定するために ~/.proflile か ~/.login に自分の設定を加えることができます。 エスケープシーケンスは次のように動きます。 ESC-[10;xx] は ヘルツ(Hz)でベルの振動数を選択します。この値は 21-32766 の範囲になりますが、そうでない場合結果は不明です(少なくと もバージョン2.0 では)。先のことはわかりかねますが。もし 'xx' が存在 しないと、`ESC-[10] のようにデフォルト値(750Hz) が適用されます。 ESC-[11;xx] はミリセコンドの単位でベルの持続時間を選択します。2 秒以上を指定するとデフォルト(125ms)が適用されます。何度もいいます が、もし 'xx'argumentが存在しないなら、デフォルト値(ESC-[11])が適 用されます。 エスケープシーケンスを出力するなら、たとえば、bash では(50Hz, 1s) "echo -e "\33[10;50]\33[11;1000]"" を試すことができます。( -e は エ スケープシーケンスを理解する、を意味します) 、 tcsh では "echo "33[10;50] 33[11;1000]" が同様の効果を持ちます。 これらの制御コードが `setterm-commands' として登録されているので、 新しい`setterm' コマンドはコマンドラインでのベル設定をサポートして いるかもしれないことに注意してください。しかし、私の知っているバー ジョンの `setterm' に、これらのコードをサポートしているものはありま せん。 もし Linux-1.3.43 あるいはそれより新しいバージョンを動かしている なら、あなたはエスケープシーケンスで満足し、そしてこれ以上は読まな いかもしれませんね。もしあなたが古いカーネル(私自身は小さな 386 マ シンでそれを使っています)を動作させているか、あるいはもしあなたが ビジュアルベルを使いたいならよく読んでくださいね。 4. Termcap についての基本的概念 /etc/termcap ファイルは端末制御コードを集めているテキストファイ ルです。いくつかのアプリケーションは、スクリーンでのカーソルの移動 や、あるいはスクリーン指向の作業をするのに termcap 情報を使います。 tash や bash 、あるいは vi など curses ライブラリを使っているすべ てのアプリケーションは termcapdatabase を使います。 database はさまざまなの端末の種類を記録し、そしてアプリケーションは termcap で正しい登録を参照して TERM 環境変数を使います。その時、それぞ れの制御コードは期待通りの効果を得るために使用される連続する文字に関連 づけられた2文字のコードで表されます。区切り文字はコロン(":")です。ひ とつの例として、ビープ音は code "bl" ですが、それは、いつもつながった "bl=^G" で表され、control-G という文字を使う ASCII BEL のアプリケーショ ンを示しています。 bl 制御に付け加えて、vb 制御があります。それは、ビジュアルベルを 表します。vb はLinux の /etc/termcap で通常コンソール登録にはあり ません。 5. ビジュアルベルを定義する あなたは自分の termcap ファイルに vb 制御登録を追加できます。 Dennis Henriksen (duke@diku.dk) はコンソールに対するtermcap 登録に 次の行を挿入することを提案しました。 :vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\ 連続しているバックスラッシュ(\\) はデータベースで新しい行を回避 するために使われます。Dennis' codeは(彼自身の言葉で言うなら)次のこ とをします。 ● カーソルの位置を保持する(安全装備) ● 通常状態とリバースとの間で背景色を数回選択変更する ● カーソル位置を復帰する。 termcap を修正する場合のいくつかの注意点 ● あなたの TERM 変数がどうなっているかをチェックしましょう。それ が "console" として使用されているなら、ご使用の Linux 配布物と kernel のバージョンに依存します。実際に、"linux" の変更のためで す。 ● vb 領域がすでにそこにあるかどうかチェックしましょう。配布者はド キュメントを読んでいるし、いつもソフトウエアをアップグレードしてい ます。 ● いくつかのアプリケーションは termcap を使用しませんが terminfo データベースを使います。それらはあなたの vb 登録を認識しないかもし れません。terminfo はtermcap よりももっと難しいばかりでなくもっと 強力です。 6. アプリケーションへの伝達 以下のものは実際の端末の種類に vb 登録を使用するように指示できる アプリケーションの未完成のリストです。 ● 6.04 とそれ以降の tcsh では "set visiblebell" です 。指令は .cshrc に記述するか、あるいは対話的に実行できます。ビープ音を リセットするには "unset visiblebell" です。指令を無効にするには "setnobeep" です。 ● bash(私が知っている限りではどんな bash でも) では、~/.bashrc に、 "set bell-style visible" を記述します。種類は "none" あるいは "audible" が可能です。 ● bash (readline を持っているもの、他の readline を使うアプリケー ションも同様ですが)では ~/.inputrc" に、set prefer-visible-bell" を設定します。 ● nvi と elvis では、~/.exrc に "set flash" を記述するか、対話的 に(コロン: をつけて) ":set flash" を伝えます。 ビープ音を無効にす るには flash のかわりに noflash を使います。 ● emacs では ~/.emacs に "(setq visible-bell t)" を書きます。 "(setq visible-bell nil)" で無効になります。 ● less では、ビジュアルベルを使うにはコマンドラインで "-q" を使い ます。 "-Q" を使うと無効になるという報告がいくつかあります。デフォ ルトオプションは環境変数 "LESS" を使うことができます。 ●スクリーン xterm: xterm はビジュアルあるいはビープ音のいずれかの信号をおのお ののベル表示に変換できます。ビープ音がデフォルトですが、コマンドラ インのオプション "-bv" と"xterm*visualBell: true" を使うことができ ます。control-mouse-2 menu(control キーを押して3ボタンマウスの第 2ボタンを使った時に画面に表示されるメニュー) を使ってビジュアルベ ルとビープ音を頻繁に切り替えることができます。 ● その他の X アプリケーションでは、 コマンドラインのオプション "-f volume" で、 X サーバに音量を伝えることができます。"volume" は 0 から 100 の間です。 サーバに対するコマンドラインのオプションをパ スする方法については X ドキュメントあるいは専門書を参考にしてくだ さい。 7. ビープ音を無効にする コンソールでビジュアルベルを強くしたいなら、termcap ファイルのな かで、上述 した vb に対して与えられているのと同じ行で bl 登録を置 き換えることができます。このアプローチはそれぞれのアプリケーション をカスタマイズする作業から解放されます。私は Linux を動作させるこ とができるマシンではすべてこのオプションを使っています。 ハード的に接続線でつながれた音声機器を使用するアプリケーションで は、それらのソースコードはこのような変更では影響されないことに注意 してください。 8. 設定しやすくする コンソールでビープ音とビジュアルベルを選択できるようにしたいなら、 Linux のコンソールで2つの違った種類の端末を使えます。たとえば、そ れらにコンソール(console) と、コンソール-vb (console-vb) のように 名前をつけることができます。 console 登録がオリジナルになりますが、 もうひとつのものは、bl の種類としてビジュアルベル系列をつくること ができます。このようにしてコンソールでのベルのふるまいを変更できま す。 ● tcsh では、スクリーンフラッシュを得るには "setenv TERM console-vb"、 そしてビープ音を鳴らすには "setenv TERM console" とします。 ● bash ではフラッシュには "TERM=console-vb; export TERM"、そして ビープ音には "TERM=console; export TERM" とします。 termcap の形式は別の言語で端末の種類を定義できるので、あなたは差 分だけデータベースを挿入する必要があることを注意してください。さら なる情報については manpages を参考にしてください。 9. その他の解決方法 残念な情報としては、すべてのアプリケーションが termcap を認識す るわけではないということです。大部分の小さなプログラムは C ソース コードで 'backslash-a' ( \a ) をわざわざ使っています。これらのキャ ラクターは実行バイナリーで文字通りテキストの ASCII BEL になります。 通常、実際のアプリケーションはこのカテゴリーに入りませんが、あなた に自分のプログラムを渡す C の入門者には警戒しましょう。特にコンピュー タサイエンスを学び始めた学生の初心者はみんな最悪です。 これらのアプリケーションでスピーカーを止めるただひとつの方法は speakerectomy(スピーカーを取り外す手術) か、あるいは、Martin Mares の作成したエスケープシーケンスを利用することです。 以前、私は自分のためにパッチを作りました。エスケープシーケンスが あるのでそれ以上をサポートしませんでした。私は音の調子をサポートす るために1.3.42 で私のパッチをもう一度使いました。ところが、1.3.43 ではすでにそれを持っているの発見したのです:-) --------------------------------------------- 日本語訳についての問い合わせは jeanne@mbox.kyoto-inet.or.jp 日本語訳は Linux-JF プロジェクトの多くの方々にサポート頂きました。 ありがとうございます。 訳:中谷千絵 jeanne@mbox.kyoto-inet.or.jp 1996/10/06