Linux Gazette 3月号
今月のLinux Gazette の内容
n今月のニュース
n ssh suite:sftp, scp 及びssh-agent
n Kaptain - ダイアログ・クリエータ
n Linux ルーター・プロジェクトの考え方
n GNU GRUB ブートローダー
n CVSバージョンコントロール番号のウェブペイジへの表示
n Perlの学習、パート2
n Xmodmapを用いる国際キイボードの設定
 
今月のニュース

 

▼▼▼ディストリビューション関連ニュース▼▼▼

 

SuSE

SuSE Linux は、近くリリースされるKernel 2.4とともに、SuSE Linux 7.1が個人用及び専門家用のバージョンで入手出来ることを発表した。SuSE は、Kernel 2.4と平行して2.2シリーズの出荷も継続する。詳しくはSuSEの product web page へ。

Duke of URL は、最近代わったSuSE Linux Professional 7.0のreview を配置した。SuSEディストリビューションの精神が感じられる。


SuSE Linux とIBM Global Services は、IBM e−サーバーを始めとする各種プラットホームを含む世界的技術支援協定に署名した。IBM Global Services は、顧客のLinux関連問題解決にSuSEの経験者を使う。10月のzシリーズ用SuSE Linux Enterprise Server 発表以来、SuSEはIBMのxシリーズ、pシリーズ、zシリーズeサーバー用に世界中のLinuxディストリビューションに出荷する唯一の会社だった。これでSuSEは、IBMサーバープラットホームを商業利用の出来る他のディストリビューションのどれよりも多くサポートする。


SuSE Linux はまた、新SuSE Linux Knowledge Portalを発表した。サービスは. SuSEのドイツ、英国、米国のWebサイトからアクセス出来る。

 

▼▼▼その他のニュース▼▼▼

 

Steeleye と Linux NetworX が提携

SteelEye Technology, Inc.はLinux NetworX, Inc. とのOEM提携を発表。Linux NetworXがe-ビジネス顧客に提供するソリューションにSteelEyeの Linuxプラットホーム用LifeKeeper を提供する。共同で販売とサポートをおこなう。LifeKeeper は、システムとアプリケーションを監視し、クライアントに中断のないデータアクセスを提供する。

 

AMD が初めての VirtuHammer シミュレータを展示

ニューヨークとパリの LinuxWorld において AMD は "VirtuHammer"の公開を発表した。AMDとVirtutech が開発したツールで、ソフトウエア・デベロッパがAMDの次世代 "Hammer"ファミリー・プロセッサ用に64ビットプログラムを書いて試験することが出来る。AMDは SuSE と共に、LinuxをAMDのx84ー64技術に移植するオープンソース社会に貢献して来た。"Hammer"ファミリーは2002年前半に市場に出る予定である。x84ー64の詳しい情報は、http://www.x86-64.org/へ。

 

LUGFEST IV

Simi-Conejo Linux ユーザー・グループは、2001年4月21日と22日にカリフォルニア州シミバレーでLUGFestを開く。LUGFestはLinuxユーザーが、Linux、Linuxアプリケーションを展示し、セミナーに参加出来る機会である。詳細情報、登録については、gareth@wiked.org又はgareth@wiked.org Webサイトへ。

 

CLIQ 2001 コンファレンスと展示会

CLIQ(Colorado Linux Info Quest)は、CLIQ2001に関する Hewlett Packard、XFree86 及び GNOME の賛助を発表した(3月30日)。3月29日から30日までデンバーのMarriott Tech Center.で催されるイベントでDaryll Strauss (VA Linux, XFree86) と Havoc Pennington (Red Hat, GTK+ 及び GNOME)が講演をする。

 

▼▼▼ソフトウエア関連ニュース▼▼▼

 

IBM が Linux 用 Personalization ソフトウエアを発表

IBM はその WebSphere Personalization ソフトウエアの最新版がLinuxをサポートすると発表した。このソフトウエアによりビジネスは "personalization" を通じてそのWebサイトを個人ユーザーに正確に絞り、次いでアクティビティの解析を通じてこの処理を最適化することが出来る。詳しい情報は、on WebspherePersonalizationIBM/Linux

 

Linux 上に企業向け包括的 Motiof GUIソリューションを作る提携

Integrated Computer Solutions, Inc.Sitraka Software は、BX PRO and XRT PDS Motif 開発ツールに絞って提携する。ICSは、Sitraka の XRT PDS を自社の BX PRO と統合出来るキットを開発したが、今回 Sitraka と XRT PDS に関する再販契約を結んだ。この契約により、ICS は UNIX と Linux 上の Motif 開発の最大ソリューションを提供することが出来る。このソリューションは Linux(Intel)を含む各種プラットホームに出荷される。

 

ストリーミング・サーバー・ソリューションを提供する

  2netFX と Linux NetworX

このソリューションは、2netFX ThunderCast サーバーとStreamRider Client Player ソフトウエアを Linux NetworX Evolicity クラスタに統合する。StreamRider のクライアントは Linux NetworX Evolocity 1240 上で提供される。独立の4台のCPUが、ソフトウエアレベルのロードバランサを通じてWebサービス負荷を分担する。一つの計算モジュールが不具合になると、他がサービスを継続する。クラスタ技術は冗長度とスケーラビリティに利点がある。

 

Dell Linux Initiatives

Dell は、その Dell Precision Workstations の米国顧客に2月から Borland Kylix を提供する計画を発表した。 Borland Kylix は、Linux開発者が強力なデスクトップ、クライアントサーバー、データベース及びApache Web ベース・アプリケーションを構築することの出来る開発環境である

Dell はまた、そのツールのOpenManage server management suiteの選択部品を Red Hat ベースサーバーが利用出来ると発表した。Dell の Linux用 OpenManage サーバーアシスタントは、 Red Hat Linux 6.2 及び 7 並びに最新ドライバのすべての搭載をサポートする。
 

VMware と NSA のチームが近代的安全コンピュータを構築

VMware, Inc. は、自社の仮想マシン技術の安全性を強化し保証するため米国国家安全局(NSA)との共同研究開発協定を発表した。このプロジェクトにより政府ユーザーは一定の機密アプリケーション又は環境のため市販既製ソフトウエアを安全に使用することが出来る。NSAのプロジェクトNetTopは、インターネットを通じる秘密コンピュータ・ネットワークへの遠隔地からのアクセスを備えるなど、情報領域の分離を必要とするアプリケーションのためのビルディングブロックとして、安全強化仮想マシンを使う計画である。VMwareは、協定から生まれた安全強化を将来の製品に組み込む計画である。NetTop プロジェクトの詳細はオンラインで PDF formatから入手出来る。
 

SuSE eMail ServerII に Arkeia 企業バックアップソフトウエアを含む

Knox Software は、フラグシップ製品、Arkeia、の無料版が、SuSE の第二世代e−メールサーバーIIに含まれると洩らした。SuSE eMail Server II は、メールを中央サーバーで管理し、IMAP規格に合致するオープンソース・ソリューションである。Arkeia 4.2 は、定期的又はオンデマンドで、インクレメンタル及び完全バックアップを提供し、ディレクトリ構造、レジストリ、シンボリックリンク及び特殊属性を保存する。

 
 

ssh suite: Sftp, scp 及び ssh-agent

By Matteo Dell'Omodarme

 

この記事の目的は、SSH suite の中の有用なプログラムsftp, scp, ssh-agent 及び ssh-addを紹介することである。以下でsshd2 daemon が構成され働くと考える。

Sftp と scp の概観

sftp(Secure File Transfer)は、ネットワークを通じるファイル転送に用いられるftp類似のクライアントである。
これは、接続にFTP daemon (ftpd or wu-ftpd)を使わないので、システムセキュリティを大幅に改善する。事実、システムのログファイルを監視してみると、先月のアタックの80%は ftpd daemonに対するものであった。sftp を使うと、危険な wu-ftpd を阻止するのでこれら全部の攻撃を防止する。
scp(Secure Copy)はネットワークセキュリティを通じてファイルをコピイするのに用いられる。これは不安全な rcp コマンドの代わりである。
stfp と scp は、二つとも sshd サーバーに接続するので、専用 daemon を必要としない。stfp と scp を使うにはコンフィギュレーションファイル/etc/ssh2/sshd2_config に次の行を入れなければならない。


subsystem-sftp                  sftp-server


この修正の後 sshd を再スタートしなければならない。これで、sshd の走っているホストに接続すればstfp と scp を使うことが出来る。

Sftp

Sftp はデータ接続に ssh2 を使うので、ファイル転送は安全である。
ftpの代わりにsftpを使う利点は二つある。
1.パスワードを普通のテキストで送らないので、スニッファの攻撃を防止する。
2.データは転送中に暗号化され、接続をスパイ又は変更するのが困難。
sftp2 の使用は極めて簡単だ。sftp 経由で host1上のアカウントmyname に接続するときは、、次のコマンドを使う。


sftp myname@host1


コマンド行から、幾つかのオプションを規定することが出来る(sftp マニュアルを参照)。
sftp2 がコマンドを受け付ける状態にあると、プロンプト sftp> を表示する。sftp マニュアルにユーザーの使えるコマンドの完全な一覧表があるが、重要なのは下記である。
・quit:    アプリケーションから退出
・cd directory: 現在使用中の遠隔ディレクトリを変更
・lcd directory: 現在使用中のローカルディレクトリを変更
・ls [ -R ] [ -l ] [ file ... ]:
リモートサーバー上のファイル名を、ディレクトリについてはディレクトリの内容を、一覧で示す。 -Rオプションがあると、ディレクトリツリーが表示され(規定値ではサブディレクトリには行かない)、 -1オプションがあると、パーミッション、オーナー、サイズ及び変更時刻も示される。アーギュメントがないと、.の内容が示される。現在はオプション-Rと-lはコンパチブルでない。
・lls [ -R ] [ -l ] [ file ... ]:  ls と同じだが、ローカルファイルに働き掛ける。
・get [ file ... ]: 規定のファイルをリモート端からローカル端に転送。
  ディレクトリはその内容と共に再帰的にコピイされる。
・put [ file ... ]: 規定のファイルをローカル端からリモート端にに転送。
  ディレクトリはその内容と共に再帰的にコピイされる。
・mkdir dir (rmdir dir): dirに規定したディレクトリを作る(破壊する)
sftp2 は、コマンド ls、lls、get、及び put を与えられると glob パターン (wildcards)をサポートする。フォーマットはsshregex マニュアルに記述してある。
sftpは暗号を使うので、通信が遅い(経験では2−3分の1)との難点があるが、安全性が大きいことで妥協出来る。
試験では、1時間で平均4パスワードのスニッファを捕らえた。 sftp を標準プロトコルとすれば、この安全問題がなくなる。

Scp

