2007-01-31

FreeBSDのRealtek ALC883用サウンドドライバ

引越した新マシンでサウンド関係の設定をし忘れていたので、とりあえず/boot/loader.confにsnd_driver_load="YES"を入れてみたが、音沙汰なしだった。このマシンはもともと静音PCとして売られているものだが、だからといってサウンドが鳴らなくていいわけではない;-)。

マザーボードのMSI P965 Neo-Fに塔載さているサウンドデバイスはRealtek ALC883というものらしいが、FreeBSD 6.2ではまだサポートされていないようである。

で、さっそく検索してみたら、turutani diary(妄想日記)(ALC833は誤記っぽい)にて、http://people.freebsd.org/~ariff/HDA/にsnd_hdaというドライバがあるということで行ってみると、そのページの内容自体はobsoleteだったが、http://people.freebsd.org/~ariff/以下にサウンドまわり全般の差分とバイナリが置いてあった。

とりあえず、READMEのとおりにバイナリを置き換え、loader.confにsnd_hda_load="YES"として再起動したところ、

pcm0: <Intel 82801H High Definition Audio Controller> mem 0xfdff8000-0xfdffbfff irq 22 at device 27.0 on pci0
pcm0: <HDA Codec: Realtek ALC883>
pcm0: <HDA Driver Revision: 20070105_0038>

と表示され、見事にサウンドが使えるようになった。

この先、installkernelするたびにこれも置き直さないといけないけど、しかたないか。早くマージしてほしい。

NISアカウント環境でacroread7を使う自分用メモ

ようやく新マシンに引越した。結局ghostscript-afplは消して、ghostscript-gnuにした:-)。

で、acroreadを使おうとして、いきなり

(acroread:98396): GLib-WARNING **: getpwuid_r(): failed due to unknown user id (xxxx)

とか言われ、あわててググったら、昔同じところで行きづまっていたことを思いだしたので、メモ。

FreeBSDのLinuxulatorで動くいくつかのアプリケーションをNISアカウントで動かすには、/compat/linux/etc/nsswitch.confをきちんと設定する必要がある。具体的には、passwd, shadow, groupの各行を、

passwd:     files nis
shadow: files nis
group: files nis
とすること。

2007-01-30

FreeBSDのghostscript-afplでIPAフォントによる日本語表示

portsの依存関係でghostscriptが必要な場合、Mk/bsd.port.mkにより、デフォルトではprint/ghostscript-gnu (7.07)が入るようになっている。これとjapanese/ghostscript-gnu-jpnfontがあれば、日本語に関して特に何も文句のない環境ができあがるが、引越し前に他の版で遊んでみることにした。

TeX Wikiによれば、8.15は何かと不完全っぽいので、そこまで冒険するつもりもなく、print/ghostscript-afpl (8.54)を入れてみた。

最初に何も考えずに日本語PSファイルをgvで表示させると、kochi-mincho-subst.ttfがないと言われた。既に入っているのに見つけられないらしいが、どうせIPAにするからいいやと次に進む。フォントの設定はすぐにみつかり、/usr/local/share/ghostscript/8.54/lib/cidfmapにあった。

しかし単純にkochi-mincho-subst.ttfなどを/usr/local/share/fonts/TrueType/ipam.ttfなどに変更しただけでは、表示されなかった。フルパスなのでファイルがないとは言われないが、

Error: /invalidfileaccess in --.libfile--

となり、はまる。

まず、ソースを読んで、.libfileはGS_LIB内あるいはフルパス指定のファイルをオープンする演算子であることをつきとめる。しかし、ファイルは当然読めるし、どうしてinvalidなのかがわからず、右往左往する。TeX WikiにあるようにCIDFontとFontのディレクトリを掘ってリンクしたりファイルを作ったりしても、文字化けしたりしてうまくいかない。

ひょんなことから、gvではなくgs直接ならどうかとやってみたら、なんと日本語が表示されてしまった。ではgvでなぜだめかとコマンドラインを横取りしてみて、いくつも指定されたオプションを一つずつ調べていたら、どうやら-dSAFERが指定されているとだめらしい。gvに-nosaferを付け続けるのもいやなので、さらにSAFERが何をしてるか調べると、gs_init.ps内で、/PermitFileReadingなどを設定して、読むことまで禁止しているっぽい。

そしてさらに勘を働かせて、GS_LIB内のファイルならSAFERであっても読み出し禁止にならないだろうと、GS_LIBをきちんと設定してやると、ようやくgvでも日本語が表示されるようになった。GS_LIBを設定するのも避けるには、make時のマクロGS_LIB_DEFAULTに/usr/local/share/ghostscript/fontsが含まれていることから、ここに必要なフォントを入れるのが最善の解であろう。

