UNIX用リアルタイムチャット mai
[使い方]
[便利な機能]
[ダウンロード]
[インストール]
[トラブルシューティング]
[部員のプロジェクトへ戻る]
スクリーンショット
mai とは
mai は UNIX 用ローマ字リアルタイムチャットプログラムです。
基本操作は talk, phone, okphone 等と同じで、1文字入力するたびに
会話に参加している人全員の画面が更新されるため、
リアルタイムでのチャットが可能です。
perl スクリプトにより実装されたサーバ/クライアントシステムでシンプルです。
また、乱入機能、ログ機能、バックスクロール機能などが使えるように改良されています。
おしらせ
最新版は下記の環境で動作を確認しました。
- Linux-2.4.20(Redhat 8)
- FreeBSD-5.1
- Solaris 8(SunOS 5.8)
下記の環境では動作に問題がありました。
もし解決方法が分かる方がいらっしゃいましたらご教授下さい。
- AIX-3.4
mai の "終了しますか?(y/n)" へのキー入力が効かない
- IRIX64-6.5
mai の起動時に"unknown mode: cbreak" と表示される
mai のキー入力がリアルタイムに行われず、ENTER キーを押したときにまとめて送信される
mai の "終了しますか?(y/n)" へのキー入力が効かない
旧バージョン(Version 2.19以前, 要Curses.pm)のページはこちら
・ FreeBSD のOS付属の write コマンド関係の問題で、maid を起動した端末を終了すると、ユーザの呼び出しができなくなるという問題が報告されています。現在対策中です。
→ Version 2.19 以降、 maid スクリプトをカスタマイズした上で($BUILTIN=1; に変更する)、maid(サーバ) を root 権限で起動することにより、UNIX の write コマンドを使わずにユーザを呼び出すことができるようになりました。FreeBSDではこの方法でお使い下さい。
・ Version 2.18 から、"maid" は自動的にバックグラウンドで実行されるようになりました。"&" をつけると起動できませんのでご注意ください。
・ Version 2.20 から、Perl モジュール "Curses.pm" がインストールされていないマシンでも動くようになりました。
→ UNIX の tput コマンド で画面の文字数を取得するために、ncurses は必要です。
・ Version 2.23 から、標準(環境変数 "MAILOG" が未設定のとき)では ${HOME}/.mailog/ 以下にその日の日付のファイル名 "yyyymmdd.log" でログを残すようにしました。
|
使い方
ユーザの呼び出し
コマンドラインから呼び出したい相手のユーザ名を指定して "mai ユーザ名" コマンドを
実行します。
呼ばれたユーザ側の画面には以下のように表示されますので、引数なしで "mai"
コマンドを実行すると応答できます。
message from nobody@gamera on pts/3 at 00:01 ...
mai: connection requested by 【呼び出し側ユーザ名】. respond with 'mai'
EOF
% mai
(チャット開始)
|
- チャットを終了するときは Ctrl-c を入力して下さい。 "終了しますか? (y/n)" という問いに
"y"と入力すると切断されます。
- チャット中、画面サイズが変更されたり画面が乱れた場合には Ctrl-l を入力すると
再描画されます。
- BSキー(DELキー)で1文字消去できます
- 1分間以上発言がなかった状態で改行すると、相手にも自分にも BEEP が鳴ります
(自分のBEEPはMAIBEEP環境変数に0をセットすることで抑制可能)。
ローマ字変換規則
チャット中、ローマ字を入力すると、送信時に自動的にひらがなに変換されます
(ただし mai コマンドが "-a" オプション付きで起動された場合には全くローマ字変換されずに
送信されます)。
- ローマ字変換の際はスペースで区切られた部分が1単語として扱われます。
- 「ん」は n' (n + シングルクオート)です。
- かなに変換できない単語は変換されず、アルファベットのままになります。
- ダブルクオート "" で囲った部分は変換されず、アルファベットのままになります。
- 単語がすべて大文字だと変換されず、アルファベットのままになります。
- 単語の先頭1文字だけが大文字だとひらがなではなくカタカナに変換されます。
- EUCの2バイト文字を入力するとそのまま送信されますので、MS-IME, kinput2 等
で直接日本語を入力することもできます。
便利な機能
チャット中に他のユーザーを呼ぶ
チャット中に "ESC-call 【ユーザ名】" を入力すると、現在のセッションにユーザを呼ぶ
ことができ、3人以上でのチャットが行えます。"ESC-cancel 【ユーザ名】"で呼び出しを
キャンセルできます。
実行中のチャットに参加する(乱入機能)
自分が呼ばれていないときに、コマンドラインから引数なしで "mai" コマンドを実行すると、
現在行われているチャットの番号(セッションID)の一覧が表示されますので、
乱入したいセッションIDを指定して "mai 【セッションID】" を実行すれば、そ
のセッションに加わることができます。
乱入を禁止/許可する
チャット中に "ESC-l"(Lock) を入力すると、現在のセッションへの乱入が禁止されます
(引数なしで mai を実行したときのセッションIDも表示されなくなります)。
"ESC-u"(Unlock) を入力すると乱入が許可されます。デフォルトは乱入許可です。
スクロールアウトした会話を見る
チャット中に "Ctrl-b"(Backlog の意味。トグルになっています)を入力すると、画面下部に新
しくウインドウが開き、現在までの会話内容が表示されます。このウインドウは↑,↓,
PageUP,PageDownキー等でスクロールさせることができ、スクロールアウトした
過去の会話を見ることができます。このウインドウは自分以外のメンバーには見えません。
ファイルにログを残す
チャット開始前に、環境変数 "MAILOG" を設定しておくと、会話内容をログファイルに記録
することができます。
- 環境変数 MAILOG にファイル名を指定した場合
(csh系なら "setenv MAILOG /home/user/logfile.txt")
ファイル "logfile.txt" に会話内容が追記されていきます。
- 環境変数 MAILOG にディレクトリ名を指定した場合
(csh系なら "setenv MAILOG /home/user/logdir/")
ディレクトリ "logdir" 以下に日付("yyyymmdd.log")をファイル名
としたログファイルが生成していきます。
同じ日に複数回 mai を使用した場合はファイルに追記されていきます。
- Version 2.23 から、環境変数 "MAILOG" が未設定のときには
${HOME}/.mailog/ 以下にその日の日付のファイル名 "yyyymmdd.log"
でログが残るようにしました。
また、チャット中いつでも "ESC-s 【ファイル名】"(Save) を入力すると、現在までの会
話を指定したファイルに保存することができます。
"ESC-load 【ファイル名】" を入力すると、指定したファイルをログウインドウに
読み込むことができます。
この時ファイル名を省略すると、デフォルトのファイル名(その日の日付)のログが
読み込まれますので、mai を一旦終了してしまって再開したときに、
終了前までの会話をログウインドウに復旧できます。
その他
"mai -h" コマンドを実行すると機能一覧が表示されます。
ダウンロード
Version-2.25
mai Version-2.25(tar+gzip)
mai Version-2.25(lha)
Version-2.23
mai Version-2.23(tar+gzip)
mai Version-2.23(lha)
Version-2.21
mai Version-2.21(tar+gzip)
mai Version-2.21(lha)
Version-2.20
mai Version-2.20(tar+gzip)
mai Version-2.20(lha)
【アーカイブに含まれるファイル】
mai: クライアントプログラム
maid: サーバプログラム
README_sjis.txt: このページの URL
旧バージョン(Version 2.19以前)のページはこちら
動作環境とインストール
【FreeBSD で使う場合の注意】
FreeBSD では、maid コマンド中の "$BUILTIN=0;" を "$BUILTIN=1;" に書き換えた上で
maid コマンドを root 権限で起動
しないと、ユーザを正常に呼び出せません(呼び出しメッセージが呼ばれた側の端末に表示されなくなります)。
|
概要
本チャットシステムは サーバ(maid), クライアント(mai)の対で動作します。
"mai","maid" とも Perl スクリプトです。
チャットを開始するためには、サーバ(maid)がいずれかのユーザの権限で
動かされている必要があります。
キー入力、画面出力はともに EUC であると仮定しています。
動作環境
maid コマンド(サーバ)を実行するために必要なもの
- perl5
- システムの hostname コマンド
- システムの write コマンド
(maid の設定によっては必須ではありません。
maid スクリプトの先頭付近を直接読んでみてください)
- システムの users, w, who コマンド
(maid の設定によっては必須ではありません。
maid スクリプトの先頭付近を直接読んでみてください)
mai コマンド(クライアント)を実行するために必要なもの
- perl5
- VT100互換端末エミュレータ
- システムの stty, tput コマンド
サーバのカスタマイズ
本サイトからダウンロードしたアーカイブを展開してできたファイル "maid" の先頭付近の
# ----- ここはシステムによっては変更が必要です -----
|
という行以下の数行をシステムに合わせて書き換えてください。
"write" コマンドが日本語に対応しているシステムの場合(Linux等)は、この設定により
呼び出しメッセージを日本語にできます。
サーバの実行
mai を使用するためには、サーバプログラム "maid" が起動している
必要があります。"mai","maid" は一般ユーザでも実行できます。コマンドラインから
を実行してください。Version 2.18 から、"maid" は "-f" オプションをつけない限り、
自動的にバックグラウンドで実行されるようになりました。
"&" をつけると起動できませんので、旧バージョンからバ
ージョンアップする際は注意してください。
トラブルシューティング
バージョンアップ後の動作がおかしい
実行している mai と maid のバージョンが同じことを確認してください。
mai, maid とも "-v" オプションを付けて起動するとバージョンが表示されます。
mai 【ユーザ名】でユーザが呼び出せない
呼び出される側のユーザが "mesg y" コマンドを実行した後で呼び出してみてください。
また、maid の先頭付近の $CMD_WRITE, $CMD_USERS 変数に、それぞれ "write","users"
コマンドのフルパスを代入してください。
※
FreeBSD では、maid スクリプト中の "$BUILTIN=0;" を "$BUILTIN=1;" に変更し、
maid を root 権限で起動
しないと、ユーザを正常に呼び出せません。
mai 実行時に以下のようなエラーが出る
IO::Socket::INET: 接続を拒否されました ...propagated at /usr/local/bin/mai line 93.
|
maid が動いていません。チャットを開始するためには、サーバプログラム(maid)がいずれかの
ユーザの権限で動かされている必要があります。
maid 実行時に以下のようなエラーが出る
IO::Socket::INET: アドレスは既に使用中です ...propagated at /usr/local/bin/maid line 50.
|
既に maid が実行中であるか、maid の待ち受けポート(11167)が他のサーバプログラムに
よって使用中か、接続中のクライアントが残っている時に maid を終了した可能性があります。
接続中のクライアントが残っている時に maid を終了してしまった場合は、まず接続中の
mai を全て終了し、数分間時間を置いてから maid を再起動してください。
注意点
- mai 実行中に Ctrl-\ を入力するとコアダンプする場合があります
→ "stty quit undef" を実行しておけばしなくなります
- mai は既存のログファイルのパーミションを変更しません
(mai がログファイルやディレクトリを新規作成する場合にのみ、
ファイルは600,ディレクトリは700 で作成されます)。
他のユーザからログを読めない状態にするには、ログファイルの Read
パーミションを確認してください。
- maid を "$OTHERHOST=1;" と書き換え、"mai username@host.domein"
の形式で呼び出す事により、他のマシンからユーザを呼び出すことができま
すが、初期値は "$OTHERHOST=0;" となっています。ファイアウォール内など、安
全なネットワークで使用する時のみ
"$OTHERHOST=1;" を指定して下さい。
参考: mai のプロトコル
- ローマ字変換は送信側 mai クライアントで行っています。表示したアルファベットをBS(0x08)を送信して削除し、改めてかな文字を送信することによって、リアルタイムローマ字変換に見せています。
- maid は標準では TCPの11167番ポートでコネクションを待ち受けます。
- maid を "-f -d" オプション付きで起動するとデバッグモードになり、受け取ったパケットを画面に表示します。
- maid は1個のプロセスのみで動作し、fork() はしません。
変更履歴(上が新しい情報)
2003/12/19 Version-2.25 公開。画面右端の1文字が表示されない現象を修正。
2002/10/16 Version-2.23 公開。ESC-load(バックログのロード)追加。ログファイル名変更。
2002/07/31 Version-2.21 公開。ESC-kill(指定ユーザの切断)コマンド追加。
2002/07/05 Version-2.20 公開。mai が Curses.pm に依存しなくなった。
[部員のプロジェクトへ戻る]
hoshi@proc.org.tohoku.ac.jp