Linux XFree-to-Xinside mini-HOWTO (by Marco Melgazzi, s64912@athena.polito.it, version 1.1 / 1996 July) (訳者注:Marco Melgazzi 氏の主メイルアドレスは 1997 年、 1月現在、marco@techie.com になっています) XFree86-XInside.euc 和訳:はら(hara@access.co.jp), 1997 Jan.27th XFree86 モードラインを XInside のものに変換する方法 1.イントロダクション この数ヶ月、 XFree86 と商業製品の一つ XInside との間でどうや ってヴィデオモードを変換するかという質問が comp.os.linux.x に たくさん投稿されていました。 私はその製品化の前の評価版を使っており、この評価版がまだ私の ハードディスク上に残っていました。私は問題を解決するのが好きな ので、私はその問題をやってみようと決心して、二、三時間いじって みて、計算をした結果、おそらく有効な記事を即座に投稿することに しました。 この変換の方法についての議論はすぐに消え去ってしまいましたが、 私はその文章についての感謝のメイルを一通、受け取りました。それ で、この先、また他の誰かがこの情報を必要とするかもしれないと思 い、私はその投稿をあなたが今読んでいるこの mini-HOWTO に書き直 すことにしたのです。 まず最初にいくつか述べさせてください: 私は XInside のために働いているのでは「ありません」し、私は Linux 用の評価版ヴァージョン 1.2 にアクセスすることしかできませ んでした。モニターのタイミングをいじることは危険なことになりう るし、この理由から、私は絶対的にいかなる保証もしません。もしこ れであなたがうまくいけば、結構なことですが、もしあなたのコンピ ュータが火を吹いても、私はそれについての対応はしないでしょう。 あなたが私の名前から気付いたかもしれないように、私は英語のネ イティブスピーカーではないので、あちこちに間違いがあるかもしれ ません。私はそれについて謝罪します。だからお願いですから、私の メイルボックスを言語関係の論争で一杯にしたりしないで下さい。 多謝! 2. なぜ私はそれが必要だったか 私は、あなたにヴィデオモードをいじるためのユーティリティ(xvidtune のような)を与えず、かつ/または、あなたの XFree のものを評価版 (と AFAIK 商品)にインポートするユーティリティも与えないという XInside のポリシーは不可解であると私は思います。私は、これを一緒 にするのに3時間くらいもかかってしまいましたが、(ちょっと一言:私 は二つのフォーマットで VESA 1024x768@70Hz の項目を比較しました (そして私は今、ほとんど電機技術者です ;-) )、Xinside のプログラマ ならこの時間のほんのちょっとを使うだけで、これと同じような文章が 書けるはずなのに、、、 私は 1.3 評価版をダウンロードしていませんが、私は彼等がこの点を 直してくれていることを本当に希望しています。確かに、直っていれば、 この mini-HOWTO は用無しになってしまうかもしれませんが、しかし、 ああ、もしあなたがこれを読んだなら、全てがどのように働いているか の仕組み以上の何かを学んでくれることでしょう、、、 3. やってみよう あなたが自分のまあまあ調整した XFree86 モードを持っていて、同じ 条件で XInside を試してみたいと仮定しましょう。 以下のステップに従っていけば、それができるでしょう。 我々は実際の例として私のデフォルトのヴィデオモードを使用して、 それを変換するにはあなたが何をするべきか説明します。 XFree86 のエントリーはこんな風になっています: Modeline "blahblah" DOTCLK A B C D a b c d A-B と 1-4 の数字はどれも意味を持っています: あなたがそうしたければ、その意味を 'The Hitchhiker's Guide to X386/XFree86 Video Timing'(/usr/lib/X11/doc/VideoModes.doc) で調べることができるでしょうが、うまく変換をするためにはこの全て の背後にある理論を知る必要はないです。 /usr/lib/X11/XF86Config にある私のモードラインは以下のように なっています: Modeline "1168x876" 105 1168 1256 1544 1640 876 877 891 900 | | | | | | | | | DOT_CLK A B C D a b c d XInside では、あなたは Xtimings ファイルにエントリーを付け加え なければいけません。そのファイルは etc/ におかれているべきです。 (以下では、あなたが Xaccel ディレクトリの一番上にいるものと仮定 します。それは /usr/X11/lib/X11/AcceleratedX のようになっている はずです) ! Somewhere in the file, put here the name you want ! そのファイルのどこか、あなたの好きな名前をここに書く [PREADJUSTED_TIMING] PreadjustedTimingName = "1168x876 @ 72Hz"; ! ! These four are obvious ! ! これら 4 つは明白 HorPixel = 1168; // pixels VerPixel = 876; // lines PixelWidthRatio = 4; PixelHeightRatio = 3; ! ! hsync: DOT_CLK / D * 1000 [KHz] ! ! hsync = 105 / 1640 * 1000 = 64.024 KHz ! ! vsync: ( 1 / (( D / DOT_CLK ) * d) ) * 1,000,000 [Hz] ! ! vsync: ( 1 / (( 1640 / 105 ) * 900) ) * 1,000,000 ! ( 1 / 14057.1428571 ) * 1,000,000 = 71.138 Hz ! HorFrequency = 64.180; // kHz VerFrequency = 71.138; // Hz ! Obvious ! 明らか ScanType = NONINTERLACED; ! ! Put here the +/-hsync +/-vsync XFree86 options ! ! ここに、+/-hsync +/-vsinc XFree86 オプションをおく HorSyncPolarity = POSITIVE; VerSyncPolarity = POSITIVE; ! Shouldn't change ! 変えるべきではない CharacterWidth = 8; // pixels ! DOT_CLK here PixelClock = 105.000; // MHz ! ! ! horizontal timings section: [usec] ! HorTotalTime = D / DOT_CLK = 15.619; HorAddrTime = A / DOT_CLK = 11.124; HorBlankStart = A / DOT_CLK = 11.124; HorBlankTime = HorTotalTime - HorBlankStart = 4.495; HorSyncStart = B / DOT_CLK = 11.962; HorSyncTime = C / DOT_CLK - HorSyncStart = 2.743; ! ! vertical timings section: [msec] ! VerTotalTime = ( HorTotalTime * d ) / 1000 = 14.057; VerAddrTime = ( HorTotalTime * a ) / 1000 = 13.682; VerBlankStart = ( HorTotalTime * a ) / 1000 = 13.682; VerBlankTime = VerTotalTime - VerBlankStart = 0.375; VerSyncStart = ( HorTotalTime * b ) / 1000 = 13.698; VerSyncTime = ( HorTotalTime * ( c - b ) ) / 1000 = 0.219 ! Finished ! ! おしまい ! さて、あなたはこの新しく作ったモードを適切な場所の以下に示され ているファイルの中に置かなければいけません。 4. あれこれを設定する 以下で示している excerpts では、-> の記号は変更されるものを表わ しています: あなたのファイルの中にこの記号を含めないように! モニターエントリー(私のは monitors/mfreq/mfreq64.vda) [ESTABLISHED_TIMINGS] "640x480 @ 60Hz", "640x480 @ 72Hz", "640x480 @ 75Hz", "800x600 @ 56Hz", "800x600 @ 60Hz", "800x600 @ 72Hz", "800x600 @ 75Hz", "1024x768 Interlaced", "1024x768 @ 60Hz", "1024x768 @ 70Hz", "1024x768 @ 75Hz", "1152x900 Interlaced", "1152x900 @ 60Hz", "1152x900 @ 67Hz", -> "1168x876 @ 72Hz", "1280x1024 Interlaced", "1280x1024 @ 60Hz", "1600x1200 Interlaced"; ボード情報ファイル(私の場合は boards/s3/764-2.xqa ですが、 どうして彼等がほとんど全部の Hercules ボードを用意している のに、私の Terminator 64/Dram だけはそうでないのか不思議です) [VISUAL] BitsPerPixel = 8; MemoryModel = Packed; ColorModel = Indexed; BitsRGB = 6; NumberOfColors = 256; [RESOLUTIONS] 640x480, 800x600, 1024x768, -> 1168x876, 1152x900, 1280x1024 [DESKTOPS] 640x480, 800x600, 1024x768, 1152x900, -> 1168x876, 1280x1024, 1600x1200 もしドットクロックが充分低いなら(私のボードの場合は違ったけれども)、 エントリーを 16bpp と 32bpp sections に置くこともできます。 /etc/Xaccel.ini は以下のようになっているでしょう。 -------------------------------------------------------------- Board = "s3/764-2.xqa"; Monitor = "mfreq/mfreq64.vda"; Depth = 8; -> Desktop = 1168x876; [RESOLUTIONS] -> 1168x876, 1024x768; 実際の XInside モードエントリーは etc/Xtimings にあります。 -------------------------------------------------------------- [PREADJUSTED_TIMING] PreadjustedTimingName = "1168x876 @ 72Hz"; HorPixel = 1168; // pixels VerPixel = 876; // lines PixelWidthRatio = 4; PixelHeightRatio = 3; HorFrequency = 64.024; // kHz VerFrequency = 71.138; // Hz ScanType = NONINTERLACED; HorSyncPolarity = POSITIVE; VerSyncPolarity = POSITIVE; CharacterWidth = 8; // pixels PixelClock = 105.000; // MHz HorTotalTime = 15.619; // (usec) = 205 chars HorAddrTime = 11.124; // (usec) = 146 chars HorBlankStart = 11.124; // (usec) = 146 chars HorBlankTime = 4.495; // (usec) = 59 chars HorSyncStart = 11.962; // (usec) = 157 chars HorSyncTime = 2.743; // (usec) = 36 chars VerTotalTime = 14.057; // (msec) = 900 lines VerAddrTime = 13.682; // (msec) = 876 lines VerBlankStart = 13.682; // (msec) = 876 lines VerBlankTime = 0.375; // (msec) = 24 lines VerSyncStart = 13.698; // (msec) = 877 lines VerSyncTime = 0.219; // (msec) = 14 lines Xinside サーバが走っている間、パラメータ無しで vgaset プログラム を走らせて、あなたの変換をチェックすることができます:これで、XFree の時のようなラインを出力してくれるでしょうし、もし全てうまく行って いれば、このラインはあなたの最初のラインと等しいでしょう(ただし、も し b と c が等しければ、私は Xinside でこの状況を確認することができ ませんでした:最も良い場合は c=b+1 の時でした) 5. 最後に、、、 これで全部です、皆さん! 私はこの文章があなたの役に立つことを 期待しています。私が Xinside を買うかどうかわかりません: Xinside はなかなか良いし、そのテキスト速度は XFree に比べて本当 に信じ難いほどですが( xterm ウインドウ上で xteddy を動かしてみれ ば、私の言っていることがわかるでしょう)、私はただの学生で払える お金があまりないのです、、、、 もちろん、もし Xinside の誰かがこの mini-HOWTO が何らかのサポート を受ける価値があると考えるなら、私は 1.3 完全版サーバをテストさせ てくれても何の問題もないです :) 6. このプロセスを自動化する この小さなスクリプトは仕事のほとんどを自動化してくれます。 ScanType と2つの Polarity のラインに充分に気をつけてください: このスクリプトはそれらをセットしないし、もしあなたがあまりになま けものそれを直せないのなら、あなたのモニタを爆発させる危険は非常 に増大するでしょう。 私は「ダブルスキャン」フラッグが Xinside で意味を持っているかど うか知らないことを注意させて下さい:もしあなたが低解像度のダブル スキャンを変換したいなら、要注意です!リフレッシュレートが二重に なってしまうため、簡単にモニターを壊してしまえるでしょう。(実際、 私の 400x300@72Hz は 400x300@144Hz になってしまいました!) #!/bin/sh ################################################################### # XF2XInside # # This script converts modelines from XF86Config format to XInside # format as needed for the etc/Xtiming file. # # This is a quick hack, so don't expect much error checking (not to # speak of anything like user friendlyness). # # If you call it without arguments it should tell you what to do. # # ( July 1996, hcz@tazlwurm.bb.bawue.de) # # Btw: New modes created as described in the HOWTO work, but don't # show up in Xsetup's menu. Anybody who knows why? # #################################################################### # このスクリプトは etc/Xtiming ファイルについて、必要に応じて #XF86Config フォーマットから XInside フォーマットに #モードラインを変換するものです。 # # これはやっつけ仕事なので、たくさんのエラーチェックを期待しないで #ください。(ユーザフレンドリネスみたいなことも言わないでください) # # 議論はなしで、これを使ってくれれば、何をしてくれるものか #わかるでしょう。 # # ところで:新しいモードは HOWTO の仕事の中に書かれているように #作られますが、Xsetup のメニューには表示しません。誰か何故だか #知っていますか? # ################################################################### #----------------------------------------------- Here we go: # Change this if your modeline file lives somewhere else: #----------------------------------------------- さあ行こう: # あなたのモードラインファイルがどこか他の場所にあるなら # ここを書き替えてください。 XF=/usr/X11/lib/X11/XF86Config if [ $# -ne 1 ] ; then echo "usage: ${0##*/} " echo " example: ${0##*/} 1024x764" echo -e " function: converts $XF modeline entry into\n Xinside Format (stdout )" exit 1 fi egrep -i "^[\t ]*modeline.+\"$1\"" /usr/X11/lib/X11/XF86Config | gawk ' NF < 11 { print "! invalid Modeline:\n! " $0 "\n!"; next } { print "//", $0 ":" name = $2 DOT_CLK = $3; A = $4; B = $5; C = $6; D = $7; a = $8; b = $9; c = $10; d = $11; VerFrequency = 1000000 / ((D / DOT_CLK) * d) print "[PREADJUSTED_TIMING]" printf " PreadjustedTimingName = \"%dx%d @ %.0dHz\";\n", A, a, VerFrequency print " HorPixel\t\t= " A ";" print " VerPixel\t\t= " a ";" print " PixelWidthRatio\t= 4;\n PixelHeightRatio\t= 3;" print " HorFrequency\t\t= " DOT_CLK / D * 1000 ";\t// kHz" print " VerFrequency\t\t= " VerFrequency ";\t// Hz" print " ScanType\t\t= NONINTERLACED;\t\t// *CHECK*" print " HorSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*" print " VerSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*" print " CharacterWidth\t= 8;" print " PixelClock\t\t= " DOT_CLK ";" HorTotalTime = D / DOT_CLK print " HorTotalTime\t\t= " HorTotalTime ";" print " HorAddrTime \t\t= " A / DOT_CLK ";" print " HorBlankStart\t\t= " A / DOT_CLK ";" print " HorBlankTime\t\t= " D / DOT_CLK - A / DOT_CLK ";" print " HorSyncStart\t\t= " B / DOT_CLK ";" print " HorSyncTime\t\t= " C / DOT_CLK - B / DOT_CLK ";" VerTotalTime = ( HorTotalTime * d ) / 1000 print " VerTotalTime\t\t= " VerTotalTime ";" print " VerAddrTime\t\t= " ( HorTotalTime * a ) / 1000 ";" VerBlankStart = ( HorTotalTime * a ) / 1000 print " VerBlankStart\t\t= " VerBlankStart ";" print " VerBlankTime\t\t= " VerTotalTime - VerBlankStart ";" print " VerSyncStart\t\t= " ( HorTotalTime * b ) / 1000 ";" print " VerSyncTime\t\t= " ( HorTotalTime * ( c - b ) ) / 1000 print "" }' 7. 感謝 Heike Claudia Zimmerer hcz@tazlwurm.bb.bawue.de が、小さな矛盾を 指摘し、仕事のほとんどを自動化してくれるスクリプトを送ってくれた ことを感謝します。 8. コピーライト/法律関係 Marco Melgazzi (s64912@athena.polito.it) が著作権(1996)を有する -- GPL(Gnu Public License)を適用。GPL のコピーを得るには以下の住所に 連絡を取ってください。Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 各商標はその所有者のものです。この文章の情報の正確さ、有用性に ついては何の保証もいたしません。 以下、原文。 (c)opyright 1996 by Marco Melgazzi (s64912@athena.polito.it) - the GPL (Gnu Public License) applies. To obtain a copy of the GPL write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Trademarks are owned by their owners. There is no warranty on the accuracy and/or the usefulness of the information given in this document. (訳者注: Marco Melgazzi 氏のメイルアドレスは現在、marco@techie.com が主になっています)