サブディレクトリも扱えるのがわかり、最終的な解決として、cidfmap内のkochi-{mincho,gothic}-subst.ttfをTrueType/ipa{m,p}.ttfに変更し、/usr/local/share/ghostscript/fonts/TrueTypeを作ってipa{m,p}.ttfのリンクを置くことにした。

で、このように日本語が扱えるようになったghostscript-afplを今後使うかどうかは実は微妙。全体に薄い感じの表示になるのは設定でなんとかなるかもしれないが、最大の問題は、遅いこと。TrueTypeなどのバイナリをPSのレベルで解釈しているのか、ページができあがっていくのが見えてしまう。たぶん、すぐ消してghostscript-gnuを入れてしまう気がする。

それにしても、gsのエラー表示がもっとわかりやすければ、もっと楽に解決できそうなものなのに。

追記

-dSAFERで探したら、ふログでは、ps2pdfwr内の-dSAFERを削除することでps2pdfに関して解決していた。gvとかghostviewとかcups/プリンタドライバ系とかのgs依存ツールを他に使わないのならそれでもいっか。

2007-01-27

Xのnvドライバで画面サイズ制限

新しいマシンにはnVidiaのGeForce 6200 TurboCache系グラフィックボードが載っているが、同じnVidiaのRIVA TNT2で動いていたxorg.confをそのまま持ってきたら、

(II) NV(0): Mode "1600x1200" is larger than BIOS programmed panel size of 1280 x 1024. Removing.

と表示されて、1280x1024になってしまった。

そんな設定項目ないしと思ってググってもあまりパっとした解決策がなかったが、nvidia-xconfigを動かしてみればというヒントからportsを探して、nvidia-driverやらnvidia-xconfigやらがあるのをみつけた。で、この二つを入れて、nvidia-xconfigを動かすと、xorg.confのDriverのところが"nvidia"に書き換わった。

このままXを起動すると、問題なく1600x1200で表示され、解決。

そろそろ引越しの準備ができるかな。

2007-01-26

おニューのCore 2 DuoマシンでFreeBSD

現在使っている2年前の轟音マシンに堪えられなくなり、仕事環境の改善のためメインマシンを新調することにした。静音PCが専門のとあるBTOショップでいろいろ探しまわった結果、こんな構成を選んだ。

M/B: MSI P965 Neo-F
CPU: Core 2 Duo E6600 (2.4GHz)

一番の心配はマザーボード周り。

今のマシンでMarvellのオンボードNICに懲りているので選択肢がかなり狭まってしまった。Intelとか積んでいればかなり安心できるけど、あいにくBTOメニューになかった。このマザーボードはRealtekのRTL 8110SCというのを積んでおり、一応FreeBSDのサポートリストに入っていることを確認した。

スラドとかで脅されたICH8問題も気になった。kern/103602でもJMicronのatapiコントローラがどうのという問題が未解決のまま。万一CDが読み込めないとインストールにかなり手間どるかもしれない。

などという心配をよそに到着してしまったマシンを相手に、とりあえずCDに焼いたFreeBSD 6.2-RELEASEを入れてみたら、atapiの問題は一切発生せず、あっさりとインストールできてしまった。めでたし。

ところが、問題はやはり心配したところにあって、リモートからmake buildworldの時間を計ったりして遊んでいると、

re0: watchdog timeout

が頻発して、とうとう一度はsshまで切れてしまった。あわてて検索したら、古いスラドには「蟹を使ってる時点で負け」とか書いてあるし。ともかくworkaroundをいろいろ探したところ、8139なら古いrlで使えるようにしたら良くなったとかの情報もあったが、一番役に立ったのがLinuxQuestions.orgにあった情報で、/boot/device.hintsでapicとacpiをdisableにしたらおさまったというもの。とりあえず書いてあるとおりに、

hint.apic.0.disabled="1"
hint.acpi.0.disabled="1"

を加えてリブートしてみたら、見事におさまった。しかしこれでは、SMPも電源オフもできない。どっちか一方だけではどうかと、片方ずつdisableにしてみると、実は両方がenableのときだけ問題が発生することがわかった。SMPと電源ではどちらを取るかは自明で、acpiだけdisableとする。

でもやはり電源を切れるようにしたいところなので、いずれfxpかemのカードを買うことになりそう。

2007-01-22

Bloggerの投稿記事ページだけを検索サイトに

どんな検索語で閲覧されているかをたまにアクセス解析で調べてみると、単独の投稿記事ではなく、ラベル検索やアーカイブのページにヒットしてしまっているケースが少なからずあるようである。これは検索して来た読者の時間の浪費であろうし、私の本意とするところでもないので、そういったページがヒットしにくいように工夫してみる。

