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 Technology, Inc.はLinux NetworX, Inc. とのOEM提携を発表。Linux NetworXがe-ビジネス顧客に提供するソリューションにSteelEyeの Linuxプラットホーム用LifeKeeper を提供する。共同で販売とサポートをおこなう。LifeKeeper は、システムとアプリケーションを監視し、クライアントに中断のないデータアクセスを提供する。
ニューヨークとパリの LinuxWorld において AMD は "VirtuHammer"の公開を発表した。AMDとVirtutech が開発したツールで、ソフトウエア・デベロッパがAMDの次世代 "Hammer"ファミリー・プロセッサ用に64ビットプログラムを書いて試験することが出来る。AMDは SuSE と共に、LinuxをAMDのx84ー64技術に移植するオープンソース社会に貢献して来た。"Hammer"ファミリーは2002年前半に市場に出る予定である。x84ー64の詳しい情報は、http://www.x86-64.org/へ。
Simi-Conejo Linux ユーザー・グループは、2001年4月21日と22日にカリフォルニア州シミバレーでLUGFestを開く。LUGFestはLinuxユーザーが、Linux、Linuxアプリケーションを展示し、セミナーに参加出来る機会である。詳細情報、登録については、gareth@wiked.org又はgareth@wiked.org Webサイトへ。
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 はその WebSphere Personalization ソフトウエアの最新版がLinuxをサポートすると発表した。このソフトウエアによりビジネスは "personalization" を通じてそのWebサイトを個人ユーザーに正確に絞り、次いでアクティビティの解析を通じてこの処理を最適化することが出来る。詳しい情報は、on Websphere と Personalization とIBM/Linux 。
このソリューションは、2netFX ThunderCast サーバーとStreamRider Client Player ソフトウエアを Linux NetworX Evolicity クラスタに統合する。StreamRider のクライアントは Linux NetworX Evolocity 1240 上で提供される。独立の4台のCPUが、ソフトウエアレベルのロードバランサを通じてWebサービス負荷を分担する。一つの計算モジュールが不具合になると、他がサービスを継続する。クラスタ技術は冗長度とスケーラビリティに利点がある。
Knox Software は、フラグシップ製品、Arkeia、の無料版が、SuSE の第二世代e−メールサーバーIIに含まれると洩らした。SuSE eMail Server II は、メールを中央サーバーで管理し、IMAP規格に合致するオープンソース・ソリューションである。Arkeia 4.2 は、定期的又はオンデマンドで、インクレメンタル及び完全バックアップを提供し、ディレクトリ構造、レジストリ、シンボリックリンク及び特殊属性を保存する。
この記事の目的は、SSH suite の中の有用なプログラムsftp, scp, ssh-agent 及び ssh-addを紹介することである。以下でsshd2 daemon が構成され働くと考える。
subsystem-sftp sftp-server
sftp myname@host1
scp local_dir/filename myname@host1:remote_dir
scp local_dir/* myname@host1:remote_dir
scp myname@host1:remote_dir/filename myname@host2:another_dir
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
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, (...)、を有する。
これらの記事は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 はテキストファイルから作られ、見掛けの新しいダイアログでウィジットを示す能力がある。プログラムは殆どのレイアウトとウィジットを扱う。タブ、子ダイアログも書ける。重要なのは、その出力を学習目的でコマンド行に反映出来ることである。この点の補助として tooltips とWhatsThis をも有する。パイプの部品として使うことも出来るし、flyに書くことも出来る。
Linuxは enscript やmpage など強力なコマンド行常連が沢山あるが、スイッチやオプションの全部は覚えられない。Kaptain はこの種のスピナー、チェックボックス、コンボなどに完璧だ。これらのファイル転換がある。沢山のパイプラインを構築して、画像、音及びテキスト・フォーマットを転換する。兎に角、オプションの取扱いのため十分なシェルスクリプトを書く‥‥、このためのマニュアルも必要だ。
Kaptain にこれら全部が出来るのでなかったら、これを書かなかっただろうが、私に取って易しかったと言ったら嘘になる。私と強調したのはオブジェクト・オリエントの何も書いたことがないからだ。書いたことのある人には、Kaptain は全く易しいと思う。書いたことがなくとも、焦ることはない。余り緊張しないで Kaptainスクリプトを書くことが出来る。私が生きた証明だ。
既に○○法に習熟しているなら、ダウンロードするだけで直ぐ好きになる筈だ。これは通常の意味で○○ではない。著者は「テキスト作成の文法が数学的オブジェクトである正式言語論(Maths)からアイデアを得た。ターミナル、ノンターミナルの言葉はFLTでは周知だが、他の場所ではそうでない。このようなことを学んだ人は、慣れた方法で理解するのが良い。それ以外の人にとってこれらはは新しい言葉である。BTW, YACCもまた、文脈を離れた文法を用いる」
右図は、enscript ダイアログのスケッチである。大きくするにはこれをクリックする。
何も書く気がなくとも、Kaptain 400k ソースにはダウンロードに値する数多くのスクリプト例がある。
兎も角、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 - ";
次が第一行である:
start "Play Message" -> descr msglist;
行末のセミコロンに注意。これは perl と同じく必須である。事実 Kaptain は「perl的」である。主コンテナは 'start' と名付ける。これもまた Kaptain 文法に組み込まれこの語を第一ルールとして使用しなければならない。引用した "Play Message" はオプションでダイアログウインドウのタイトルに用いられる。
右の "->" の後に "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 についてのコマンド行オプションを見ると、心配になるだろう。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" を加えるとステップが節約出来る。
他に hawkeye が Linux Today Australia.に書いた Kaptain の記事がある。ここで述べなかったことが沢山示されており実例も多い。 Kaptain の著者はTer駝 Zsolt である。彼は Kaptain に色々尽くしているが、未だ0.51に過ぎない。広く使われれば、偉大な価値があるに違いない。最も苦痛なく出力を経験する方法だ。誰かが書くのを待つのでなく。自分で行われたい。Ter駝 氏は彼のwebsite.への連絡を歓迎するだろう。
他にX用ダイアログプログラムがある。gdialog は既にお持ちだろう。良いい date/time ダイアログを有するXdialog は here. からダウンロード出来る。一つのダイアログ・アプリケーションが目的に合わなかったら、別のものがある。同一スクリプト内で混合して整合させるとよい。
嘗て 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は時間を無駄にしているデベロッパの救い主だ。少なくとも興味を持たれることを望む。
ブートローダーとは、ディスクのスタート・セクター、例えばハードディスクのMBRに常駐するプログラムである。システムが設定されていると、ブートアップの間にシステムをテストした後、BIOSは制御をMBRに移す。MBRに常駐するプログラムが実行される。このプログラムをブートローダーと呼び、その任務はOSに制御を移すことで、次いでブート処理を進める。
利用出来るブートローダー・プログラムは、GNU GRUB (Grand Unified Boot Loader), Bootmanager, LILO (LInux LOader), NTLDR (Windows NT システム用)など、沢山ある。ここでは GNU 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を使うための三つのステップ、コンパイル、インストール、コンフィギュレーションを説明する。
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
[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) は、第一ハードディスクの第一パーティションで、以下同じである。
GRUBのインストールは三つの部分に分けられる。
次のコマンドで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
コマンドは次のようにまとめることが出来る。
これで基本的ハードドライブ・インストールを終わった。
フロッピイへのインストール:
GRUBをフロッピイにインストールするには、'dd' コマンドとその働きを知らなければならない。GRUBでブート出来るフロッピイとして stage1 と stage2 ファイルをフロッピイのスタート・セクターに入れる必要がある。
フォーマット済みフロッピイを入れて次のようにタイプ。
[root@heaven /boot/grub ]# dd if=stage1 of=/dev/fd0 bs=512 count=1
ここでもコマンドを詳細に検討する。
[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バイトを上書きしないで、最初の操作を保存する。
これで基本的フロッピイドライブのインストールを終わった。
ここでは、各種OSをブートする方法と、menu.conf ファイル作成方法を示す。
GRUBのサポートするブート手順からはじめる。ブートは二つの方法で出来る。
方法Aを用いるブート手順:
Linuxをブートするには、筆者はkernelをbzImageとして/boot/にルートファイルシステムを as /dev/hda5 としておくか、又はGRUBの中の (hd0,4) におく。だから筆者のブート手順は次のようになる。
方法Bを用いるブート手順(この方法は、LILO又はNTLDRのような別のブート・マネージャがパーティションにインストールされていると仮定する)
/dev/hda1 つまり (hd0,0)にインストールしたウインドウズを用いて別の例を試してみよう。ウインドウズを用いるブートは次に通りである。た
menu.conf file:これは多数OSのブート及びメニュー構築に用いられる。menu.conf fileの構築は難しくない。この節で見られるように英語の平文を用いる。
メニュー入力はすべてコンマなしの "title TITLENAME" で始まる。TITLENAMEは好きなように決める。
Linux ブート用メニューを作るには:
作業用メニューを作るには:
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
color green/black or light-gray/blue
覚え書き:すべての値が0から始まるので、第一入力は0である。
次の記事では、 Fire GNU/Hurd とOpenBSD と多分ネットワーク・ブートアップの試験を計画している。少なくとも3ヶ月以上掛かるだろう。見守られたい。
ご意見、間違いがあれば何なりと下記へ
http://www.linuxgazette.com/issue64/jskohli@fig.org.
<!--#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";
}
<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>
Mark は GNUJobs.comのような訴訟、著作、フリーソフトウエア作成のほか eastmont.net.でボランチアとして働いている。
Copyright © 1/2001 Mark Nielsen
Article Version 1.3 : Date Last Changed Sun Feb 25 21:13:16 2001
概観
パート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])}'
参照:
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"
export LANG=language export LC_ALL=language
一定の環境ではパスの中にISO8859-2 フォントが有っても KDE 2.0 テキスト・エディタが表示しないことがあるのに注意されたい。このエディタ・メニューの "Latin2" ステートメントが働かないらしい。CHOOSE fonts が出来るときは(古いKDEからの古いkeditでは出来る)別の簡単なテキスト・エディタを搭載されたい。メニューからダイアログウインドウを開いて、フォントを選び、ISO8859-2 エンコードを選択する。
X端末ウインドウからコマンド "xmodmap ~/.Xmodmap" を走らせて、システムに Xmodmap ファイルを読ませる。
キイボードを切り換えれば、それで使える。
その他の、ここでは述べないが同じく国際化が出来るXKBソリューションは、国際キイボード構成の別法で、XKB とXMODMAP のソリューションは互いに無関係である。/etc/X11/XF86Configファイルを Danish-HOWTOで説明したようにエディットするか、又はこのコマンドをスロバキヤ・キイボード用X端末ウインドウから送る:
setxkbmap -model pc102 -symbols 'czsk(us_sk_qwertz)' setxkbmap cs -option grp:shift_toggle
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 の新版には当て嵌まらない。
1. 標準解決策は、文字に付いて標準名を使用する(上に caron のあるsはscaronで上にスラッシュのある ú - は uacute)。
2. 経験的解決策の場合は、例えば、ISO8859-1 文字セット表からの幾つかのキーコード名がscaron を示す。
次をBash_profile に入れ、
export LC_ALL=language export LANG=language
export LC_CTYPE=SK_SK export LC_ALL=SK_SK OR for csh shell setenv LC_ALL=language setenv LANG=language
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
Caron は文字の上の逆^である。
Acute は文字の上の/のような小さいダッシュである(ú はuacute)
Diaeresis は文字の上の二つの小さいドット .. である
Dot は文字の上のドットである (zdot).
以下の表に分かり易く説明する
| 中欧文字 | |
| 文字名 |
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 |
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 ファイルが変更されなかった場合のソリューションに関する。
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"
FontPath "unix/:1"
XFree86 は新しい ISO8859-2 フォントを自動的に /usr/share/fonts ディレクトリに読み込む(RedHat と同じ)。 ../ISO8859-2/Compose ファイルを .. /ISO8859-1 ディレクトリに読み込む必要なしでデッドキイがうまく働くのは驚きだ。KDE 2.0 母国語アプリケーションに ISO8859-2 フォントを使うには、上の Mandrake 7.2 用 i18n ファイルを参照。