Scp2 (Secure Copy)は、ネットワーク・セキュリティを通してファイルをコピイする。データ転送にssh2 を使い、同じ認証を使うのでssh2と同じ安全性を備える。
これはリモート・マシンにファイルをコピイする最も簡単な方法であろう。local_dir ディレクトリの中の filename ファイルを、ホストhost1 上の remote_dir ディレクトリにあるアカウント myname にコピイするとする。scpを使ってコマンド行から次の入力をする。


scp local_dir/filename myname@host1:remote_dir


こうしてファイル filename が同一名でコピイされる。ワイルドカードを使うことが出来る(詳細はsshregex マニュアルを読むこと)コマンド、


scp local_dir/* myname@host1:remote_dir


がディレクトリ local_dir からすべてのファイルを host1 のディレクトリに remote_dir コピイする。
scp は、多くのオプションをサポートし、次の例のように二つのリモートシステム間でのコピイも出来る。


scp myname@host1:remote_dir/filename  myname@host2:another_dir


完全な説明はマニュアルを参照のこと。scpを使うにはリモートマシンのディレクトリツリーを完全に承知しなければならないので sftp の方が好まれる。

ssh キイ管理

SSH suite は、認証キイの管理に有用なプログラム二つ、ssh-agent と ssh-add、を含み、ユーザーは、パスワード又はパスフレーズさえ指定しないでリモートシステムに接続することが出来る。

ssh-agent

ssh-agent のマニュアルには「ssh-agent2 は、認証秘密キイを保つプログラムである。考え方は、X-セッション又はログインセッションでssh-agent2を開始し、他のすべてのウインドウ又はプログラムをssh-agent2プログラムのチルドレンとしてスタートすることである(コマンドはXでスタートするか又はユーザーシェルである)。agent の下でスタートしたプログラムは、agent への接続を継承するので、ssh を使う他のマシンにログインするとき agent が自動的にパブリックキイ認証用に用いられる」と書いてある。
ssh-agent を使うには、xdm を走らせているか否かにより二つの方法がある。
前者の場合は、$HOME ディレクトリに置かれた .xsession ファイルをエディットする。二つの可能なプロシージャがある:
.xsession.xsession-stuff にコピイし改造して次の行だけを含ませる。


exec ssh-agent ./.xsession-stuff




代案は .xession ファイルをエディットし、表現 "exec program" を含む行を検索する。その行を修正して "exec ssh-agent program" とする。




X-session からログアウトして再スタートすると、ssh-agent が X-session をその「子」としてスタートしそのデータベースに挿入する ssh キイを待つ。




xdm が走っていないときssh-agent を使うプロシージャは簡単で、次のコマンドを用いて X-session を開始することが出来る。




ssh-agent startx


こうしてssh-agent が正しく走る。

ssh-add

ssh-agent が正しく収まったら、コマンド ssh-add を用いてそのデータベースにアイデンティティを加えられる。アイデンティティは、親ssh-agent の子であるプロセスからのみ加えられる。そうでないときは次のエラーメッセージが表示される。


Failed to connect to authentication agent - agent not running?




(認証エージェントへの接続に失敗しました。エージェントが働いていません?)




ssh-add の使用は簡単である。コマンド行から次のコマンドを入れる:




ssh-add




ssh-add は、認証に用いられる秘密キイ名を含むファイル $HOME/.ssh2/identification を検索する。このファイルがないときは、秘密キイについての標準名(例えば$HOME/.ssh2/id_dsa_1024_a)を推定する。




公開キイのいずれかがパスフレーズを要求していれば、ssh-add は次の例のように、アイデンティティ /home/matt/.ssh2/id_dsa_1024_a.pubを加えて、ユーザーからのパスフレーズを要求する:




Need passphrase for /home/matt/.ssh2/id_dsa_1024_a (..)


Enter passphrase:




 ( /home/matt/.ssh2/id_dsa_1024_a.pubについてのパスフレーズが必要です)




 (パスフレーズを入力して下さい)




コマンド ssh-add -l:Listing identities を用いて agent が現在あらわすすべてのアイデンティティのリストを得ることが出来る。




認証エージェントは一つのキイ、id_dsa_1024_a: 1024-bit dsa, (...)、を有する。


まとめ と 有用なリンク

telnet, rlogin, ftp の多くのユーザーは、非暗号化回線でのパスワード送信に気付いていないだろうが、実は送られている。安全なプロトコルは不安全な回路を通して安全な送信が出来るようにする。
SSH、全通信の暗号化、は盗聴、接続ハイジャックその他の攻撃を効率良く排除する。

これらの記事はSSHへの入口に過ぎず、ssh、sshd及びsftpのマニュアルに沢山の話題が載っている。

一連のSSHは下記から得られる。

www.ssh.com/products/ssh/, SSH マスターサイト又は a mirror site.
SSH技術に関する情報と暗号化一般については Tech corner.

SSHプロトコルのオーブンsshは http://www.openssh.com/ からダウンロード出来る。ポータブル版は www.openssh.com/portable.html.
openssh FAQは: www.openssh.com/faq.html.

 
 

Kaptain - ダイアログ・クリエータ

By Paul Evans

Linuxが本当に必要とするのは‥‥」に始まり「引き継いだコンソール・アプリ用グラフィック・フロントエンドだ」に終わる意見は多い。「Linuxに必要なのは、ダイアログだけでなく、コマンド行オプションを示してどのオプションが何をするかを分からせるダイアログだ」との意見もある。ダイアログが簡単に書けたら良いと思う。

 

Kaptain に出来ること

Kaptain はテキストファイルから作られ、見掛けの新しいダイアログでウィジットを示す能力がある。プログラムは殆どのレイアウトとウィジットを扱う。タブ、子ダイアログも書ける。重要なのは、その出力を学習目的でコマンド行に反映出来ることである。この点の補助として tooltips とWhatsThis をも有する。パイプの部品として使うことも出来るし、flyに書くことも出来る。

Linuxは enscriptmpage など強力なコマンド行常連が沢山あるが、スイッチやオプションの全部は覚えられない。Kaptain はこの種のスピナー、チェックボックス、コンボなどに完璧だ。これらのファイル転換がある。沢山のパイプラインを構築して、画像、音及びテキスト・フォーマットを転換する。兎に角、オプションの取扱いのため十分なシェルスクリプトを書く‥‥、このためのマニュアルも必要だ。

pic of a tabbed dialog for enscr Kaptain にこれら全部が出来るのでなかったら、これを書かなかっただろうが、に取って易しかったと言ったら嘘になる。と強調したのはオブジェクト・オリエントの何も書いたことがないからだ。書いたことのある人には、Kaptain は全く易しいと思う。書いたことがなくとも、焦ることはない。余り緊張しないで Kaptainスクリプトを書くことが出来る。私が生きた証明だ。

既に○○法に習熟しているなら、ダウンロードするだけで直ぐ好きになる筈だ。これは通常の意味で○○ではない。著者は「テキスト作成の文法が数学的オブジェクトである正式言語論(Maths)からアイデアを得た。ターミナル、ノンターミナルの言葉はFLTでは周知だが、他の場所ではそうでない。このようなことを学んだ人は、慣れた方法で理解するのが良い。それ以外の人にとってこれらはは新しい言葉である。BTW, YACCもまた、文脈を離れた文法を用いる

右図は、enscript ダイアログのスケッチである。大きくするにはこれをクリックする。

何も書く気がなくとも、Kaptain 400k ソースにはダウンロードに値する数多くのスクリプト例がある。

・arping
・crypt
・curl
・enscript
・find
・finger
・grep
・indent
・ls
・nslookup
・open
・ping
・procmail
・tar
・weblint
・whois
・zangband

 

ダイアログを作ろう

兎も角、vgetty から電話を聞く簡単なダイアログを作って見よう。

 

なすべきこと

音声メッセージをGUIから表示して再生する。メッセージは /var/spool/voice/incomingと言う名のディレクトリにある。メッセージを一覧表示して、一つを再生する。簡単に聞こえるが − Kaptain ではその通りなのだ。

 

スクリプト

ここでは実行可能スクリプトの作り方を述べる。奇妙な「コメント」は省いて直ちに 内容The good stuffに飛ぶ。

 

先ず、'playmessage' と言う名のファイルを作る。シェルを開いて "touch playmessage" 又は使い慣れたエディタを開いて 'save as' とタイプする。いずれにせよ、どこかの時点で 'playmessage' ファイルを作らなければならない。これを置くのに好適な場所は、既にパスの一部となっており、常にパーミッションを持っているので、"/home/yourname/bin"である。このディレクトリがなければ mkdir で作る。

 

スクリプトの第一行は 'shebang' 行である。Linuxのファイルは、xビットが設定されていれば、いずれも「実行可能」、つまりプログラムである。本当のプログラムでなく単なるスクリプトでも、第一行はOSに、本当のプログラムのように扱うよう告げる。つまり、ファイル名をタイプすれば、実行されると言うことだ。

次に、kaptain の搭載場所を知る必要がある。xterm をポップアップするか、又はコンソールにドロップして "which kaptain" とタイプしenterを押す。私の場合は"/home/paul/bin/kaptain"だが、多分 "/usr/bin/kaptain" か "/usr/local/bin/kaptain" と示されるだろう。kaptain の所在が分かったので第一行を次のように書いて、ファイルを保存する。



#!/usr/bin/kaptain


 

スクリプト書く準備が整った。最後にする必要があるのは、打ち上げ前に、新「プログラム」に「実行可能」ビットを設定することだ。シェルに戻って 'playmessage' を含むディレクトリにいることを確認し "chmod +x playmessage" とタイプする。'ls' のついたディレクトリ・リストに緑色の 'playmessage' が実行可能の*を付けて示される筈だ。

 

内容

 

このダイアログには10行しかなく、その内2行は示されるだけだ。することはタイトルとアイコンの表示だ。"Dismiss" ボタンは無しでもやってゆける。機能的ダイアログを得るのに数行で済むことを訴えたい。テキスト版の「コピイとペースト」は here.



#!/home/paul/bin/kaptain


start "Play Message" -> descr msglist;


descr :horizontal -> title pic;


title -> @text ("Phone Message player.");


pic -> @icon("/usr/share/icons/large/kvoice.xpm");


msglist :framed :horizontal -> msg buttons;


msg -> @list(`ls /var/spool/voice/incoming`);


buttons -> play close;


play -> @action(play_rmd)="Play";


close -> @close="Dismiss";


play_rmd -> "rmdtopvf /var/spool/voice/incoming/"msg" | pvftowav | play -t wav - ";


snapshot of the playmessage dial

次が第一行である:

start "Play Message" -> descr msglist;

行末のセミコロンに注意。これは perl と同じく必須である。事実 Kaptain は「perl的」である。主コンテナは 'start' と名付ける。これもまた Kaptain 文法に組み込まれこの語を第一ルールとして使用しなければならない。引用した "Play Message" はオプションでダイアログウインドウのタイトルに用いられる。

右の "-&gt" の後に "descr" と "msglist" の語がある。Kaptain 文法では 'nonterminals' として知られ、ダイアログの一定領域を示す。文字で始まる限り任意の名称でよい。好きなだけの数の領域を規定することが出来る。

ここでは "descr" と "msglist" の二つの領域を定義した。この後何も書かずに走らせると、領域の定義がないので、不具合になる。次の三行で "descr" 領域を定義する。



descr :horizontal -> title pic;


title -> @text ("Phone Message player.");


pic -> @icon("/usr/share/icons/large/kvoice.xpm");


"descr" の第一行は、スクリプト一番最初の行と同じで、ダイアログの二つの領域を定義する。唯一の違いは ':horizontal' オプションである。これは Kaptain に横並びでなく縦並びで配置させる。勿論この「新」領域は終了(又はさらに領域指定)させなければならない。次の二行で行う。"title" はテキスト領域を "pic" はアイコンを指定する。Kaptain 文法ではこれらを "specials" と言う。現在使用可能な specials は here.

それらにはスピナ、コンボ、ファイルダイアログなどが含まれる。

最終行は、ダイアログの "msglist" 領域を終了してダイアログを終わる。



msglist :framed :horizontal -> msg buttons;


msg -> @list(`ls /var/spool/voice/incoming`);


buttons -> play close;


play -> @action(play_rmd)="Play";


close -> @close="Dismiss";


play_rmd -> "rmdtopvf /var/spool/voice/incoming/"msg" | pvftowav | play -t wav - ";


ここにも、見慣れた行がある。"msglist" に二つの子領域を加えただけだが、":horizontal" オプションは分かったし ":framed" オプションも推測出来ると思う。

"msg" に関する次の行は面白い。両方とも簡単だが強力だ。"@list" がダイアログに示されるリストボックスを受け持つのは分かると思うが、内容をどこから入手するかに注目されたい。何とシェルスクリプトの行からだ!バッククォートの中はいずれも(注目:キイボードの"1"の左のキイで普通のシングルクォートは働かない)実行され、その標準出力が "special" に送られる。"perl -e"でも何でも入れて良い。

残るのは最後のものだ。この領域は二つの子をスピンオフする。play ボタンはシェルコマンド実行の別法を示す。今回は生のモデモファイルの転換と再生のためのパイプラインだ。平常テキストでスクリプトを見るには here.をクリック。全体を見ると、働き方が分かる。例えば、音楽ディレクトリを送って、play コマンドを mp3 に変えたり、テキストファイルを処理したり、画像変換をしたり、随意だ。

余り易しいので癖になって、スクリプトに「飾り」を付けることを考えた。成長済みの結果は here スクリプトはhere.。この実験は二つの理由で有用だった。a)kde2-破損 kvoice の代わりを手に入れた。b)Kaptain の限界を知った。アプロードした後、リストの更新やその他の変更変更は出来ない。コマンドはラインタイム時にのみ評価される。これがダイアログのあるべき姿んだから、最初の設定でやって行こう。

 

mpage用ダイアログ

snapshot of mpage dialogmpage についてのコマンド行オプションを見ると、心配になるだろう。mpage オプションの小さいサブセットを使おうとするだけだ。基本を良く見たので行毎には考察しない。何より @echo を示すためここに含めた。

mpage を良く知らない人のため言うと、これは複数頁印刷用のコマンド行プログラムである。2、4 又は 8 頁以上を印刷出来る。mpage につき覚えて良いのは、ダウンロード出来る50以上のオプションがあることである。マニュアルの「BUGS」に多数のオプションがあり、いつかはこれらを修飾するが、今はペイジ数と余白制御を選んだだけである。

スクリプトは下記の通りである。



#!/home/paul/bin/kaptain -V


start :framed "mpage Mini-Dialog" -> file numpages margins buttons;


file "File to print" -> @infile("*.txt");


numpages :horizontal "Number of pages on each page" -> p1 | ! p2 | p4 | p8;


  p1 "1 pg" -> "1";


  p2 "2 pgs" -> "2";


  p4 "4 pgs" -> "4";


  p8 "8 pgs" -> "8";


margins :horizontal "Margins" -> left right top bottom;


  left "Left" -> @integer(10,100)=40;


  right "Right" -> @integer(10,100)=50;


  top "Top" -> @integer(10,100)=20;


  bottom "Bottom" -> @integer(10,100)=30;


buttons :horizontal -> echo print dismiss;


  echo -> @echo(cmd)="Echo";


  print -> @action(cmd)="Print";


  dismiss -> @close()="Dismiss";


cmd -> "mpage -P -"numpages" -m" left "l" bottom "b" top "t" right" r "file;


Plain text is here.

xterm からランすると、変更することが出来、"Echo" ボタンを繰り返しクリックすると、変更がコマンド行にどう影響するかを、紙を無駄使いすることなく見られたい。"-P"を取り出すと全部が標準になり、紙を全く消費しない。本当に再生を楽しむならコマンド行を次のように変える。



cmd -> "mpage -" numpages " -m" left "l" bottom "b" top "t" right "r " file" >test.ps";


ビューアで出力ペイジを見るだけになる。最後に ";viewername test.ps" を加えるとステップが節約出来る。

他に hawkeyeLinux Today Australia.に書いた Kaptain の記事がある。ここで述べなかったことが沢山示されており実例も多い。 Kaptain の著者はTer駝 Zsolt である。彼は Kaptain に色々尽くしているが、未だ0.51に過ぎない。広く使われれば、偉大な価値があるに違いない。最も苦痛なく出力を経験する方法だ。誰かが書くのを待つのでなく。自分で行われたい。Ter駝 氏は彼のwebsite.への連絡を歓迎するだろう。

他にX用ダイアログプログラムがある。gdialog は既にお持ちだろう。良いい date/time ダイアログを有するXdialog は here. からダウンロード出来る。一つのダイアログ・アプリケーションが目的に合わなかったら、別のものがある。同一スクリプト内で混合して整合させるとよい。

 
 

Linux ルーター・プロジェクトの考え方

By Mark Fevola

 
この記事は古い単一ディスクルーターをLinux ルータープロジェクト(LRP)と比較する。
 
数年前 MorningStar Technologies と言う会社があって、後に Ascend に買収された。間違っていなければAscend は Livingston に Livingston は Lucent に買収された。 CompaqDigitalMicrocom 3ComMegahertz だったかも知れない。
 
MorningStar 社は、MorningStar Express FR と MorningStar Express Plus 二つのモデルのルーターを作った。 MorningStar は、競争相手Cisco Systems の$2500に対し、$1450と安かった。MSE FRはラップトップの大きさの重い金属箱でラックに取付けられた。MSE Plus は386SX PCで4MB RAM、1,44MBフロッピイ、RISComカード(=V.35シリアルポートT1ポート http://www.sdlcomm.com/参照)が付いていた。
 
Ciscos と同じく、MSEシリーズのルーターは、それ自体のコマンドセット、バイナリなどを有しており、違いはプラットホームだった。MSEソフトウエアは1.44ディスクから正しいハードウエア付きの任意のPCに貼り付けると、忽ちルーターになった。
 

嘗て MSE ルーターを持っていたが壊れた。スペアがなかったので、1995年に急遽作った。386DX で、4MB RAM、MSE から立ち上げた RISCom カーどと BSDi 2.0 ライセンスコピイ付きだった。 Bangorからの56Kリース回線をサポートした。これが, Linux ルーター・プロジェクト(LRP) の例である。

 

「F-Box」と言うルーターもある。「F」はフランケンシュタインの意味だ。DOSの下でで、1.44 ディスク1枚により働く。ソフトウエアは David F. Mischlerの作ったIPRouteだ(http://www.mischler.com/iproute/参照)。使い慣れたNIC 用パケットドライバは http://www.crynwr.com/ から取る。スロットリング(通信整形、帯域幅制限など)が必要ならハードウエアで行う。イーサネット接続を56Kに絞るには286を用い、ISDN速度には386SXを使う。それぞれで工夫されたい。

 

重点は、Day One から Unix ボックスに V.35 port を貼り付けるとルーターになる。又はイーサネットカード2枚を使う。kernel がハードウエアをサーポートするのは勿論必要だ。人件費、セキュリティ、コスト、コマンドセット、選別ルール、バスノイズ、通信整形、などなどは、自分で研究する。

 

linuxrouter.org にLRP具現のためそれ程多くの作業/研究はしなかったが「マッシュルームプロジェクト [sic]には慣れていた。これはディスク1枚を取り上げて (MSEルーター類似) コマンドセット (BSDi ボックス類似)を走らせるだけだ。FAQは here.。これは標準Linuxコマンド 'ifconfig' を 'route' 使わないで 'ip' と言うコマンドを使うが、どちらにしても新しいコマンドを覚える必要がある。

 

実用的には、MSE とMaterhorn に大した違いはなさそうだ。小さいネットワークは、 RIP、NAT (Masqeuerade) 又は DHCP だが、大きいネットワークにはゲートDをサポートせず Autonomous Systems (ASs)の間にルートを作ることが出来ない。ゲートD用ソースは利用出来るので、LRP王国に吸収されていないと考える。時間の問題だろう。MSEと異なり、Materhorn はループバック・インターフェイスを認識する。別の相違はTFTPである。MSEにはあるが、Materhorn にはない。

 

LRPの他に、同じ仕事をする沢山のデバイス、システム、ソフトウエアがある。Napsterに対するGnutellaのように、有名ではないHotline、ScourなどがLinuxに焦点を当てている。有名ではないが、DOSベースのルーターなど、多くの製品があり、どの Unix/Linux/Freenix ベース製品より安全性と安定性が良い。

 

君達のうちどの位がNISTファンだろうか? 私は、私のAlpha- 及び Intel-ベースサーバーをLinuxの同じバージョンで働かせている。店頭のマシンは SMC NICを持ち、全部のPCがWin98で、全部のルーターがCiscoで働く。標準化と言われるものがある。ネットワークがダウンしたと誰かが苦情を言ったとき、OSは何かと聞く者も、NICが何かを点検する者もいない。どのマシンも、同じCDと同じドライバを持っている。

 

サーバーはLinuxをうまく働かせられる筈だが、店頭のマシン全部がLinuxで働くことを望んでいるだろうか? 仕事のジャンル毎に標準化するべきだ。Linksys のハブで進むならすべてのハブをLinksys にすべきだし、Ciscoルーターでも、ディスク無しPCのLinuxでも同じだ。

 

LRPに適したアプリケーションと状況がある筈だ。Microsoft が冷蔵庫をWindows CEで動かそうとするなら、Linuxデベロッパもそうするがよい。自分のためだけを計るのは良くない。LRPは時間を無駄にしているデベロッパの救い主だ。少なくとも興味を持たれることを望む。

 
 

GNU GRUB ブートローダー

By Jaswinder Singh Kohli

 

ブートローダーとは?

ブートローダーとは、ディスクのスタート・セクター、例えばハードディスクのMBRに常駐するプログラムである。システムが設定されていると、ブートアップの間にシステムをテストした後、BIOSは制御をMBRに移す。MBRに常駐するプログラムが実行される。このプログラムをブートローダーと呼び、その任務はOSに制御を移すことで、次いでブート処理を進める。

利用出来るブートローダー・プログラムは、GNU GRUB (Grand Unified Boot Loader), Bootmanager, LILO (LInux LOader), NTLDR (Windows NT システム用)など、沢山ある。ここでは GNU GRUB を選んでその使い方を説明する。

 

GRUB とは?

GRUBは、Windows, DOS, Linux, GNU Hurd, *BSDなど各種OSをロードすることの出来る極めて強力なブートローダーである。

現在はLILOが最も普及したブートローダーであるが、LILOを用いると、コンフィギュレーション変更毎又は新kernel搭載毎に再起動しなければならず、GRUBより融通性に欠ける。

GRUBは融通性の代名詞だ。最新版0.5.96.1は、ext2 (Linuxユーザーの使うファイルシステム)、FAT16 及び FAT32 (Win9x とMEで使用)、FFS (*BSD UNIXで使うファストファイル・システム)、ReiserFS ( Linux Kernel 2.4.1に組み込まれた新ジャーナルファイル)及びminix(MINIX OS用に開発、初期Linuxでも使った旧ファイルシステム)をサポートする。GRUBを用いると、OSをブートしないでもこれらのファイルを「見る」ことが出来る。例えば、OSに時刻がないので、テキストファイルに記憶された時刻を見たいときは、GRUBのシェル(プロンプトgurb>)を使って次のようにタイプする。



grub> cat (partition number)/home/god/filename.txt.  




日付と時間を含むすべてのファイルシステムが得られる。




GRUBを使う最良の点は、任意のkernelを任意のパーティションにロード出来ることだ。例えば、新たにコンパイルしたkernelをリストに加え損ねたとき、それを使うには普通はブートをし、リストに加えた上で再ブートする必要があるが、シェルを使うだけで望みのkernelイメージをロードするだけでよい。




ここで、GRUBを使うための三つのステップ、コンパイル、インストール、コンフィギュレーションを説明する。


ステップ 1: GRUB のコンパイルとインストール

 ftp://alpha.gnu.org/pub/gnu/grub.からGRUBをダウンロードする。

圧縮アーカイブを "tar -xvzf filename.tar.gz"/ として抽出する。、筆者の場合ファイル名はgrub-0.5.96.1.tar.gz なので次のようにした。



# tar -xvzf grub-0.5.96.1.tar.gz


このコマンドは沢山のファイルとディレクトリを grub-0.5.96ディレクトリを抽出した。ここで次のようにする。


[root@heaven ~/grub-0.5.96.1 ]# ./configure


GRUBに特定のファイルシステムとネットワーク・カードをサポートさせるか、又はネットワーク・カードのサポートを外すなら不要、次をランする、



[root@heaven ~/grub-0.5.96.1 ]# ./configure --help


このコマンドは、オプション全部を示す。そこで、 --enable と --disable のプレフィックスを使って、規定のカードのサポートを加えたり外したりする。

(注記:GRUB はネットワークのブートをサポートする)

コンパイル処理を開始するには、次をタイプする。



[root@heaven ~/grub-0.5.96.1 ]# make




すべてのファイルを正しい位置にインストールするには、次をタイプする。




[root@heaven ~/grub-0.5.96.1 ]# make install




ここでGRUBインストールの準備が出来た。




GRUBのブート関連ファイル全部を /boot/grub のようなディレクトリに入れるのは良い考えである。そのため次の簡単な手順を踏む。


1.規定値ではGRUBの全ファイルはシェル変数の設定によって /usr/share/grub/i386-pc 又は /usr/local/share/grub/i386-pc にセットされる。

2.続いて /boot/grub ディレクトリを作り、ここに次のファイルをコピイする。



stage1


stage2


*_stage1_5




これらのファイルは後に説明する。GRUBプログラム(これは/usr/sbin 又は /usr/local/sbin にある)も /boot/grub ディレクトリにコピイする




GRUBインストールの前に、GRUBがハードドライブとパーティションの情報をどのように理解しているかを知る必要がある。先ず最初に、1からでなく0からカウントする。Linuxでは、プライマリ・マスター・コントローラに付属する最初のハードドライブを"hda" と呼ぶ。GRUBではこれが "hd0" となる。同様に、最初のフロッピイドライブはGRUBでは "fd0" である。第一ハードディスクの第一、第二、第三パーティション(hd1、he2、hd3)は、GRUBで "hd0,0"、"hd0,1" 、"hd0,2" となる。




(注記:コンマはGRUBではパーティション名の構成部分)




二つのフィールド(ディスクドライブ番号とパーティション番号)を統合するには、丸括弧を使ってコンマの前後で一つにする。例えば(hd0,0) (hd0,1) (hd0,2) など。(hd0,0) は、第一ハードディスクの第一パーティションで、以下同じである。 


ステップ 2: GRUB のインストール

GRUBのインストールは三つの部分に分けられる。

1. MBRに "stage1" をインストール
2. アドレス又はロケーションの設定、"stage2"
3. ブートメニューの設定又はブートする任意選択OSの設定

次のコマンドでGRUBのインストールを開始



[root@heaven /boot/grub ]# ./grub


このコマンドはデバイスを探ってBIOSドライブを推定し、メッセージを出すす。これには時間が掛かる。



end_request: I/O error, dev 02:00 (floppy), sector 0


    GRUB  version 0.5.96.1  (640K lower / 3072K upper memory)


注記:驚くかも知れないが、GRUBは最低のBash的エディットをサポートする。第一語でTABは可能なコマンド完了を列挙する。別のどこかでTABはデバイス/ファイル名の可能な完了を列挙する。この特性には驚くだろう。続いて次のように現れる。



grub> 


ここで、第一ディスクの第一拡張パーティションつまり /dev/hda5に配布Linuxを搭載しているとする。GRUBは(hd0,4)と命名する。次のコマンドをタイプする。



grub> install (hd0,4)/boot/grub/stage1 (hd0) (hd0,4)/boot/grub/stage2 p (hd0,4)/boot/grub/menu.conf


ここで、このコマンドを詳細に検討する。
install
GRUBに (hd0,4)/boot/grub/grub/stage1 を (hd0)、Master Boot Record、に搭載するよう命令する埋め込みコマンド。
(hd0,4)/boot/grub/stage2
grub にstage2 image の位置を知らせる。
p with the the following options: (hd0,4)/boot/grub/menu.conf
綺麗なメニューを示すためのコンフィギュレーションを設定、コンフィギュレーション・ファイルの構造は後に述べる。

コマンドは次のようにまとめることが出来る。

1.install(インストール)
2.source_of_stage1(stage1のソース)
3.where_to_install(インストール位置)
4.source_of_stage2(stage2のソース)
5.p source_of_configuration_file(コンフィギュレーション・ファイルのp source)

これで基本的ハードドライブ・インストールを終わった。

フロッピイへのインストール:

GRUBをフロッピイにインストールするには、'dd' コマンドとその働きを知らなければならない。GRUBでブート出来るフロッピイとして stage1 と stage2 ファイルをフロッピイのスタート・セクターに入れる必要がある。

フロッピイに stage1 をインストール

フォーマット済みフロッピイを入れて次のようにタイプ。



[root@heaven /boot/grub ]# dd if=stage1 of=/dev/fd0 bs=512 count=1


ここでもコマンドを詳細に検討する。

if=input file
つまりstage1
of=output file
つまり、フロッピイドライブ (これは既存コンピュータと異なる)
bs=bytes to read and write
512 バイトある
count=how many times to perform this operation
繰り返し毎に、ブロックの "bs" 番を目的地に次々にコピイする

フロッピイに stage2 をインストール



[root@heaven /boot/grub ]# dd if=stage2 of=/dev/fd0 bs=512 seek=1


ここでは seek と呼ばれる新項目を除いて前と全く同じである。seekは "bs" 値を1だけ飛ばす。例えば、上のコマンドではbsは512なので、seek=1はフロッピイディスク上で512バイト分飛ばして513バイト目に続く。これはstage 1 で書き込んだ最初の512バイトを上書きしないで、最初の操作を保存する。

これで基本的フロッピイドライブのインストールを終わった。

ステップ 3: GRUB のコンフィギュレーション

ここでは、各種OSをブートする方法と、menu.conf ファイル作成方法を示す。

GRUBのサポートするブート手順からはじめる。ブートは二つの方法で出来る。

・A. kernelを呼び出し本来の方法でおこなう
・B. チェインローディング又は制御を別のブートローダーに渡す

方法Aを用いるブート手順:

1.ルートデバイスを設定又はGRUBにルートファイルシステムを告げる
2.GRUBにkernel image の場所を告げて、パラメータをkernelに渡す
3.再ブートしてそれを試す

Linuxをブートするには、筆者はkernelをbzImageとして/boot/にルートファイルシステムを as /dev/hda5 としておくか、又はGRUBの中の (hd0,4) におく。だから筆者のブート手順は次のようになる。

1.root (hd0,4)  [これはルート・パーティションを設定する]
2.kernel /boot/bzImage root=/dev/hda5  [これは kernel を設定する]
3.boot  [これは Linux へのブートを開始]

方法Bを用いるブート手順(この方法は、LILO又はNTLDRのような別のブート・マネージャがパーティションにインストールされていると仮定する)

1.ルート・パーティションを設定するが取り付けない
2.パーティションをアクティブにする
3.コマンド chain loader を用いて制御を移さなければならないデバイスの第一セクターを設定する
4.再ブートして試す

/dev/hda1 つまり (hd0,0)にインストールしたウインドウズを用いて別の例を試してみよう。ウインドウズを用いるブートは次に通りである。た

1.rootnoverify (hd0,0)
2.makeactive
3.chainloader +1  [+1 は現行ルート・パーティションの第一セクターを設定]
4.boot  [制御をうつして GRUB を quits する]

menu.conf file:これは多数OSのブート及びメニュー構築に用いられる。menu.conf fileの構築は難しくない。この節で見られるように英語の平文を用いる。

メニュー入力はすべてコンマなしの "title TITLENAME" で始まる。TITLENAMEは好きなように決める。

Linux ブート用メニューを作るには:

1. titleを設定.
2.ルート・パーティションを設定
3.正しい種類のパラメータを用いて kernel を設定
4.ブート

作業用メニューを作るには:



title Debian GNU/Linux 2.2 kernel 2.4.1


root (hd0,4)


kernel /boot/bzImage.2.4.1


boot


#----


(行の前のハッシュ (#) はコメント)

ウインドウズ用又はDOS用メニューを作るには:



title Windoze 


rootnoverify (hd0,0)


makeactive


chainloader +1


boot


#----


ウインドウズを二つ−−自分用と別の家族用と−−持っていて、後の方がウインドウズを既に搭載しているので搭載したくないと言ったらどうするか?

ブート中に一つのパーティションを隠して二つの版を搭載し、別の方を使うする簡単な方法がある。パスワードで自分の版を保護して誰も自分のパーティションにロードしないように出来る。コマンドlock、password、hide、unhideを用いて、.ウインドウズを二つ、hda1とhda2と、つまり (hd0,0) と (hd0,1)と、をロードする方法を述べる。

ウインドウズ "My Entry" について:



title My Entry


lock


unhide (hd0,0)


hide (hd0,1)


rootnoverify (hd0,0)


makeactive


chainloader +1


boot


#----


lock コマンドを効果的に用いるには、コンフィギュレーションファイルの始めの方で password コマンドを使わなければならない。 password コマンドの書き方は、"secret" をパスワードとすると、 password secret である。pを押せば何時でもパスワードを入力できる。

ウインドウズ "Family Entry" について:



title Family Entry


unhide (hd0,1)


hide (hd0,0)


rootnoverify (hd0,1)


makeactive


chainloader +1


boot


----


これはパスワードが必要ないので、誰でもブートできる。

password コマンドを使うと面白いことができる。デフォルト・メニュー・リスト又はコンフィギュレーション・ファイルへの入力を隠すには、次のコマンドを用いて秘密リストをロードすることが出来る。



password secret


/boot/grub/secret-list.conf

このコマンドで "secret" はパスワードで /boot/grub/secret-list.conf はパスワードファイルである。これを行う前に、ルートディレクティブを設定するか又はフルパスを与えなければならない。例えば、



password secret (hd0,4)/boot/grub/secret-list.conf


もう一つ重要なコマンドは、"map" コマンドで、これは、二つのハードディスクがあって第二ハードディスクからブートされたくないウインドウズのようなOSを持っているとき使うことが出来る。例えば、hd0をhd1としてhd1をhd0としてマップすることが出来る。言い換えると、二つのハードディスクを仮想的に交換して望みのOSをロードすることが出来る。コマンドは次の通りである。



grub> map (hd0) (hd1)


grub> map (hd1) (hd0)


FreeBSDのブートに関して:



title FreeBSD 4.0


root (hd0,4,a)


kernel /boot/loader


boot


#---- 


ここで FreeBSD のローダーを呼び出している。root (hd0,4,a) は、FreeBSD が一つのパーティションを仮想スライスするので、三つのアーギュメントを持つ。ルートパーティションを "a" と呼ぶ。FreeBSD がシステムの第二ディスク全部を占有していると、これがルート (kd0,a) になる。だからkernelを呼び出す代わりに、kernelより話し易い FreeBSD を呼び出す。

(注意: OpenBSD と GNU/Hurd を試す前に、chain loadeing の作業を続けてままにすることをお薦めする)

ここで基本的GRUBコンパイル、インストール、コンフィギュアを完了した。GRUBをさらに深く知るにつれ、GRUBがブート制御に用意で有力な方法であることが分かるだろう。

その他のGRUB コマンド:

default xx

ここで xx は、ブートへのデフォルト入力
timeout yy
ここで yy は、デフォルト入力がブートした後の時間(秒で)
fallback zz
ここで zz は、時間経過後第一入力がブートに失敗したときブートする入力
color
これは、メニューの着色に用いる。書き方は: color normal current_selection。フィールドの両方がフォアグラウンド/バックグラウンドとして二つの値を持つことが出来る。例えば


color green/black or light-gray/blue


相当する番号を用いてもよい。

覚え書き:すべての値が0から始まるので、第一入力は0である。

次の記事では、 Fire GNU/Hurd とOpenBSD と多分ネットワーク・ブートアップの試験を計画している。少なくとも3ヶ月以上掛かるだろう。見守られたい。

ご意見、間違いがあれば何なりと下記へ

http://www.linuxgazette.com/issue64/jskohli@fig.org.

 
 

CVS バージョン制御番号のウェブペイジへの表示

By Mark Nielsen

 

緒言

記事を書いて僅かな年数だが、Central Ohio Linux User Group のPhil Hunter なる馬鹿者が何度も記事にバージョン制御を入れるよう言って来た。勿論なすべきことの一つだが、筆者はいつものように古い項目を取り上げる。条件は下記だった。
1.EMAN and INFOSEC グループの Cisco で働いた後、CVSの使い方を少し詳しく習った。CVSマニュアルを出版した available at genericbooks.com.。今はCVSで何でも出来る。
2. SSI、PHP、Mason、ASP、EmbPerl、ePerl その他の Perl サーバーサイドで Apache 用モジュールを僅か数年使った後、CVSファイルの内容読取、結果のプリントにPerlスクリプトを用いるのは取るに足りないことになった。
3. 筆者は沢山文書を持っているので、バージョン制御の時期が来た。

バージョン番号を表示する Perl スクリプト

どのドキュメントでも容易に同じコマンドが使えるようにするため、筆者はこのサーバーサイドに Apache と一緒に来るコマンドを含ませる。 PHP、Perl ASP、Mason、その他のサーバーサイドのスクリプト言語もまた同じコマンドを持つ。


<!--#include virtual="/ssi/cvs_version.pl"  -->


筆者はapache httpd.conf ファイルに下記を入れて、すべてサーバーサイドを使えるウェブペイジがコマンドを使えるようにした。



<Directory "/usr/local/apache_gnujobs/htdocs">


    Options All Indexes FollowSymLinks MultiViews ExecCGI Includes 


    AllowOverride All


    Order allow,deny


    Allow from all


</Directory>


AddType text/html .shtml


AddHandler server-parsed .shtml .html .htm .shtm


テキスト版は text version of the perl script、 又は次のドキュメントからコピイしてペーストすることも出来る。

#!/usr/bin/perl
print "Content-type: text/html\n\n\n\n";
 ### 要求ファイル名を得る
my $Temp = $ENV{'REQUEST_URI'};
my $Cvs = $Temp;
 ### "/" でurlをスプリットする
my (@Junk) = split(/\//, $Cvs);
 ### url の終端を得る。これがファイル名
my $File = pop @Junk;
$Cvs =~ s/[^\/]+$//g;
 ### ドキュメント・ルート。ディレクトリに加える。するとファイルへの

 ### 現行サーバー上の完全パスが得られる。CVS/エントリ名もまた加える。

 ### すると CVS 情報が得られる。
$Cvs = $ENV{'DOCUMENT_ROOT'} . $Cvs . "CVS/Entries";

 ### ファイルを開く。matchを見出したら、それを $Match に記録する。

my $Match = "";
open(FILE,$Cvs);
while (my $Line = <FILE>)
 {
 if ($Line =~ /$File/) {$Match = $Line; chomp $Line}
 }
close FILE;

  ### matchを見出さなければ、プリントを見出さない、そうでなければ情報を得る
if ($Match eq "") {print "No CVS information found. '$File'\n";}
else
 {
   ### Get the information we want and print it out.
 my ($Junk,$File,$Version,$Date,@Junk) = split(/\//, $Match);
 print "Version <b>$Version</b> : Date Last Changed <b>$Date</b>\n";
 }

セキュリティ

上記のperlスクリプトを用いるとセキュリティの問題を生じる可能性がある。誰でもがCVSディレクトリにあるファイルを読むことが出来る。ほとんどの人にこれは大した問題ではないと考えるが、心配なときは、Apache ウェブサーバー用の httpd.conf ファイルに次のコマンドを用いてCVSファイルの中のドキュメント読取を阻止する。簡単な方法だ。筆者は "Root"、"CVS"、"Repository" 又は "Entries" で終わる名のファイルもディレクトリも持たない。


<Files ~ "CVS$">


    Order allow,deny


    Deny from all


</Files>


<Files ~ "Root$">


    Order allow,deny


    Deny from all


</Files>


<Files ~ "Repository$">


    Order allow,deny


    Deny from all


</Files>


<Files ~ "Entries$">


    Order allow,deny


    Deny from all


</Files>




 


結び

CVSと筆者のperlスクリプトを用いる文書のバージョン番号を表示は、ドキュメントのバージョン管理に満足な方法だ。細かい点で、出来ることが五つほどもあるが、敢えて変える必要はない。
 

参考

1.変更があればhttp://www.gnujobs.com/Articles/16/CVS_SSI.htmlで入手出来る
2.Mark Nielsen著 CVS: Concurrent Versions System

Mark は GNUJobs.comのような訴訟、著作、フリーソフトウエア作成のほか eastmont.net.でボランチアとして働いている。

Copyright © 1/2001 Mark Nielsen
Article Version 1.3 : Date Last Changed Sun Feb 25 21:13:16 2001

 

 

Perl の学習, パート 2

By Ben Okopnik

 
「ここで私は、C言語とUnixシェルとの間に大きい生態的な隙間があることに気付いた。Cは複雑な物事の扱いに適している−マニピュレキシティと言おう。シェルは物事を素早くつかむのに適している−ホイッピチュードと言おう。だがこの二つの間に大きい隙間があり、それが Perl の狙いだ」
-- Larry Wall、 Perl の著者

 

概観

パート1では、Perl の基本と一般的問題−スクリプトの書き方、ハッシュバン、スタイル−と同時に、スカラー、ハッシュ、アレー、オペレータ、クォートなどの明細を学んだ。今月は、コマンド行からの使用を容易にする本来のPerlツール、と同時にスクリプトの中での等価物を説明する。クォート用法の詳細にも踏み込みregexe(通常表現、RE)−Perlの最も強力なツールですべての本がそれ専用になっている−を開始する。 [1]

クォートのメカニズム

殆どの人はUnixの標準クォート・メカニズムに慣れているだろう。シングルとダブルのクォートがPerlでもシェルと同様の機能を持つことは既に述べた。しかし、行内の記号全部をエスケープ符号で囲むのは少し苦痛だ。次の文字列をプリントするとしよう。

``/// Don't say "shan't," "can't," or "won't." ///''

どうするか?

沢山のエスケープ("\")を使えば良いが、(爪楊枝趣味症候群)

print '\`\`\/\/\/ Don\'t...

<ゾッとする> 明らかに模範解答ではない。Perl には別のクォートメカニズムがある:

q//    # シングルクォート
qq//    # タブルクォート
qx//    # シェル実行用バッククォート

qw//    # ワードリスト - ポピュレーティング・アレーに有用

デリミタは '/' でなくとも任意の文字で良いことに注意。ここで少し楽になった。

print q-``/// Don't say "shan't," "can't," or "won't." ///''-;

簡単だって? 兎に角、これはスクリプト内部でだけ使うもので、コマンド行からしようとすると、特にバッククォートとスラッシュについは、シェル翻訳機構が恐ろしい量のこれをおこなう。

Perl の呼出し

コマンド行から走らせるとき、Perl 呼出に最も普通に使われるスイッチは、'-e' である。これは直後に続くことが何であれ実行することをPerlに命じる。'-e' の後は何でもスクリプトの一部と見なされるから '-e' はコマンド行で使う最後のスクリプトにしなければならない。

perl -we 'print "The Gods send thread for the Web begun.\n"'

"-w" は、前回述べた "warn"(警告)スイッチである。コードの中の、設定したが使用しなかった変数など、致命的でないエラーすべてを知らせる(変数のミスタイプには無効)。スクリプト又はコマンド行には常に "-w" を使用になければならない。

"-n" は "non-printing loop"(プリント無しループ)で、Perlは一回一行を入力全体で "awk" のように繰り返す。特定行をプリントしたいときは、条件を示す必要がある。

perl -wne 'print if /holiday/' schedule.txt

Perlは "schedule.txt" をループし、"holiday" の語を含む行をプリントする。

"-p" は "printing loop" の呼出で、ループする各行をプリントする以外 "-n" のように働く。これは、ファイルの修正や書込のような "sed"-状の演算に有用である。(一ビットだけの代替オペレータ 's///' を後で述べる)

perl -wpe 's/holiday/Party time!/' schedule.txt

これは最初に語 'holiday' があらわれたとき、任意の与えられた行と置き換える('g'lobalのように 's///' と共に用いる修飾子については "perldoc perlre" を参照)

"-i" は、望みの作用により、上記いずれと組み合わせても良く働く。"in-place" エディット、つまりスクリーンにプリントしないで規定のファイルを変更することが出来る(任意選択であらかじめパックアップを取る)。 "i" を "wpe" ストリングに付けるだけでは駄目なことに注意。任意選択のアーギュメント−バックアップコピイに付ける拡張子−を取り、その後にその拡張子を定義するテキストが続く。

perl -i~ -wpe 's/holiday/Party time!/' schedule.txt

上の行は、変更された "schedule.txt" と、元のファイル "schedule.txt~" を作る。拡張子のない "-i" は元のファイルを上書きする。この方がオリジナルを残すより簡単だが、コードが正しくないと、元のデータが消える。

RegExes、つまり "Has The Cat Been Walking On My Keyboard Again?"(キイボード上で同じ文字を再現)

Perlで得られる最も強力なツールの一つ regular expression は、あらゆるキャラクタ・アーギュメントにマッチする方法である。ここではほんの基本だけを述べる。詳しくはPerl付属のマニュアルを調べられたい。

REは、通常 "m//" (マッチング)と"s//"(置換)オペレータと共に、パターンマッチに用いられる。これらの中のデリミタは、クォート機構と同じように、'/' に限らないことに注意。事実、マッチング演算子の 'm' は非規定値デリミタを使うときにのみ必要である。でなければ "//" で十分である。

REと共に使ったマッチキャラクタを示す。他にも沢山あるが、初めはこれで十分。

.    新行を除いて、あらゆる文字をマッチ

^    行頭をマッチ

$    行末をマッチ
|    代替 ("left|right|up|down|sideways"をマッチ)
*    0 回以上マッチ
+    1 回以上マッチ
?    0 回又は 1 回マッチ
{n}   n 回だけマッチ
{n,}   最低 n 回マッチ
{n,m}  最低 n 回だが、m 回以下マッチ

例として、氏名一覧表のファイルを持っているとする:

Anne Bonney
Bartholomew Roberts
Charles Bellamy
Diego Grillo
Edward Teach
Francois Gautier
George Watling
Henry Every
Israel Hands
John Derdrake
KuoHsing Yeh
...

姓を 'Captain' に変えたい。プリントループを用いてファイルを通覧し、判断基準に合ったとき、置き換えを行う。

s/^.+ /Captain /;

カレート('^') は行頭に一致し、".+" は「一回以上繰り返される任意の文字」で、空白は空白にマッチする。探している者が見付かると、'Captain' に置き換え、探している文字列に空白が一つ入っているので、それを返すため空白を続ける。

また、ファイルのどこかにアポストロフィを含む名前(Francois L'Ollonais)があり、これ−又は文字でない記号−を飛ばしたい、ときはregexを少し伸ばす。

s/^[A-Z][a-z]* /Captain /;

「文字クラス」規定子 "[]" を用いた。最初の一つの文字が 'A' と'Z' の間に一致することを判定し−−これは一字だけ比較する大変重要なメカニズムだ−−続く 'a' から 'z' までを一致判定する。次のアスタリスクは「先行文字0以上」を指定する。

一寸待て、"KuoHsing" はどうする? 大文字は規定範囲内にないので 'H' はマッチしない筈だ。宜しい、regexを変えよう

s/^\w* /Captain /;

'\w' は "word character"(文字)だ。'A-Z'、'a-z', と '_' を含む一字だけを照合する。これは、$LOCALE(システム値)の値を使用して、英語以外の言語で重要な、どの記号が語の一部であるか否かを判定するので [A-Za-z_] とするのが好ましい。'\w' の方が '[A-Za-z_]' とタイプするより楽だ。

一寸違うことをおこなって見よう。姓を全部照合した上で、差し替えでなく、コンマで分けて名と入れ替え、名を 'Captain' にしたいとしよう。regexのコマンドは、

s/^(\w*) (\w*)$/Captain $2, $1/;

括弧及び "$1" と "$2" の変数に注意されたい。regexは括弧で囲まれた部分を捕捉する。(最初のものが $1で次が $2 など)。上記を平分で書いて見よう。

行頭から初め、($1への取込を開始)「文字」を一致させ、0回以上繰り返して、空白を置く($2への取込を開始)「文字」を一致させ、0回以上繰り返し(取込終了)行末で終わる。空白、'Captain'、値$2、コンマ、値$1の順で続く語を返す。

regex は上の全部を極めて簡潔に述べている。Larry Wall は言語専門学者と言えよう。

regex 構築の簡単な例を述べたが、これは大きい課題で、色々な拡張が考えられる。

"John deJongh", "Jan M.、van de Geijn", "Kathleen O'Hara-Mears", "Siu Tim Au Yeung", "Nang-Soa-Anee Bongoj Niratpattanasai"、"Mjölby J. de Wærn" などを考えると面白い。

 

regex メカニズムに付き知っておくべき重要な要素がある。規定値では"greedy matching". (貪欲照合)を行う。言い換えると次のような文章

Acciones son amores, no besos ni apachurrones

と次のような regex があると、

/A.*es/

これは以下とマッチする。

Acciones son amores, no besos ni apachurrones

|___________________________________________|

'A' から最後の 'es' まで(間の文字を入れて)全部だ。では、最初の例だけにマッチする方法は?greedに抵抗するため、Perlは、 '*', '+', '?' のような記号に対し"generosity"(寛大)修飾子を備えている。

/A.*?es/

Acciones son amores, no besos ni apachurrones
|______|

大分良い。将来の参考のため覚えておかれたい。一連のregexを用いて文字列をマッチングで断片に分割するときで、最後の「塊」に空白が来るとき、"greed" 問題に悩むだろう。

デフォルト・バッファ/変数

読者の中には、特に嘗てプログラムをした人の中には、上のコードで次の構文を奇妙に思う人がいるだろう。

print if /holiday/;

Print what if what? の何処にマッチを点検しようとする変数があるのだろう? シェルでのように 'if $x == /holiday/' の形になる筈ではないのか?」

大変良い質問だ。

Perlはdefalult buffer と言う他の少数の言語が使う面白いコンセプトを使う。default variable ともdefault pattern とも言う。これはPerl 呼出しで "-n/-p" シンタクスを使うとき、ループ構造の中で使われる。現在行の維持−置換及びマッチその他多くの場所で使われる変数だ。 '$_' 変数は、期待される場所に変数が規定されていないときの上記の既定値だ。 '$_' は「未決囚」だ。'$_' の説明は難しい−アルゴリズムが不能と思われる多くの場所に出て来る−だが、アイデアが分かると使うのは易しく直感的だ。

次を考えて見る。

perl -wne 'if ( $_ =~ /Henry/ ) { print $_; } pirates

上で、"pirates" ファイル内の行が "Henry" にマッチすると、キチンとプリントされるが、

ここで、キイを幾つ叩くとコードが消え、それでも元通り働くかを試して見よう。

Perlは各行を '$_' に読み込むことを知っている。それを全部外して見よう。

perl -wne 'if ( /Henry/ ) { print; } pirates

Perlはデフォルト変数に対しマッチすることを「承知」しており、"print" ステートメントにもそれが当て嵌まることを「承知」している。そこでPerlイデオムを少し加える。

perl -wne 'print if /Henry/' pirates

どうだ?Perl では動作にしたがって英語で書く通りにコードを書くことが出来る。最後のセミコロンは摘み取った。これはステートメント・セパレータで"/Henry/"の後にステートメントはないからだ。興味のある人は次を試して見られたい。

perl -ne'/Henry/&&print' pirates

想像は難しくない筈だ。Perl の '&&' オペレータはシェルと同じ働きをする。働くPerlのコードを書くのは容易いが、理解するには相当頭を働かせる必要がある。以上のようないたずらは余りしない方が良い。

最初の例で、"binding operator"(結合オペレータ)'=~' に注意されたい。これは与えられた変数内のマッチを点検する。"$_" 以外の変数に対しマッチするとき使うものだ。"negative match"(不一致)オペレータ)'!~' もある。マッチに失敗したとき真を返す( '=~' の反対。

単純ステートメントに利用出来る上のような修飾子には、"if" だけでなく"unless"、 "while"、"until"、"for" などがあるがこれらはパート3で出て来る。

Ben Okopnik
perl -we '$perl=0;JsP $perl "perl"; $perl->perl(0)'\
2>&1|perl -ne '{print ((split//)[19,29,20,4,5,1,2,
15,13,14,12,52,5,21,12,52,8,5,14,1,6,37,12,52,75])}'

 
[1]. 事実、一つある。Jeffrey E. Friedl 著「Mastering Regular Expressions」は題名通りの参考書である。素晴らしい例とライブラリがあってregexで考えることを教える。

参照:

Perl マニュアル関係 (任意の pro-Perl-y 構成システムで利用可能):

perl   - overview       perlfaq  - Perl FAQ
perltoc  - doc TOC        perldata - データ構造
perlsyn  - syntax        perlop  - オペレータ/プロシージャ
perlrun  - execution       perlfunc - 埋め込み関数
perltrap - traps for the unwary perlstyle - スタイル案内

"perldoc", "perldoc -q" and "perldoc -f"

 
 

Xmodmapを用いる国際キイボードの設定

By Juraj Sipos

 

1. 緒言

これはhere.ここの Linux Gazetteに発表した実験的手法(ここhere.)の改訂である。改訂の理由は、KDE 2.0 にはもうKDE 2.0 ユティリティがなく XFree86 4.x は旧版より良い標準 ISO8859-2 キイコードを用いるからである。この情報は Xmodmap ソリューションだけに関し、XKB には関係ない。
[注記:この記事は、お手元には未だ配布されていない XFree86 バージョン 4.x に関するー編集者]

1.2 クイックスタート

このファイルの中の情報にしたがって自分の .Xmodmap ファイルを作る。
ホーム・ディレクトリの中の .bash_profile に下記を書き込む。


export LANG=language 


export LC_ALL=language


ここで "language" とは、使用したい言語である。言語は /usr/X11R6/lib/X11/localeの中のlocale.alias にある。コンソールで "exit" コマンドを走らせ、再度ログインして bash に ~/.bash_profile からステートメントを読み込ませる。
フォント(最良はチェコ又はスロバキア用 ISO8859-2 Type1フォント)をインストールしてXF86Config のパスに置く。X サーバーをスタートする。

一定の環境ではパスの中にISO8859-2 フォントが有っても KDE 2.0 テキスト・エディタが表示しないことがあるのに注意されたい。このエディタ・メニューの "Latin2" ステートメントが働かないらしい。CHOOSE fonts が出来るときは(古いKDEからの古いkeditでは出来る)別の簡単なテキスト・エディタを搭載されたい。メニューからダイアログウインドウを開いて、フォントを選び、ISO8859-2 エンコードを選択する。

X端末ウインドウからコマンド "xmodmap ~/.Xmodmap" を走らせて、システムに Xmodmap ファイルを読ませる。

キイボードを切り換えれば、それで使える。

その他の、ここでは述べないが同じく国際化が出来るXKBソリューションは、国際キイボード構成の別法で、XKBXMODMAP のソリューションは互いに無関係である。/etc/X11/XF86Configファイルを Danish-HOWTOで説明したようにエディットするか、又はこのコマンドをスロバキヤ・キイボード用X端末ウインドウから送る:



setxkbmap -model pc102 -symbols 'czsk(us_sk_qwertz)' setxkbmap cs -option grp:shift_toggle


"grp:shift_toggle" はキイボード間の切り換えオプションを与える。XF86Config ファイルに下記を試すと、Ctrl とShift を同時に押したとき、キイボードが代わる


Option "XkbOptions"         "grp:ctrl_shift_toggle"


言語の種類を見るには、/usr/X11R6/lib/X11/xkb ディレクトリの symbols.dir ファイルを見る。幾つかの記号はソースであってバイナリでないことに注意。

ご覧の通り、これは極めて複雑と思われ、標準 XFree86 バイナリ・ディストリビューションに多くの国内キイマップが含まれていないことに気付くと、、ソースでは含まれていても、もっと困難になる。国際キイボード・レイアウト取扱用の kikbd ユティリティは、KDE 2.0 から移されたのでドキュメンテーションが極めて不十分である。簡単な方法は KDE から出発し、国際キイボード設定を変更して直ちに選んだ言語で書くことであろう。(これはドイツ語では働くが東欧キイボードでは幾つかの文字が機能しない)

加えて、KDE 2.0 コマンド "kcmshell Personalization/kcmlayout" はクロアチア語又はマケドニア語キイボードを示さない。チェコスロバキア語キイボードは示すけれども、チェコスロバキアは国としては最早存在せずユーザーはチェコ語とスロバキア語を別々に定義する方法に迷う。

Xウインドウズ・マネージャの中には .Xmodmap 設定を克服したものもある。 .Xmodmap が働かないとき、良い方法は、ルート(ホーム)ディレクトリから読み込ませることである。次のコマンドをX端末ウインドウから発してこれをおこなう。

xmodmap ~/.Xmodmap

ISO8859-2 文字用標準定義(lcaron, scaronなど)に使われる Xmodmap ファイル付きKDE のスロバキア語キイボードをインストールした後、スロバキア語もチェコ語も書き込むことは出来なかったが、このことは Linux Gazette で発表した記事に書いた。この経験的ソリューションは XFree86 の新版には当て嵌まらない。

2. Xmodmap を用いる国際キイボードの設定

基本的に次のように働く:

1. 標準解決策は、文字に付いて標準名を使用する(上に caron のあるsはscaronで上にスラッシュのある ú - は uacute)。

2. 経験的解決策の場合は、例えば、ISO8859-1 文字セット表からの幾つかのキーコード名がscaron を示す。

次をBash_profile に入れ、



export LC_ALL=language 


export LANG=language


OR


export LC_CTYPE=SK_SK 


export LC_ALL=SK_SK 


OR for csh shell 


setenv LC_ALL=language 


setenv LANG=language


その上で、標準 Xmodmap ファイルをホーム・ディレクトリに持つ。このような 「標準」 Xmodmap ファイルを入手するには GNOME ../share に行くこと。ファイル/usr/X11R6/lib/X11/locale/locale.alias は言語に関するエイリアスを含むので、 ca_ES 又は br_FR が何であるかを見るには、そこを見るか又は、使う言語に関する正確なシンタクスを見出すこと( "croatia" でなく "croatian" でなければならない "Croatian" でもない。Unix は大文字小文字を区別する)。
ここで、関係言語のフォントを搭載して、そをパスステートメントを XF86Config ファイルに置く。キイボードを国際化したいときは、先ず標準 Xmodmap 定義を用いキイボード間の切り替えには右altを用いる (GNOME Xmodmap ファイルを使っているとき)これでうまく行かなければ、次をおこなう。
KDE 又は GNOME を使っていて .Xmodmap が働かないときは、上述のようにコマンド"xmodmap ~/.Xmodmap" を使ってシステムに無理に読み取らせる。代わりに、 .Xmo1, .Xmo2, .Xmo3, .Xmo4 などのような60 .Xmodmap ファイルを持ちシステムに読み取らせることが出来る。ドットは隠しファイルであることを意味するので、不要である。xmo1, xmo2, or xmo3 Xmodmap ファイルもまた持つことが出来る。
ISO8859-2 フォント(又はその他のフォントi)へのアクセスを有するアプリケーションを用いて国内キイボードのみで書き込むことも出来るが、これは自分自身の埋め込みフォントを持つ StarOffice その他のアプリケーションには働かない。 StarOffice はafm フォント用にStarOffice/share/xp3/fontmetrics/afm を、psフォント用にStarOffice/share/xp3/pssoftfonts のディレクトリを有するので、これらのディレクトリに ISO8859-2 フォントを付け加え( StarOffice にこれらの告げ)て、fonts.dirをエディットしシムリンクしたフォントを加えなければならない。役立つスクリプトはHere is a script that will do it for you. "so52" と名付けて、実行可能にし (chmod +x so52)、 StarOffice/share/xp3 ディレクトリにコピイしてそこで実行する。
StarOffice 5.2 は、別の言語で書いてあっても Word97 文書を完全に認識するが、古い版や別のエディタでは、iso8859-2 から win1250 にエンコードするコンバータを使う。
こうして、どんな言葉にも翻訳する翻訳専門家がStarOffice 5.2 を使って MS Word97 又は rtf フォーマットで出力することが出来る。
 

文字セット

以下の情報の目的は、iso8859-2 その他のフォントを用いて任意の.Xmodmap キイボード構築を助けることである。どの名称が使われているかを知るため ISO-8859-2 文字表をここに含めた。この情報の多くは ISO-8859-1 文字のみ、又は東欧文字と西欧文字の組合せを使うキイボード構築にも有用である。中欧又は西欧以外の言語を使うときは、インターネットに設定された ISO*** 文字セット関係表を見出されたい。(RedHat) /usr/include/gdk/gdkkeysyms.h の中の gdkkeysyms.h を見出すと、ここで使うすべての特殊名称が含まれている。(ギリシャ文字の名称も含む)
 

標準 ISO8859-2 定義を有する Xmodmap

キイコード 0x31 から 0x33 までの標準 .Xmodmap ファイルの例。このファイルは、bash_profile の中にLC_LANG=language 及び LC_ALL=languageステートメントがあるときXサーバーに正しくlcaron, scaronなどを表示させる。キイコード 0x31 から 0x33 までの以下のテキストをそのまま、前に筆者がLinux Gazette に発表した Xmodmap にコピイされたい。(経験的定義は除く)テキスト版は [Text version of this listing.]


keycode 0x31 = grave asciitilde semicolon dead_diaeresis


keycode 0x0A = 1 exclam plus 1 


keycode 0x0B = 2 at lcaron 2 


keycode 0x0C = 3 numbersign scaron 3 


keycode 0x0D = 4 dollar ccaron 4 


keycode 0x0E = 5 percent tcaron 5 


keycode 0x0F = 6 asciicircum scaron 6 


keycode 0x10 = 7 ampersand yacute 7 


keycode 0x11 = 8 asterisk aacute 8 


keycode 0x12 = 9 parenleft iacute 9 


keycode 0x13 = 0 parenright eacute 0 


keycode 0x14 = minus underscore equal percent 


keycode 0x15 = equal plus dead_acute dead_caron 


keycode 0x33 = backslash bar ograve parenright


これは標準 Xmodmap ソリューションを用いる中欧キイボード構築に使うことの出来るテーブルである

Caron は文字の上の逆^である。

Acute は文字の上の/のような小さいダッシュである(ú はuacute)

Diaeresis は文字の上の二つの小さいドット .. である

Dot は文字の上のドットである (zdot).

以下の表に分かり易く説明する

ドイツ語又はデンマーク語用に ISO8859-1 Xmodmap ファイルを構築するときは、熟知しているのでない限り、これらシンボルの名称を別のマップで調べる必要がある。
東欧キイボード配置を得るには以下で右側の Xmodmap 入力を Xmodmap ファイルに含めなければならない。
中欧文字
文字名
 
Xmodmap と SGML の入力
NON-BREAKING SPACE nbsp
CURRENCY SIGN curren
BROKEN BAR brvbar
SECTION SIGN sect
DIAERESIS uml
COPYRIGHT SIGN copy
LEFT-POINTING DOUBLE ANGLE QUOTATION MARK laquo
NOT SIGN not
SOFT HYPHEN shy
REGISTERED SIGN reg
DEGREE SIGN deg
PLUS-MINUS SIGN plusmn
ACUTE ACCENT acute
MICRO SIGN micro
PILCROW SIGN para
MIDDLE DOT middot
CEDILLA cedil
RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK raquo
LATIN CAPITAL LETTER A WITH ACUTE Aacute
LATIN CAPITAL LETTER A WITH CIRCUMFLEX Acirc
LATIN CAPITAL LETTER A WITH DIAERESIS Auml
LATIN CAPITAL LETTER C WITH CEDILLA Ccedil
LATIN CAPITAL LETTER E WITH ACUTE Eacute
LATIN CAPITAL LETTER E WITH DIAERESIS Euml
LATIN CAPITAL LETTER I WITH ACUTE Iacute
LATIN CAPITAL LETTER I WITH CIRCUMFLEX Icirc
LATIN CAPITAL LETTER O WITH ACUTE Oacute
LATIN CAPITAL LETTER O WITH CIRCUMFLEX Ocirc
LATIN CAPITAL LETTER O WITH DIAERESIS Ouml
MULTIPLICATION SIGN times
LATIN CAPITAL LETTER U WITH ACUTE Uacute
LATIN CAPITAL LETTER U WITH DIAERESIS Uuml
LATIN CAPITAL LETTER Y WITH ACUTE Yacute
LATIN SMALL LETTER SHARP S szlig
LATIN SMALL LETTER A WITH ACUTE aacute
LATIN SMALL LETTER A WITH CIRCUMFLEX acirc
LATIN SMALL LETTER A WITH DIAERESIS auml
LATIN SMALL LETTER C WITH CEDILLA ccedil
LATIN SMALL LETTER E WITH ACUTE eacute
LATIN SMALL LETTER E WITH DIAERESIS euml
LATIN SMALL LETTER I WITH ACUTE iacute
LATIN SMALL LETTER I WITH CIRCUMFLEX icirc
LATIN SMALL LETTER O WITH ACUTE oacute
LATIN SMALL LETTER O WITH CIRCUMFLEX ocirc
LATIN SMALL LETTER O WITH DIAERESIS ouml
DIVISION SIGN divide
LATIN SMALL LETTER U WITH ACUTE uacute
LATIN SMALL LETTER U WITH DIAERESIS uuml
LATIN SMALL LETTER Y WITH ACUTE yacute
LATIN CAPITAL LETTER A WITH BREVE Abreve
LATIN SMALL LETTER A WITH BREVE abreve
LATIN CAPITAL LETTER A WITH OGONEK Aogon
LATIN SMALL LETTER A WITH OGONEK aogon
LATIN CAPITAL LETTER C WITH ACUTE Cacute
LATIN SMALL LETTER C WITH ACUTE cacute
LATIN CAPITAL LETTER C WITH CARON Ccaron
LATIN SMALL LETTER C WITH CARON ccaron
LATIN CAPITAL LETTER D WITH CARON Dcaron
LATIN SMALL LETTER D WITH CARON dcaron
LATIN CAPITAL LETTER D WITH STROKE Dstrok
LATIN SMALL LETTER D WITH STROKE dstrok
LATIN CAPITAL LETTER E WITH OGONEK Eogon
LATIN SMALL LETTER E WITH OGONEK eogon
LATIN CAPITAL LETTER E WITH CARON Ecaron
LATIN SMALL LETTER E WITH CARON ecaron
LATIN CAPITAL LETTER L WITH ACUTE Lacute
LATIN SMALL LETTER L WITH ACUTE lacute
LATIN CAPITAL LETTER L WITH CARON Lcaron
LATIN SMALL LETTER L WITH CARON lcaron
LATIN CAPITAL LETTER L WITH STROKE Lstrok
LATIN SMALL LETTER L WITH STROKE lstrok
LATIN CAPITAL LETTER N WITH ACUTE Nacute
LATIN SMALL LETTER N WITH ACUTE nacute
LATIN CAPITAL LETTER N WITH CARON Ncaron
LATIN SMALL LETTER N WITH CARON ncaron
LATIN CAPITAL LETTER O WITH DOUBLE ACUTE Odblac
LATIN SMALL LETTER O WITH DOUBLE ACUTE odblac
LATIN CAPITAL LETTER R WITH ACUTE Racute
LATIN SMALL LETTER R WITH ACUTE racute
LATIN CAPITAL LETTER R WITH CARON Rcaron
LATIN SMALL LETTER R WITH CARON rcaron
LATIN CAPITAL LETTER S WITH ACUTE Sacute
LATIN SMALL LETTER S WITH ACUTE sacute
LATIN CAPITAL LETTER S WITH CEDILLA Scedil
LATIN SMALL LETTER S WITH CEDILLA scedil
LATIN CAPITAL LETTER S WITH CARON Scaron
LATIN SMALL LETTER S WITH CARON scaron
LATIN CAPITAL LETTER T WITH CEDILLA Tcedil
LATIN SMALL LETTER T WITH CEDILLA tcedil
LATIN CAPITAL LETTER T WITH CARON Tcaron
LATIN SMALL LETTER T WITH CARON tcaron
LATIN CAPITAL LETTER U WITH RING ABOVE Uring
LATIN SMALL LETTER U WITH RING ABOVE uring
LATIN CAPITAL LETTER U WITH DOUBLE ACUTE Udblac
LATIN SMALL LETTER U WITH DOUBLE ACUTE udblac
LATIN CAPITAL LETTER Z WITH ACUTE Zacute
LATIN SMALL LETTER Z WITH ACUTE zacute
LATIN CAPITAL LETTER Z WITH DOT ABOVE Zdot
LATIN SMALL LETTER Z WITH DOT ABOVE zdot
LATIN CAPITAL LETTER Z WITH CARON Zcaron
LATIN SMALL LETTER Z WITH CARON zcaron
CARON caron
BREVE breve
DOT ABOVE dot
OGONEK ogon
DOUBLE ACUTE ACCENT dblac
 

3.このXmodmapソリューションの各種システム上での働き

これはGNOMEにおいては重要でないが、ISO8859-2 フォントを KDE 2.x 母国語アプリケーションに使うには i18n ファイル(/etc/sysconfig/i18n) を次のように変更しなければならない。

RedHat:
LANG="sk_SK"

ここで "sk_SK" は使用する言語

Mandrake:
SYSFONT=lat0-sun16
LC_MONETARY=en_US
LC_CTYPE=cs_CZ
LC_NUMERIC=en_US
LC_MESSAGES=en_US
LANGUAGE=cs_CZ:cs
LC_TIME=en_US
RPM_INSTALL_LANG=en
LC_COLLATE=en_US
SYSFONTACM=iso15
LANG=sk

又は FreeBSD 4.2 で、 /etc/profile を次のようにエディットする。
  LANG=cs_CZ.ISO_8859-2; export LANG             # チェコ語で書くため
  LC_MESSAGES=en_US.ISO_8859-1; export LC_MESSAGES     # 英文メッセージを得るため

Mandrake 又は FreeBSD の場合は、/usr/X11R6/lib/X11/xkb/symbols/ ディレクトリからマップ "cs" を用いる。これと共に何時でも xmodmap ソリューションを使えるが、代替方法は、定義を自分のもので置き換える場所で、マップファイルを相応に書き換えることだ。 KDE 2.x もまたメニュー Personalization > Country and Language > iso8859-2 文字セット (又は他の文字セット)から選ぶことを必要とする。このときだけ、これはISO8859-2 フォントをその国のアプリケーションで正しく表示する。この点でGNOMEはユーザーに親しみやすい。

以下は i18n ファイルが変更されなかった場合のソリューションに関する。

 

3.1 XFree86 3.3.6 と KDE 2.0 を用いる SuSe 7.0

Xmodmap ファイルを標準 ISO8859-2 キイコード定義("threequarters"でなく"scaron"など)とともに用いることが出来る。 ISO8859-2 キイコードを用いて直ちに書込を開始出来るけれども、残念ながら、デッドキイは正しく働かず、デッドキイを働かせるためのexport LANG=language がここでは働かない。
Compose ファイルを /usr/X11R6/lib/X11/locale/iso8859-2/ から/usr/X11R6/lib/X11/locale/iso8859-1/ にコピイした後、デッドキイがうまく働く。これはStarOffice 5.2 でも試した。フォントパスは /etc/X11/Xf86Config でなく/etc/XF86Configでなければならない。 StarOffice を使っている間、 StarOffice 自体からフォントを使用してはならない。 ../ISO8859-2 ディレクトリ(上記スクリプト実行後自動的にフォントメニューにあらわれる)からのものを使う。
以下は、筆者のSuSE 7.0 /etc/XF86Config ファイルからの ISO8859-2 用フォントパスセクションである。

FontPath "/usr/X11R6/lib/X11/fonts/ISO8859-2/Type1"

FontPath "/usr/X11R6/lib/X11/fonts/ISO8859-2/Type1/afm"

FontPath "/usr/X11R6/lib/X11/fonts/ISO8859-2/Type1/pfm"

3.2 XFree86 3.3.6 と KDE 1.x を用いるSuSE 7.0

KDE 2.0. と同じ

3.3 XFree86 4.x を用いる Mandrake Linux 7.2

ここでは bash_profile の中に LANG=language と LC_ALL=langauge があるだけで十分である(が KDE 2.x 母国語アプリケーションには駄目)。標準 .Xmodmap キイコード(scaron、 lcaron、 "threequarters" 又は "mu" なし、など)を適用してコマンド "xmodmap /.Xmodmap" を発すると Scroll Lockによりキイボードを切り換えて働かせられる。(筆者のXmodmap ファイルを用いるときは、右 Alt 又はその Xmodmap file で定義するものを試す)
/etc/X11/XF86Config と /etc/X11/XF86Config の中のフォントバス・ステートメントを変える必要はない。

FontPath "unix/:1"

XFree86 は新しい ISO8859-2 フォントを自動的に /usr/share/fonts ディレクトリに読み込む(RedHat と同じ)。 ../ISO8859-2/Compose ファイルを .. /ISO8859-1 ディレクトリに読み込む必要なしでデッドキイがうまく働くのは驚きだ。KDE 2.0 母国語アプリケーションに ISO8859-2 フォントを使うには、上の Mandrake 7.2 用 i18n ファイルを参照。

3.4 RedHat 6.0, 6.1 と 6.2 (XFree86 旧バージョン)

ここでは "experimental" .Xmodmap が働く ("lcaron" の代わりに "mu" など)ので、デッドキイを働かせるため、Compose ファイルを ../IS08859-2 から ISO8859-1 にコピイしなければならない。/etc/X11 に XF86Config が一つだけあり、フォントパスは上の SuSE 7.0 と同じである。

3.5 FreeBSD 3.1 と 3.2

RedHat 6.0, 6.1, 6.2 と同じ。

3.6 FreeBSD 4.x

FreeBSD 3.1 及び 3.2 と同じだが、FreeBSD 4.x は LANG=language ステートメントをXKBでより良く扱う。ここでも XFree86 に依存する。FreeBSD 仲間は新しいソフトウエアに極めて保守的なので、FreeBSD を XFree86 と共に出荷した。FreeBSD 4.1 では実験的 .Xmodmap ソリューションが働くので、デッドキイを働かせるには ../ISO8859-2/Compose ファイルを ../ISO8859-1 ディレクトリにコピイしなければならない。新しいバージョンの XFree86 をダウンロードするのであれば、「標準」 Xmodmap ソリューションを適用する。FreeBSD 4.2 に付いては、上の /etc/profile ファイルを参照し、必要に応じて適当に修正する。

4. 幾つかの国内 Xmodmap ファイル

French(フランス語)
Croatian(ドイツ語)
Czech (チェコ語)