ようは、そういったページのmetaタグで、robotsのindexおことわりを入れればいいわけである。

Bloggerでは、テンプレート機能を使って、ページのタイプによって任意の内容を条件表示することができる。例えば<b:if cond='data:blog.pageType != "item"'>と</b:if>で囲めば、その部分は個別記事では表示されない。

ページのタイプには、

  • "archive": 月別のアーカイブ
  • "index": トップページと検索結果ページ
  • "item": 個別の投稿記事
があるようである。Bloggerのヘルプには"all"、"archive"、"main"、"item"があると書かれているが、試したところ、"all"や"main"に一致するページがないので、ヘルプ内容が古いのだろうか。

というわけで、headタグの直後に、
<b:if cond='data:blog.pageType != "item"'><META CONTENT='NOINDEX' NAME='ROBOTS'/></b:if>
を入れてみた。

結果が出るまで相当かかると思うので、そのうち何かわかれば報告する予定。

あとは、アーカイブリストの各記事タイトルや、ラベルリストの各ラベルもインデックスからはずしたいところだが、どうしたものか。

2007-01-15

Mew 5.2に独自Content-Typeを追加

Mewを5.2に上げたとたんに問題発生。どのメールを見ても、本文が表示されずに見慣れない

 ####### #     # #     #  #####  #######   ###   ####### #     #
# # # ## # # # # # # # ## #
# # # # # # # # # # # # # #
##### # # # # # # # # # # # # #
# # # # # # # # # # # # # #
# # # # ## # # # # # # # ##
# ##### # # ##### # ### ####### # #
というバナーが表示されるようになった。

あちこちにデバッグプリントを入れたりして調べるうちに、mew-mime-content-typeの中身を独自に追加していたのが悪さをしているのがわかった。

5.1までは、mew-vars2.elでmew-mime-content-typeにContent-Typeリストを初期設定していたので、~/.mew.elでこの変数に必要なContent-Typeを追加しておくだけでよかった。ところが、5.2では、mew-vars2.elではこの変数をnilに初期設定しており、~/.mew.elの後で読み込まれるmew-varsx.elで、この値がnilのときに限りリストを設定するようになっているため、mew-mime-content-typeをいじった結果、"text/plain"を含む基本的なContent-Typeがすべて抜けおちてmew-mime-functionが呼ばれてしまっていた。

なので、mew-varsx.el読込みの後で実行されるmew-init-hookでローカルな設定関数を呼んでもらうしかないようだ。

というわけで、~/.mew.elに
(defvar mew-prog-dvi '("xdvi" ("-geometry" "+0+0") t))
(add-hook 'mew-init-hook
(lambda ()
(setq mew-mime-content-type
(cons
'("application/x-dvi" "\\.dvi$" mew-b64
mew-prog-dvi mew-icon-text)
mew-mime-content-type))
))
を加えてみて、うまく動作することを確認した。

ちなみに、lambdaはself-quotingなのでquoteやfunctionする必要はない。


追記(1/17)

cons作ってsetqするより、add-to-listを使う方が洗練されてそうで見た目もすっきりするので変更。
(add-hook 'mew-init-hook
(lambda ()
(add-to-list 'mew-mime-content-type
'("application/x-dvi" "\\.dvi$" mew-b64
mew-prog-dvi mew-icon-text))
))



追記(1/17)

Mew5FAQに載っていた。

2007-01-12

ja-acroread7をFirefoxのpluginとして動作させる自分用メモ

japanese/acroreadとwww/linuxpluginwrapperを入れて、サンプルのlibmap.conf-FreeBSD6を/etc/libmap.confとして置くだけでは、FirefoxでPDFを見ようとしても

LoadPlugin: failed to initialize shared library /usr/X11R6/Adobe/Acrobat7.0/JPN/Browser/intellinux/nppdf.so [/usr/X11R6/Adobe/Acrobat7.0/JPN/Browser/intellinux/nppdf.so: Undefined symbol "__ctype_b_loc"]

と言われるだけである。/etc/libmap.confの

[/usr/X11R6/Acrobat7/Browser/intellinux/nppdf.so]
の行を
[/usr/X11R6/Adobe/Acrobat7.0/JPN/Browser/intellinux/nppdf.so]
に変更しておかなければならない。

2007-01-10

OOoコンパイル問題2

VMware PlayerのFreeBSDゲストでOpenOffice.org 2.1.0をコンパイルしようとすると、OSごとハングした。Alt+F2等の仮想コンソール切り替えは動作するが、プロセスが全部停止。FreeBSDは6.1-RELEASE-p10から不要な機能を除いたもの。デーモン類は基本的なもの以外はsmbd程度。メモリ割当ては256MB, swapは増設して1GB。swapをさらに2GBまで増やしても同じ。

で、メモリ割当てを384MBにしてやってみるとコンパイルが完了した。どう見てもOSの問題。再現性はあるけど、再現させる手間が大変。当面は対症療法で逃げよう。

ちなみに、メモリ384MBで、消費したswapは600MB強。1GBではぎりぎり足りるか足りないかなので、make時の2GBの表示はかなり安全側。WITHOUT_MOZILLAで消費したディスクは/usr/ports内で6.2GBほど。gcc-oooの分とか、mozillaとか、ソースとかの考慮も必要。

2007-01-07

FreeBSDでswap領域を一時増設する自分用メモ

OOoのコンパイルには多量のswap領域が必要と以前書いたが、make時のメッセージにそのことが追記されていた。はじめ1GB必要となって、10月に2GBに修正された。

それはともかく、swap一時増設などという滅多にしない作業はすぐ忘れるので、自分用にメモ。

基本的にはブロックデバイスをswaponすればいいだけだが、余分なパーティションがあるとは限らないので、適当なサイズの通常ファイルを作ってmd化することにする。

# dd if=/dev/zero of=/path/to/swapfile bs=1m count=512
# mdconfig -a -t vnode -f /path/to/swapfile -u 3
# swapon /dev/md3
# お仕事
# swapoff /dev/md3
# mdconfig -d -u 3
# rm /path/to/swapfile
/etc/rc.confに swapfile="/path/to/swapfile" を書いて、再起動するか /etc/rc.d/addswap start という方法もあるが、2回以上実行することを想定していないので、一時的あるいは実験的な用途向きではない。

2007-01-04

東芝PORTEGE R100のHDD換装

丸3年間使い倒してきたR100(dynabook SS S8とほぼ同スペックで、キーボードとグラフィックスコントローラが違う程度)の40GB HDDを80GBのものに換装した。

1日に数回、移動のための電源断はあるものの、ほぼ24時間稼動だった。東芝ヨーロッパによると、このHDDの製品寿命は5年または2万(通電)時間となっている(どうして日本のサイトにこの情報がない?)ので、たぶん後者はとっくに越えている。

最初の徴候は回転のキュルキュル音で、1ヶ月の間に数回観測。軸受がかなりへたってそう。次の徴候はアクセスの数十秒間の停止と規則的なヘッドシーク音の連発。CRCエラーのリトライあたりか。cygwinで該当するファイルをアクセスしてみるとIOエラーが出る。念のために調べたら、他の複数のファイルにもエラーがある。これだけ問題があるのに、HDD Healthはまだ2年も大丈夫とか予測している。セクターエラーだけならソフト的に回避できるかもしれないが、キュルキュル音があまりにもやばそうなので換装を決意。

というわけで、HDDを急拠調達し、正月休みに作業することにした。R100に元から塔載されていたのは、1.8インチのTOSHIBA MK4004GAH。2chモバイル板にはS8でのMK8007GAHへの換装実績が報告されていたが、念のためIDEコントローラがIntel(R) 82801DBM Ultra ATA Storage Controller - 24CAで、S8と同じであることを確認し、MK8007GAHを購入。

True Image系で現在の環境をそのまま移行させる方法も考えたが、どうせならまっさらにしてみることにした。ただし、当然Documents and Settingsは命綱なので、手元のUSB HDDにしっかりバックアップ。たぶん使わないだろうけど、C:直下の他のフォルダも全部バックアップ。

交換作業そのものは大したことなし。HDD格納箇所の蓋を開け、まわりにくっついてしまったたぶんシリコンゴム系のクッションごとHDDをソケットから慎重にはずし(のはずが、慎重でなかったので、ゴムのベロがちぎれてしまったが無視)、HDDからクッションをはがし、新しいHDDにくっつけ、ソケットにさしこんで、蓋をして終了。

付属のリカバリCD-ROM 3枚を使ってシステムを再構築し、アップデートを何回も適用し、バックアップしたApplication DataとMy Documentsあたりを中心に復元し、主要なアプリケーションを入れ直す。純正のCD-ROMドライブがあるとやはり心強い。無線LANのWEPキーとアンチウイルスのパスワードをちゃんとメモしておいてよかった。

細かいアプリケーションや設定のもれはあるだろうけど、バックアップ開始から丸々2日かけて、当面の作業には支障ない程度に復旧できた。何よりも、流体軸受のおかげで、HDDの回転音が非常に静かになった。相対的にシーク音(リトラクト音?)が目立つようになったが。

これであと3年は使える…か?

(3/5: 誤字訂正)