ラベル study の投稿を表示しています。 すべての投稿を表示
ラベル study の投稿を表示しています。 すべての投稿を表示

2010年10月9日土曜日

フルスクリーン対応 Cocoa Emacs with skk 導入まとめ

カヤックにて配布しているパッチを当ててフルスクリーン対応のemacsをMacで使う。

カヤック特製 Emacs フルスクリーン対応 Cocoa Emacs
http://bm11.kayac.com/2009/project/opensource/kayac-emacs/


また、skk も導入する。

事前準備

当然のように make しているが、そのためには xcode が必要。
なので、事前にインストールすることがさりげなく大事。

今回はターミナル(bash)のプロンプトにパスが出ると長ったらしいから

PS1="\$ "  
と ~/.bash_profile に書き、スッキリしておいた。

ダウンロード

参考URL

パッチ当てを含め、emacs のインストールはここを真似した

カヤックBM11特製のCocoa Emacsフルスクリーンパッチを導入
http://havelog.ayumusato.com/computer/software/e124-kayac-emacs-patch.html

emacs

ソースを下記ftpパスより取得
http://ftp.gnu.org/pub/gnu/emacs/emacs-23.2.tar.gz

パッチ

上記カヤック社よりwebブラウザにて、下記2点をダウンロードした。

  • feature-fullscreen.patch
  • fix-shiftmodifier-with-ime.patch

APEL

skk は APEL (A Portable Emacs Library) に依存しているので必要。
http://kanji.zinbun.kyoto-u.ac.jp/~tomo/elisp/APEL/index.html.ja
APEL も SKK も、 SKK Openlabからリンクを巡ってソースを取得できる。

Daredevil SKK

skk 本体。
dáredèvil 向こう見ずの(人), 猪突猛進型の(人). (大辞泉)
http://openlab.ring.gr.jp/skk/main-ja.htm

skk辞書

SKK-JISYO.L を始め、固有名詞の辞書を取得。
http://openlab.ring.gr.jp/skk/wiki/wiki.cgi?page=SKK%BC%AD%BD%F1
gzip -d SKK-JISYO.jinmei.gz
などで解凍しておけばいいのかと。

emacs の導入

アプリケーション (/Applications) に Carbon Emacs を入れていたので、消す。
さようならCarbon、こんにちはCocoa。
そしてゴミ箱へ。

参考URLにある下記は同じく打つ。
癖として tar xvzf する前に tar tvzf する筆者はビビリ野郎だ。
え?こんなとこに出しちゃうなんて、信じらんない!バカッってことあるだろ?(何)

% tar zxvf emacs-23.2.tar.gz
% cd emacs-23.2
% patch -p1 < ../feature-fullscreen.patch
% patch -p1 < ../fix-shiftmodifier-with-ime.patch
% ./configure --with-ns --without-x
% make bootstrap
% make install

情報が遅すぎだが、--with-ns のオプションの存在に驚く。 emacs のソースをMacOSXのGUI向けにビルドし、Emacs.app を作ってくれる。 作成後は /Applications へ移動しちゃえばいいのだ。

$ mv nextstep/Emacs.app /Applications

おお!ことえりでインライン文字入力できますね…。 (でも私は skk を使う。)

パッチの当たった emacs はこれでインストール完了。
M-x ns-toggle-fullscreen
で emacs バッファがフルスクリーン表示されることを確認! これはイイ! 快適!


ところが1点、さて…フォントが妙ですね…。 ひらがながゴシック体、漢字が明朝体で、「直」という漢字が変な形に。 htmlモードにしてみたら2バイト文字の斜体がお豆腐になることを確認。
とりいそぎ、情報を方々から集め、$HOME/.emacs.d/init.el を編集・・・。
; 言語を日本語にする
(set-language-environment 'Japanese)
; 極力UTF-8とする
(prefer-coding-system 'utf-8)

; バックスラッシュ
(define-key global-map [165] nil)
(define-key global-map [67109029] nil)
(define-key global-map [134217893] nil)
(define-key global-map [201326757] nil)
(define-key function-key-map [165] [?\\])
(define-key function-key-map [67109029] [?\C-\\])
(define-key function-key-map [134217893] [?\M-\\])
(define-key function-key-map [201326757] [?\C-\M-\\])

;ヒラギノ角ゴ と Menlo
(create-fontset-from-ascii-font "Menlo-14:weight=normal:slant=normal" nil "menlokakugo")
(set-fontset-font "fontset-menlokakugo"
                  'unicode
                  (font-spec :family "Hiragino Kaku Gothic ProN" :size 16)
                  nil
                  'append)
(add-to-list 'default-frame-alist '(font . "fontset-menlokakugo"))

emacs 23.2 のフォント回りはかなり強化されており、以前より設定はしやすくなったそう。 フォントは後で細かくいじりたいところ。

skk 導入

まずは apel

$ tar xvzf apel-10.8.tar.gz
$ cd apel-10.8

バイトコンパイル
$ make EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs

インストール先を確認
$ make what-where LISPDIR=/Applications/Emacs.app/Contents/Resources/site-lisp VERSION_SPECIFIC_LISPDIR=/Applications/Emacs.app/Contents/Resources/site-lisp

インストール /Applications 配下の site-lisp にインストール
$ make install LISPDIR=/Applications/Emacs.app/Contents/Resources/site-lisp VERSION_SPECIFIC_LISPDIR=/Applications/Emacs.app/Contents/Resources/site-lisp

つぎに skk
インストール設定は SKK-CFG という elisp を編集することで行う。 /Applications 配下に Emacs をインストール済みなら、下の方の
;;; Carbon Emacs Package の設定例:
のコメントアウトを外せばOK。

;;; Carbon Emacs Package の設定例:
 (setq APEL_DIR "/Applications/Emacs.app/Contents/Resources/site-lisp/apel")
 (setq EMU_DIR "/Applications/Emacs.app/Contents/Resources/site-lisp/emu")
 (setq SKK_DATADIR "/Applications/Emacs.app/Contents/Resources/etc/skk")
 (setq SKK_INFODIR "/Applications/Emacs.app/Contents/Resources/info")
 (setq SKK_LISPDIR "/Applications/Emacs.app/Contents/Resources/site-lisp/skk")
 (setq SKK_SET_JISYO t)

インストールは下記コマンドで。

インストール先を確認
$ make what-where EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs

インストール
$ make install EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs

辞書をセット
$HOME/.skk を作成。

; SKK-JISYO.L だけ使用する場合
;(setq skk-large-jisyo "~/misc/skk_jisyo/SKK-JISYO.L")

; 複数の辞書を使用(使用するものだけコメントアウト)
(setq skk-search-prog-list
      (append
       '((skk-search-jisyo-file skk-initial-search-jisyo 0 t)
  (skk-search-jisyo-file skk-jisyo 0 t))
       (let ((path "~/misc/skk_jisyo/"))
  (mapcar #'(lambda (x)
       `(skk-search-jisyo-file ,(concat path (car x)) ,(cdr x)))
   '(("SKK-JISYO.L" . 10000)
;     ("SKK-JISYO.assoc" . 10000)
;     ("SKK-JISYO.edict" . 10000)
;     ("SKK-JISYO.fukugo" . 10000)
;     ("SKK-JISYO.fullname" . 10000)
     ("SKK-JISYO.geo" . 10000)
;     ("SKK-JISYO.station" . 10000)
     ("SKK-JISYO.jinmei" . 10000)
;     ("SKK-JISYO.propernoun" . 10000)
;     ("SKK-JISYO.okinawa" . 10000)
;     ("SKK-JISYO.law" . 10000)
;     ("SKK-JISYO.pubdic+" . 10000)
     )))))

emacs を再起動すれば、C-x C-j で skk が起動できる。

編集後記

README を読みながら作業すればいいから、わざわざこんな手順起こす必要はないと思った。
あと、emacs の html-mode はやはり秀逸。

2010年10月7日木曜日

最近の動向

Cocoa Emacs


左が Cocoa Emacs 、右が Carbon Emacs 。やっぱり Cocoa の方がちょっとロゴ画像がきれいだ。
カヤックさんのパッチを当て動かす Cocoa Emacs が便利そうなのでビルドをしてみた。(フルスクリーン機能とか)
実際にやってみて思ったのは、Emacs を MacOS X でコンパイルするのって、簡単なんだね、知らなかった。
あと、ひさしぶりに SKK を動かした。SKKチュートリアルをやり、忘れかけていた操作を思い出すことに成功した。
SKK もdebパッケージからではなく、自分でインストールしたわけだが、基本的に バイトコンパイルした elisp たちをポイ→終了、といった感じ。(適当)
ok ok、今度、もう一回、一からインストールしなおして手順をまとめておこうと思う。

国勢調査

私の職業はシステム・エンジニアとかプログラマとか、そういう類のものなのだが、
10月1日の国勢調査で、私の職業を何と呼称するかわからなかったと言われ、 PC という謎の単語で提出したということを伝えられた。
políce cònstable (巡査、治安関係の公務員) を PC と略すそうだ。
問題になったら巡査だと主張しておこう。

2010年8月12日木曜日

MacOS X お掃除 5/5 iTunes

ファイル容量を食っているフォルダを調べていくと、 iTunes が度々登場する。

  • iTunesストアのキャッシュ・・・★
  • 過去、iPhoneやiPodを同期した際に保存されたバックアップ・・・★
  • iPhone の最新のファーム(IPSW)
  • Appストアで入手したiPhone用ソフト

上記★マークのついたものについて、削除を行う。 オプションのデバイスタブから不要な iPod、iPhone のバックアップを削除する。
また、詳細タブからiTunesストアのキャッシュを削除する。

iPod、iPhone のバックアップ削除は特に効果てきめん。
今はもう手元に無い iPod Touch のバックアップまで残ってしまっていたのを、綺麗に消すことが出来たからだ。

MacOS X お掃除 4/5 Google Chrome

第一、インストールしただけで普段まったく使用してない Google Chrome 。 にもかかわらず ~/Library/Application Support/Google 配下が数百MBになっている。
本当に油断も隙もない野郎だGoogleは。
関連ニュース:Googleの韓国オフィスに家宅捜索 ストリートビューのデータ収集めぐり[ITmedia]
Googleがストリートビュー撮影の際にWi-Fiからユーザーデータを収集したとして、韓国警察が同社を調べている。(ロイター)

メニューのChrome → 閲覧履歴を消去で、オプションの 期間を指定してデータを消去 を、すべてにちゃんと変えてから実行。

MacOS X お掃除 3/5 BathyScaphe

にちゃんねるブラウザBathyScapheのキャッシュも溜まり放題。

場所は、~/Library/Application Support/BathyScaphe 配下。(過去ログ置き場)

BathyScapheで該当の板を選択し、メニューの掲示板→dat 落ちしたスレッドのログを削除を選択。
色んな板を見ているとややめんどうだが、上記パス内には板名称ごとにフォルダが分かれているので、 フォルダ容量を見ながら、ログ削除をする板を選んで実行すればよいかと。

なお、BathyScapheのオプションで、ログをバイナリファイルで保存する設定があったので、ついでにこれもONに。

MacOS X お掃除 2/5 Safari

何となくすぐ思いついたのが Safari のキャッシュ。

メニューのSafari → Safari をリセット でOK。 オプションは好きなように。
明日もあさっても Safari は使用していくものだから、そんなに深く考えず「リセット」をポチッと。

だが空き容量には大きな変化はなし。

MacOS X お掃除 1/5

この日、ソフトウェアアップデートを試みたところ、 ディスクの空き容量不足によりエラーが出た。 確かに、空き容量が 3GB とちょっとだけになっていた。

ホームディレクトリ直下で、ギガバイト単位でディスク容量を食っている物を洗い出して 外付けHDD退避・削除の結果、下記のように占有容量を減らすことが出来た。

ピクチャ2.6GB2.6GB(手付かず)
ミュージック4.8GB1.6GB
ムービー4.17GB920MB
ライブラリ7.03GB2.2GB

結果、11.2GBほど空き容量が増えた。
ミュージックとムービーについては、ひたすらファイルを外付けHDDへ退避しただけなので作業に問題はない。
(iTunesに登録していた楽曲・動画についてはiTunes側で削除後、外付けHDDのファイルを再登録するという手間はあったが。)

問題は、ライブラリ配下のファイル。
ライブラリの中は、アプリケーションが読み書きする場所ゆえ、こちらの判断でファイル削除や移動を行いづらい領域だ。
だが、ここを4.8GBほど空けることが出来た。

総括すると、バックアップとキャッシュが溜まり放題なのだ。
人が消さない限り、増え続ける…。これはちょっと困った傾向である…。

今後また同じ状況に陥ったときのため、大まかに手順をまとめる。
Safari編
BathyScaphe編
Google Chrome編
iTunes編

最後に忘れそうなのでメモしておくと、
コマンド+i(情報を見る)より、コマンド+option+i(インスペクタ)の方が、次々とフォルダの容量をチェックしたいときに便利。
インスペクタは常に画面に表示され、選択したフォルダやファイルの情報を同じウィンドウ内で表示してくれるので。
タイトルバーが普通の厚さのものは『情報」ウィンドウ、ちょっと薄いのがインスペクタ。

2004年3月6日土曜日

SL-C860 メモ

りなざう備忘録・メモ

2004年2月12日に Linux Zaurus の SL-C860 を購入しました.

この文書に、 SL-C860 関連の備忘録・メモをまとめます。 当方は、この文書の内容についての保障はしません。 ここに書かれていることを実行するときは、自己責任で行って下さい。 ただし、つっこみは歓迎いたします。 掲示板 などを御利用ください。


インストールしたソフトたちの記録

gcc (zgcc)
GNU C コンパイラ.

qpe-embeddedkonsole-ja ワイド版
日本語 EUC,SJIS,JIS,UTF8 の入出力が可能なターミナル. SL-C860 付属 CD-ROM に入っているターミナルでは日本語が扱えないので導入.
なお,アイコンがタコだった.なるほど.

emacs21
emacsエディタ様.ターミナル上で動いてくれる. すご.
たぶんテキスト編集にしか使わないだろうから, emacs21-leim1_21.2.1-20021126_arm.ipk などの leim なパッケージはインストールしていない. 本来6パッケージをインストールしなくてはならないところ, 4パッケージしかインストールしていない. とりあえず,日本語テキスト編集などに問題はない.
欲をいえば,UNICODE に対応させたいな. UNICODE に対応させるための elisp パッケージ,名前忘れた.
で,とりあえずやってみました.

qpdf2
2.1.0 prerelease beta4 の qpdf2_render-freetype-2.1.0-20031208_arm.ipk というバージョンのものをインストール. freetype というライブラリ?を使って,きれいに表示してくれるバージョンの模様. ファイルサイズは およそ 940 KB . でかいので,コンパクトフラッシュカードがわにインストールをした.

libfreetype2
qpdf2 のインストール後にこれもインストール. ライブラリなので本体にインストールしてみた。 これをいれないと,pdf ファイルの本文部分の全角文字が豆腐(□)で表示された. とりあえず,この freetype2 により豆腐問題が解決. ありがたや.


Javaアプレットをちょっとだけ動かす

appletviewer hoge.html

上記のように、端末エミュレーター上やコマンドプロンプト上から ちょっと手軽にJavaアプレットを動かしてみる方法を模索した。 用意するのは、端末エミュレーターソフトウェアと、 クラスファイル(hoge.class)と、 アプレット実行用のhtmlファイル(hoge.html)の3つ。

hoge.html の絶対パスが [PATH] であるとすると、以下のように端末に打ち込むといい感じ。

evm -appletviewer localhost[PATH]
もしくは
evm -appletviewer [PATH]

もし hoge.html の絶対パスが /mnt/cf/hoge.html であるとすると、 コマンドは以下のようにする。

evm -appletviewer localhost/mnt/cf/hoge.html
もしくは
evm -appletviewer /mnt/cf/hoge.html

以下に 2つの失敗例も掲載。

localhost のかわりに file: という文字列をつけたら、 以下のようにエラーが出て失敗。

evm -appletviewer file:[PATH]
I/O exception while reading: URL connection with specified hostname is
not supported. Only localhost is supported.

localhost のかわりに file: という文字列をつけ、 [PATH] をhoge.htmlへの相対パスとしたら、 以下のようにエラーが出て失敗。

evm -appletviewer file:[PATH]
Bad URL: file://file:hoge.html ( java.lang.NumberFormatException: 
hoge.html )

emacs で unicode の読み書きをする

mule-ucs を使います.
何の因果か,手持ちの Debian マシンの emacs と,Zaurus 上の emacs とのバージョンがともに 21.2.1 と同じでした. したがって,Debian の emacs 用にコンパイルされた mule-ucs の elisp 群をそのまま Zaurus に流用してみます.

Debian マシン の /usr/share/emacs21/site-lisp/mule-ucs 以下にある elc ファイルを根こそぎ持ってきて,Zaurus の以下のディレクトリにコピーしました.

/home/QtPalmtop/share/emacs/site-lisp/mule-ucs

この elc ファイル群だけで, 5MB くらいの領域を使います. 以下がコピーしてもってきた elc ファイルの名前です.

big5c-cns.elc     big5c-ucs.elc     big5conv.elc     big5type.elc
jisx0213.elc      mccl-font.elc     mucs-ccl.elc     mucs-error.elc
mucs-type.elc     mucs.elc          mule-uni.elc     tae.elc
tbl-mg.elc        trans-util.elc    txt-tbl.elc      un-data.elc
un-define.elc     un-supple.elc     un-tools.elc     unicode.elc
unidata.elc       utf.elc           x0213-cdef.elc   x0213-char.elc
x0213-csys.elc    x0213-font.elc    x0213-mime.elc   x0213-udef.elc
x0213-util.elc

.emacs にはとくに何も書き加えず,以下のままです.

(set-buffer-file-coding-system 'euc-jp-unix)
(set-terminal-coding-system 'euc-japan)
(set-language-environment "Japanese")
(set-keyboard-coding-system 'euc-jp)

mule-ucsディレクトリが入っている site-lispディレクトリには subdirs.el がもうすでに作られているため, わざわざ .emacs で パス を通す必要はないです.

この変更により,emacs の起動に 30秒ほどかかるようになります. これは elc ファイルをカード側に置いたときと,あまり変わりません.

なお,コンパクトフラッシュカード側に elcファイルを置く場合は, .emacsload-path を通せばよいようです.
以下は,コンパクトフラッシュ上の /mnt/cf/mule-ucs というディレクトリの中に elcファイルたちを入れた場合の .emacs の例です.

;;; mule-ucs -- UNICODE の読み書きに対応
(setq load-path
      (cons (expand-file-name "/mnt/cf/mule-ucs")
     load-path))
(require 'un-define) ; Unicode
(require 'jisx0213)  ; JIS X 0213

(set-buffer-file-coding-system 'euc-jp-unix)
(set-terminal-coding-system 'euc-japan)
(set-language-environment "Japanese")
(set-keyboard-coding-system 'euc-jp)

2004年1月12日月曜日

Debian GNU/Linux, kernel 2.2.x と 2.4.x とを共存させる

新カーネル導入設定と旧カーネルとの同居

今だに、Debian GNU/Linux では、カーネルの安定版としてバージョン2.2.x系を採用している。 (2003年7月現在) しかし、他の多くのLinuxディストリビューションでは2.4.x系が主流となっている。 各種USBデバイスを繋げられること、ALSAの新しいバージョン(ver.0.9)が使えるようになることなど、2.2.xから2.4.xへのアップグレード利点も多い。 そこで、 旧カーネル2.2.17も生かしつつ、新カーネル2.4.20を試していく ことにする。 旧カーネルと新カーネルはそれぞれ起動し分けることができるよう、LILOの設定も行いたいと思う。

Debianといえば、apt。 カーネルのソースも apt-get コマンドで持ってくるのだ。
root になってから以下のようにカーネルソースを頂戴してくる。

$ su -
Password:
# apt-get install kernel-source-2.4.20
すると /usr/src/kernel-source-2.4.20.tar.bz2 が置かれるので、これを展開してやることとする。 展開された kernel のソースは /usr/src/kernel-source-2.4.20 以下に置かれる。
そうしたら、例のごとく(?)カーネルの設定をグラフィカルなインタフェースで行なうため、make xconfig する。
# cd /usr/src/kernel-source-2.4.20
# make xconfig
下に、2.2.17 のときの xconfig の画像とそのときの設定項目、2.4.20 のときの xconfig の画像とそのときの設定項目を並べた。 設定の可能な項目がいろいろと増えたのが視覚的にも比べられる。
2.2.17のとき
2.2.17 での xconfig の様子
そのときの設定可能項目
  Code maturity level options
  processor type and features
  Loadable module support
  General setup
  Plug and Play support
  Block dvices
  Networking options
  Telephony Support
  SCSI support

  I2O device support
  Network device support
  Amateur Radio support
  IrDA (infrared) support
  ISDN subsystem
  Old CD-ROM drivers (not SCSI, not IDE)
  Character devices
  USB support
  Filesystems

  Console drivers
  Sound
  Kernel hacking
2.4.20 のとき
2.4.20 での xconfig の様子
そのときの設定可能項目
  Code maturity level options
  Loadable module support
  Processor type and features
  General setup
  Memory Technology Devices(MTD)
  Parallel port support
  Plug and Play configuration
  Block devices
  Multi-devie support (RAID and LVM)
  Networking options
  Telephony Support
  ATA/IDE/MFM/RLL support

  SCSI support
  Fusion MPT device support
  IEEE 1394 (FireWire) support (EXPERIMENTAL)
  I2O device support
  Network device support
  Amateur Radio support
  IrDA (infrared) support
  ISDN subsystem
  Old CD-ROM drivers (not SCSI, not IDE)
  Input core support
  Character devices
  Multimedia devices

  File systems
  Console drivers
  Sound
  USB support
  Bluetooth support
  Kernel hacking
  Library routines

カーネルの設定。 いっぺんにいろいろ設定するのは危険なので、必要最低限の設定だけにしておく。

カニさんチップの載った愛用のイーサネットカードを使うための設定。
Network device support → Ethernet(10 or 100 Mbit) → Realtek RTL-8139 PCI Fast Ethernet Adapter support を n から m へ。
こいつのモジュール名は、helpを表示させて確認した。 どうやら今度からは 8139too.o という名前になるらしい。

いろいろなファイルシステムを扱いたかったので、その辺の設定。
File systems → Ext3 journalling file system support を n から y へ
File systems → DOS FAT fs support を n から y へ
File systems → MSDOS fs support を n から y へ
File systems → VFAT(windows-95) fs support を n から y へ
File systems → Native Language Support → Japanese charsets(shift-jis, Euc-jp) を n から y へ


設定が終わったら保存して終了。

カーネルをコンパイル。(構築)

# pwd
/usr/src/kernel-source-2.4.20
# make-kpkg kernel_image
# cd /usr/src
# dpkg -i kernel-image-2.4.20_Custom.1.0_i386.deb
このあと、リブートを経て、晴れて新しいカーネルから起動する。
ここで、eth0 が消えていたので、新しいカーネルにネットワークカードを認識させる。
モジュール8139tooをinsmodし、ifconfigでIPアドレスを振った。 そしてルーティングの設定をrouteでしてあげれば、内ネットワーク、外ネットワークをちゃんと区別できるようになった。
具体的には以下のようなコマンドで解決した。
# insmod 8139too
# ifconfig eth0 192.168.0.4 netmask 255.255.255.0
# ifconfig eth0 up
# route -add -net 0.0.0.0 netmask 0.0.0.0 dev eth0 gw 192.168.0.1
見ての通り別段複雑なルーティングテーブルじゃあるまいに、内のネットワークにあるホスト、外のネットワークにあるホストそれぞれに ping を打って、ちゃんと返事が帰ってくればオッケーでしょう。
なお、今後は起動時に自動的に eth0 を認識してもらうため、 /etc/modules に 8139too を書き加えておいた。

まだまだやることはいっぱいだ(1) 「カーネルを起動し分ける」
LILOを使って、次の4つを起動し分けるようにしたい。

  1. 新しく構築したばっかりの最新の2.4.20カーネル
  2. そのいっこ前の2.4.20カーネル
  3. もう使わないかもしれないけど、いちおう2.2.17カーネル
  4. Windows98
まずは、
/boot/vmlinuz-2.4.20 を /boot/old.vmlinuz-2.4.20 にコピー。
そうしたら次のようなシンボリックリンクをはる。
/vmlinuz        →  /boot/vmlinuz-2.4.20
/vmlinuz.2.2.17 →  /boot/vmlinuz-2.2.17
/vmlinuz.old    →  /boot/old.vmlinuz-2.4.20
今後カーネルを再設定し、構築したものは /boot/vmlinuz-2.4.20 に上書きされるので、古い /boot/old.vmlinuz-2.4.20 も生かしておけるようになる。

次にこの3つのカーネルとwin98とを選んでブートできるように /etc/lilo.conf を書く。 /etc/lilo.conf の骨子は以下の通りだ。
lba32
boot=/dev/hda
# boot=/dev/fd0  ### installing LILO in a floppy
root=/dev/hda1
install=/boot/boot.b
map=/boot/map
delay=20
vga=normal

default=Linux

image=/vmlinuz
        label=Linux
        read-only

image=/vmlinuz.old
        label=LinuxOLD
        read-only
        optional

image=/vmlinuz.2.2.17
        label=Linux2.2.17
        read-only
        optional

other=/dev/hda3
        label=win
        table=/dev/hda
LILOでの起動プロンプトで Linux, LinuxOLD, Linux2.2.17, win の4つのラベルからそれぞれ 新2.4.20カーネル、旧2.4.20カーネル、2.2.17カーネル、Windows98 の4種の起動方法が選べるようになる。
なお、上記の boot=/dev/hda をコメントアウトし、 boot=/dev/fd0 のコメントをとり有効にしてから root で /sbin/lilo を実行すると、LILOをフロッピーディスクにインストールできる。 起動ディスク用にLILOディスクが一枚あると便利である。
そのまま書き換えずに root で /sbin/lilo を実行するとハードディスクの MBR に LILO が書き込まれる。
MBRとフロッピーにLILOを 書き込んだらリブート。 Shiftキーを押しながらブートすれば、3つのカーネルと1つの別の OS どれを起動するか選べるようになった。

まだまだやることはいっぱいだ(2) 「コンパクトフラッシュカード R/Wを使う」
コンパクトフラッシュカードリーダ(以下CFと表記するかも)の読み書きのできる REX-CF03F という製品を使うため、カーネル 2.4.x を再構築する。
USB CF R/W と USBプリンタ を利用できるにいたるまでの設定は ここここ で、もうすでに済ませてある。 今回行うのはカーネルレベルで USBデバイスを扱うための設定となる。
まずはこの製品の紹介webサイトに置いてあるパッチを手に入れ、これをあてる。 パッチは /usr/src/kernel-source-2.4.20/drivers/usb/storage ディレクトリに入っている transport.c と unusual_devs.h の2つのファイルにあてる。
~user/lib にメーカのwebサイトから手に入れたパッチを展開し、
root になってから以下のようにパッチを当てた。 もちろんパッチの当て方はパッチに同梱の説明書に詳しく書いてあるので、 実際にやる人はそちらをよく読むべきだと思う。

# cd /usr/src/kernel-source-2.4.20/drivers/usb/storage
# patch -p1 < ~user/lib/cf03/patch/redhat7-1/transport.patch
# patch -p1 < ~user/lib/cf03/patch/redhat7-1/unusual_devs.patch

次にカーネルのコンフィグを行う。 /usr/src/kernel-source-2.4.20 にカレントディレクトリを移し、例によって # make xconfig で設定をする。
  • USB Support → Support for USB を y から m にする
    (モジュール名は usbcore.o)
  • USB Support → UHCI Alternate Driver (JE) Support が m になっているか確認する
    (モジュール名は uhci.o、 2.2.17カーネルのときとは違う名前になったので注意か
  • USB Support → USB Mass Storage Support が m になっているか確認する
    (モジュール名は usb-storage.o)
  • USB Support → USB Printer support を n から m にする
    (モジュール名は printer.o)
同梱の説明書には
Code maturity level options → Prompt for development and/or incomplete code/drivers
も有効にせよとあるが、有効にしなくても現に動いているので筆者はこれを無視した。
それと、上記にわかるとおり、CF R/Wの設定といっしょに usb プリンターの設定もこっそりと行っている。

旧バージョンのカーネル用のモジュールの名残がまだ詰まっている /usr/src/modules を /usr/src/modules2.2.17 と名前を変えてから、カーネルを再構築、そして、リブートを行う。
リブート後からは root権限で # depmod -av の後に、uhci, usb-storage, printer を modprobe してやれば、CF R/W も usb プリンターも利用できるようになった。

まだまだやることはいっぱいだ(3) 「音楽演奏」
これは手短に紹介。
alsaのソースを apt で頂いてくる。

# apt-get install alsa-source
するとここで debconf 設定の画面となる。 ここで isapnp 、 デバッグ用メッセージ、サウンドカードに載っているチップにあうドライバ(筆者のものでは sb8 (Sound Braster Pro用)) まで対話的に選択していける。 つぎに /usr/src/alsa-driver.tar.gz を展開する。
# cd /usr/src
# tar xvzf alsa-driver.tar.gz
そうしたら /usr/src/kernel-source-2.4.20 へ行き、
# cd /usr/src/kernel-source-2.4.20
# make-kpkg modules_image
そして /usr/src にできている alsa-modules の debパッケージをインストール。 その後、alsaconf で設定を行った。
# cd ..
# dpkg -i alsa-modules-2.4.20_0.9.2-7+Custom.1.0_i386.deb
# alsaconf
以上で終わり。 音楽演奏も可能となった。
以前使っていたバージョン0.4の alsa で演奏をさせると、マクロメディアフラッシュ等で画像の再生に演奏が追い付かなかった。 だがこのバージョン0.9 ではその問題はかなり解消された。 よかったよかった。

Debian GNU/Linux, woody から sarge へのアップグレード

Debian安定版からテスト版への移行とそれに伴うトラブル

安定版にしがみついてばかりいないで冒険をしようと思い立ち、Debian GNU/Linux の安定版である woody から テスト版の sarge へとアップグレードした。

アップグレードをするため、/etc/apt/sources.list の中の woody という文字をすべて sarge へ置き換えて保存。 ちょうど、こんな /etc/apt/sources.list の中身を

http://・・・(URL)・・・・・.jp/ woody main contrib nonfree
ftp://・・・(URL)・・・・・.jp/ woody main contrib nonfree
こういう風に置換しただけ。
http://・・・(URL)・・・・・.jp/ sarge main contrib nonfree
ftp://・・・(URL)・・・・・.jp/ sarge main contrib nonfree
そうしたら root 権限で
# apt-get update
# apt-get dist-upgrade
以上のコマンドでアップグレードは完了。 筆者の debian box では 396個のパッケージがアップグレードされ、405個のパッケージが新たにインストールされ、9個のパッケージが削除され、3個のパッケージが今とバージョンがわからないままとなった。
アップグレードに際し、消されるのパッケージは以下だった。
alsa-modules-2.2.17, alsautils, libpng-dev, libwings-deb, libwraster2-dev, openoffice.org, org-debian-files, openoffice.org-l10n-ja
これは # apt-get dist-upgrade のコマンドを打つと表示されるので、後々のためにもメモをとっておくべきであろう、うん。

大量のパッケージをダウンロードし、それらのインストールが終わったら晴れて sarge への移行は終了だ。
この後、いくつか再設定をしなくてはならない項目がある。

トラブル(1) 「eth0 が使えない」
さすがにカーネルを移行したわけじゃないんだから、eth0 を認識しなくなったというわけではない。 ifconfig -a を実行するとちゃんと eth0 は存在する。
とりあえず eth0 を利用できるようにしてやるなら以下のようにコマンドを打ってあげる。

# ifconfig eth0 192.168.0.4 netmask 255.255.255.0 up
そして、OSの起動時に eth0 を自動で上げたいので、
# ln -s /etc/init.d/networking /etc/rc2.d/S20networking
をしてやる。 なぜか /etc/rc2.d にあったはずの S20networking が消えていたのが原因のよう。
アップグレード時に勝手に消されてしまったのだろう。

トラブル(2) 「どうも画面がチカチカする」(Xwindow)
どうも落ち着かないので /etc/X11/XFree86Config-4 を編集した。
現在使っているグラフィックカードに合わせて以下のように編集した。
Section "Device"

Chipset    "mgag200"
を追加。
それから、Section "Monitor"
Modeline "1152x864" 92.00 1152 1208 1368 1474 864 875 895 915
のように、結構いい加減に記述。 "1152x864" より後ろの数字はなんなのか、気になるところだが、
$ man XF86Config-4
に載っている。
dot (pixel) clock (MHz), hdisp, hsyncstart, hsyncend, htotal, vdisp, vsyncstart, vsyncend, vtotal
だそうだ。 しかしまあ、改めて見るといい加減な数値にしてるな…。
書き換えたら X を上げ直してみて、様子を見る。 とりあえずこれでチカチカしなくなったので、よしとした。

トラブル(3) 「どうしても kochi(東風) や Osaka といったスケーラブルフォントの表示が出来ない」
XFree86-4.x ならば xfs や xfs-tt などのフォントサーバを上げなくても truetype フォントなどの表示が出来るのだと聞いて喜んでいたのに、これらの文字が表示されない。 具体的には先ほども出てきた /etc/X11/XFree86Config-4 の中の Section "Module" の中で

Load    "xtt"
についているコメントをとってやるのだ。 しかし筆者の debian box ではこのように xtt のモジュールを組み込んでやっても truetype のフォントの表示がされなかった。 色々悩んだが、結局 xserver-xfree86 のバージョンを 4.2.x から 4.1.0 へとダウングレードすることで乗り切ることにした。

トラブル(4) 「man の表示が変」
manでマニュアルを見ると表示が妙なことになる。 以下がその例。

$ man XF86Config-4
XF86Config-4(5x)                                              XF86Config-4(5x)



^[[1mNAME^[[0m
       XF86Config-4 - Configuration File for XFree86 4.x server

^[[1mDESCRIPTION^[[0m
       ^[[4mXFree86^[[24m  uses  a  configuration  file called ^[[1mXF86Config 
^[[22mfor its initial
       setup.  This configuration file is searched for in the following places
       when the server is started as a normal user:

           ^[[4m/etc/X11/^[[24m<cmdline>
           ^[[4m/usr/X11R6/etc/X11/^[[24m<cmdline>
           ^[[4m/etc/X11/^[[24m^[[1m$XF86CONFIG^[[0m
           ^[[4m/usr/X11R6/etc/X11/^[[24m^[[1m$XF86CONFIG^[[0m
           ^[[4m/etc/X11/XF86Config-4^[[0m
           ^[[4m/etc/X11/XF86Config^[[0m
           ^[[4m/etc/XF86Config^[[0m
           ^[[4m/usr/X11R6/etc/X11/XF86Config.^[[24m<hostname>
           ^[[4m/usr/X11R6/etc/X11/XF86Config-4^[[0m
           ^[[4m/usr/X11R6/etc/X11/XF86Config^[[0m
XF86Config-4(5x):

見にくいことこの上ない。 原因はページャ(PAGER) lv のせいのようだった。 このページャを違うものに変えたところ、表示に問題はなくなった。 man の引数 -P の後に lessなどの違うページャを指定するか、環境変数 PAGER で less を指定するかで解決気味。
$ man -P less XF86Config-4
XF86Config-4(5x)                                              XF86Config-4(5x)



NAME
       XF86Config-4 - Configuration File for XFree86 4.x server

DESCRIPTION
       XFree86  uses  a  configuration  file called XF86Config for its initial
       setup.  This configuration file is searched for in the following places
       when the server is started as a normal user:

           /etc/X11/<cmdline>
           /usr/X11R6/etc/X11/<cmdline>
           /etc/X11/$XF86CONFIG
           /usr/X11R6/etc/X11/$XF86CONFIG
           /etc/X11/XF86Config-4
           /etc/X11/XF86Config
           /etc/XF86Config
           /usr/X11R6/etc/X11/XF86Config.<hostname>
           /usr/X11R6/etc/X11/XF86Config-4
           /usr/X11R6/etc/X11/XF86Config
           /usr/X11R6/lib/X11/XF86Config.<hostname>
 Manual page XF86Config-4(5x) line 1

Debian GNU/Linux, USB接続のプリンタの利用とネットワーク印刷 @ kernel 2.2.17

hp deskjet 5551 動作報告とSamba利用のプリントサーバ

先日、 hp のインクジェットプリンタ、 deskjet 5551 を購入した。 「パソコンから紙に印刷をしたい」という家族からの要望により、代わりに買ってきた次第だ。 家族からは、WinME 搭載のノート型コンピュータからこのプリンタを使って印刷ができればよい、と言われていた。 だが、スペースの関係上、このプリンタを私の部屋に設置しなくてはならなくなった。 部屋に設置するというなら、私もプリンタの恩恵にあやかりたいと思い、

  • Linux からも印刷をできるようにする。
  • home LAN 経由で印刷データをプリンタに転送できる(印刷できる)
という環境を目指した。
なお、LinuxPrintingで、どのプリンタを買おうか吟味してから電機屋へ買いにいった。 YドバシCメラにて、2,2800円だった。

なお、まだまだ不備もある。 今まだ残っている問題を以下に挙げておく(投げやり)

  • Linux からテキストを直接印刷できない。(フィルタの不備です)
  • 例えば Windows での印刷の際の「印刷進渉表示」や「インク残量表示」などのプリンタからの情報がパソコンまで届かない。
  • 世界中のクラッカーが私の部屋のプリンタで印刷ができてしまう。

下地となる環境詳細

  • OS = debian GNU/Linux
  • Kernel version = 2.2.17 (USB backport パッチ済み[詳細]
  • イーサネットLAN[詳細]により、同一ネットワーク上に筆者の debian box と ノート型コンピュータ(WinME搭載)がある。

何をしたいか。

  • Linux box と プリンタをUSBで直接つなぎ、Linux からプリンタで印刷をする。(PS形式データのみ)
  • samba を Linux上で走らせておき、WinMEから印刷データを受けとってプリンタに流す。

そもそも Linux がインクジェットプリンタで印刷する手順がわからなかったので、適当に以下のように解釈。

プリントしたいデータ(すべてPS形式とする)をプリンタスプーラに送る。

スプーラはそのデータに対して、ちょっと処理をかましておく。(フィルタ処理)

フィルタ処理の仕事は、プリントしたいデータを ghostscript(gs)hpijs(hp inkjet server)を通して hp deskjet 5551 が印刷可能なデータに変換すること。

変換されたデータを usb デバイスへと流す。

とりあえず、gsとhpijsなるものをインストールしておく。 もちろん、筆者は debianパッケージを使い、dpkgコマンドを使って楽々インストールをする。(ぉ
ちなみに、これは後々判明することなのだが、現在(2003 Mar)安定版としてインストールできる hpijs(ver 1.0.4-1)では deskjet5551 が動かなかったので、テスト版の hpijs (ver 1.3.2) を使用した。

USBのプリンタを使う、ということで、カーネルコンフィグ。

# cd /usr/src/kernel-source-2.2.17
# make xconfig

  設定画面が上がるので、
  USB support → USB Printer support の m にチェックを入れて
  保存して終了

# make-kpkg kernel_image
# cd ..

  /usr/src に kernel-image-2.2.17_Custom.1.000_i386.deb などの
  カーネルパッケージができているので、それを組み込む

# dpkg -i kernel-image-2.2.17_Custom.1.000_i386.deb
# reboot

  再起動

# depmod -av

  depmod -av の出力の中に printer.o があるのを確認(何
  以下のコマンドで printerモジュールをカーネルに組み込めるようになった

# insmod printer
これでハードウェア面での設定はおおよそ終わった。
プリンタを使うときは、上で示したように # insmod printer コマンドや # modprobe printer コマンド*1でモジュールを組み込んでおかないと当然動かない。 modprobeコマンドは、モジュールの依存関係をも考慮してその他必要なモジュールも一緒に組み込んでくれるから便利。

*1(「# insmod modprobeコマンド」と書いていたのを訂正、modprobeという名のモジュールを組み込むわけではありません、ごめんなさい Apr 3)

LPRng(バークレーLPRの拡張)を入れる。 やっぱり # apt-get install lprng で楽してインストール。 この方法だと、ブート時にLPDを上げるか聞かれるので、景気よく y と答えておいた。 見ると、 /etc/rc2.d/S20lprng ができていた。

次に、ソフトの設定を進めていく。
hpijsのサイトの説明によれば、gs の ver 6.53以上から hpijs に対応しているとのこと。
$ gs -h というコマンドを打ち、その中に ijs という出力があればよいらしい。 また、hpijsの使用例として

  • $ gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="DESKJET 990" -r300x300 -dNOPAUSE -dSAFER -sOutputFile="/dev/lp0" file.ps -c quit
  • $ lpr -Plp0 tiger.ps
などと載せていた。 特に上の例のコマンドは長過ぎ。 特に、急いでいるときなどには打ちたくない。

deskjet 5551 をプリント出力先として /etc/printcap ファイルに書き加える。 (この辺は他サイト等の情報を元にしている。)

hp_deskjet_5551|hp deskjet 5551:\
:lp=/dev/usb/lp0:\
:sd=/var/spool/hp_deskjet_5551:\
:lf=/var/spool/hp_deskjet_5551/log:\
:af=/var/spool/hp_deskjet_5551/acct:\
:if=/usr/bin/hp_deskjet_5551-if:\
:mx#0:\
:sh:
上記のように書いてしまったので
  /dev/usb/lp0というキャラクタデバイス
  /var/spool/hp_deskjet_5551/log などのディレクトリ
  /usr/bin/hp_deskjet_5551-if というフィルタの役割をするシェルスクリプト
の3点セットを作っておく。
# mkdir /dev/usb
# mknod /dev/usb/lp0 c 180 0

# mkdir /var/spool/hp_deskjet_5551
# chgrp lp /var/spool/hp_deskjet_5551
/dev/usb/lp0 にアクセスされたらメジャー番号180、マイナー番号0番のキャラクタ型デバイスをセットする、という。 いまいちよくわからなかったが、/proc/devices 内の記述を参考してみた。
プリンタからの情報を得るには、この辺が重要になるのかな。 そして、/usr/bin/hp_deskjet_5551-ifというシェルスクリプトだが、これもまた他サイトの情報を参考にしている。
#! /bin/sh
#
# filter for hp deskjet 5551

/usr/bin/gs -q -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5551" -r300 -dNOPAUSE -dSAFER -sOutputFile=- -
上記の最後の1行は、先ほど見かけたあの長いコマンドを deskjet5551 風にアレンジしたもの。 まずはこの長い gs コマンドを普通にターム上で打ち込んでみて、ちゃんと ps ファイルがプリンタから出力されるのを確認してから、スクリプトに組み込む。 こんな風に(以下)打つと、name.ps がプリンタから出力される。
# gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5551" -r300 -dNOPAUSE -dSAFER -sOutputFile="/dev/usb/lp0" name.ps -c quit
やっぱり、改行文字をバックスラッシュでエスケープしたほうが見やすくてかっこいと思った・・・。

試し印刷。 こんどは lpr コマンド使用で ユーザでも印刷ができるか確かめる。

$ lpr -Php_deskjet_5551 name.ps
筆者の場合は、lprコマンドで psファイルを指定した場合にのみ印刷ができるようになった。 もじらなどでの印刷はできるが、$ lpr hoge.txt などのコマンドを打つと印刷に失敗する・・・。 magicfilter なるものを使うとこの辺を処理してくれるらしいのだが、それって自分で filter を書き直せば出来そうな気もするけど・・・。
以下次号にご期待・・・。(ぉ
とりあえず、これでLinuxからの印刷に関する設定をいったん中断する。

Sambaをインストール
やっぱり

# apt-get install samba samba-common
でインストール。すると、 debconfで初期設定ができる。 以下はこのdebconfで聞かれることをおおざっぱに訳したものと、設定例。
  1. debconfでsmb.confの設定をしますか? ---- ok
  2. Workgroup/Domain name? ---- home.pr.jp(※ WinMEのネトワク名に合わせること)
  3. 最近の窓は暗号化パスワードを使います。もし生テキストのパスワードがいいっていうなら、窓のレジストリを書き換えて、/etc/samba/smbpasswd というファイルで、各ユーザごとに smbpasswdコマンドでちゃんと設定してください。で・・・、暗号化パスワードを使いますよね? ---- yes
  4. nmbd と smbdのログの場所が /var/log から /var/log/samba に別々の名で保存されるようになりましたのでよろしく。 ---- ok
  5. サーバは daemon か inetd から上げられます。どっちがいいですか。なお、daemonが推奨されますよ。 ---- daemons ok
  6. パスワードについて、手動で smbpasswd コマンドを打ってメンテナンスしてください。 ---- ok
  7. /etc/samba/smbpasswd ? ---- yes
このあと、/etc/samba/smb.conf にプリンタ周りの設定を書き加える。 主だって変更した設定についてのみ、以下に挙げる。
[global]
 workgroup = MSHOME

[homes]
 変更無し

[printers]
 comment = All Printers
 path = /var/spool/samba
 create mask = 0700
 printable = Yes
 browseable = No

[printer1]
 path = /tmp
 guest ok = Yes
 printable = Yes
 print command = cat %s > /dev/usb/lp0 ; rm -f %s
 printer name = hp_deskjet_5551
[printer1] 以下が deskjet 5551 周りの設定である。 WinME 機から送られてくるデータはプリンタが扱える形式のデータのはずなので、デバイス /dev/usb/lp0 に cat コマンドで直接流し込んでいる。 なお、 %s は印刷データのファイル名に変えられる。

ユーザをつくる。
# smbpasswd -a username コマンドで username というユーザを作る。 このとき、 Linux 側にも username さんというユーザがいなくてはならない。

WinME に、deskjet 5551 のドライバを「ネットワークプリンタ設定」でインストールする。 その際、ネットワークプリンタとして hp_deskjet_55 を追加してやればいい。 なお、なぜ窓上で hp_deskjet_55 と尻切れとんぼに表示されるのかは謎である。

おまけ情報。
YドバシCメラのプリンタコーナーでは、hpやキヤノンの社員が接客をしてくれる。 売場には「競合他社との闘い」「客の取り合い」という見えない火花が散っている。 プリンタに関しては、さすがに相手は社員さんなので、何を聞いても正確に答えてくれる。 だが、YドバシCメラ1階の店内にはびこる Yahoo BB! の勧誘員はどうだかは知らない。

Debian GNU/Linux, KDE3.1 を Debパッケージからインストール

KDE3.1のインストール

Windowmaker はテーマを持ち、メニューを持ち、日本語化もでき、軽く、あのドックアプリを広めるのに貢献したXウィンドウマネージャだ。 しかし、 Windowmakerに少し飽きてきた+KDE3.1がリリースされた+スケスケ(透過)メニューに憧れていた ということで、debianパッケージを利用して楽にKDEへ移行してみたいと思ったわけだ。

管理者権限でインストール作業をするため、suコマンドでrootになる。 (sudoコマンドを使ってもよいかと。) まず、 /etc/apt/sources.list に以下を書き加える。

# for kde ver.3.1
deb http://download.kde.org/stable/3.1/Debian stable main
そうしたら、このKDE本家のdebianパッケージ置場(?)を apt line に加えるため以下のコマンドを叩く。
# apt-get update
これで apt-get install kde のようなコマンドで kde を入れられるのかと思いきや、
root@jaga[/etc/apt]# apt-get install kde
Reading Package Lists... Done
Building Dependency Tree... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.

Since you only requested a single operation it is extremely likely that
the package is simply not installable and a bug report against
that package should be filed.
The following information may help to resolve the situation:

Sorry, but the following packages have unmet dependencies:
  kde: Depends: kdelibs3 but it is not going to be installed
       Depends: libkmid or
                libkmid-alsa but it is not going to be installed or
                libkmid-bin but it is not installable
       Depends: kdebase but it is not going to be installed or
                kdebase3 but it is not installable
       Depends: kdebase-audiolibs but it is not going to be installed or
                kdebase3-audiolibs but it is not installable
       Depends: kdebase-libs but it is not going to be installed or
                kdebase3-libs but it is not installable
       Depends: libkonq3 but it is not going to be installed or
                libkonq4 but it is not going to be installed
       Depends: konqueror but it is not going to be installed or
                konqueror3 but it is not installable
       Depends: kate but it is not going to be installed or
                kate3 but it is not installable
       Depends: konsole but it is not going to be installed or
                konsole3 but it is not installable
       Depends: kdebase-doc but it is not going to be installed or
                kdebase3-doc but it is not installable
       Depends: kscreensaver but it is not going to be installed or
                kscreensaver3 but it is not installable
       Depends: kuser but it is not going to be installed
       Depends: ksysv but it is not going to be installed
       Depends: kcron but it is not going to be installed
       Depends: kpackage but it is not going to be installed
       Depends: secpolicy but it is not going to be installed
       Depends: kghostview but it is not going to be installed
       Depends: kview but it is not going to be installed
       Depends: kmail but it is not going to be installed
       Depends: korn but it is not going to be installed
       Depends: ark but it is not going to be installed
       Depends: kab but it is not going to be installed
       Depends: karm but it is not going to be installed
       Depends: kcalc but it is not going to be installed
       Depends: kcharselect but it is not going to be installed
       Depends: kdepasswd but it is not going to be installed
       Depends: kdf but it is not going to be installed
       Depends: kedit but it is not going to be installed
       Depends: kfind but it is not going to be installed
       Depends: khexedit but it is not going to be installed
       Depends: kjots but it is not going to be installed
       Depends: knotes but it is not going to be installed
       Depends: kpm but it is not going to be installed
       Depends: kpaint but it is not going to be installed
       Depends: kiconedit but it is not going to be installed
       Depends: kfract but it is not going to be installed
       Depends: ksnapshot but it is not going to be installed
       Depends: kruler but it is not going to be installed
       Depends: kdict but it is not going to be installed
       Depends: kit but it is not going to be installed
       Depends: knode but it is not going to be installed
       Depends: ksirc but it is not going to be installed
       Depends: koffice but it is not going to be installed
       Depends: knewsticker but it is not going to be installed
       Depends: ktimer but it is not going to be installed
       Depends: kcoloredit but it is not going to be installed
E: Sorry, broken packages
激しくエラー・・・・。
エラー出力を睨みつつ、依存関係を満たすようにこんなコマンド(長いけど1行)を打ってみるも・・・
root@jaga[/etc/apt]# apt-get install kde kdelibs3 libkmid-alsa kdebase3 kdebase3-audiolibs kdebase3-libs libkonq3 konqueror3 kate3 konsole3 kdebase3-doc kscreensaver3 kuser ksysv kcron kpackage secpolicy kghostview kview kmail korn ark kab karm kcalc kcharselect kdepasswd kdf kedit kfind khexedit kjots knotes kpm kpaint kiconedit kfract ksnapshot kruler kdict kit knode ksirc koffice knewsticker ktimer kcoloredit kde-i18n-ja
上のコマンドに対する出力。
Reading Package Lists... Done
Building Dependency Tree... Done
Package kdebase3 has no available version, but exists in the database.
This typically means that the package was mentioned in a dependency and
never uploaded, has been obsoleted or is not available with the contents
of sources.list
W: Couldn't stat source package list file: stable/non-free Packages (/var/lib/apt/lists/_cdrom_dists_stable_non-free_binary-i386_Packages) - stat (2 No such file or directory)
W: Couldn't stat source package list file: stable/non-free Packages (/var/lib/apt/lists/_cdrom_dists_stable_non-free_binary-i386_Packages) - stat (2 No such file or directory)
W: You may want to run apt-get update to correct these problems
E: Package kdebase3 has no installation candidate
やっぱり・・・。 結局エラーメッセージに振り回され撃沈。
どうやるんだ、インストール?

やっぱり改めてネットで方法を調べるか、と思い直し、 Xttp://davidpashley.com/debian-kde/faq.html こんな資料あるやんか。
結局以下のコマンドでOKらしい。

root@jaga[/etc/apt]# apt-get install arts kdelibs kdebase kdenetwork kdepim kdegraphics kdeadmin kdemultimedia
でも依存関係により、 wine (窓エミュレータ)が消されてしまった。 あとついでに、
# apt-get install kde-i18n-ja
とかもやったら、rootでの作業は終わり。

root から 「KDEを使うユーザ」に戻ったら、さっそく startkde コマンドを打つ。 と思ったら Windowmaker を起動したままだった。 まあとりあえずそのままで 操作や挙動、GUIの設定を行う。 最後に、xdm ログイン時に Windowmaker ではなく、kde が上がるように設定する。
startkde の PATH を調べてから、~/.xsessionを書き換える。
~/.xsession ファイルの骨子は以下のようしてある。

WINDOW_MANAGER=/usr/bin/startkde
export WINDOW_MANAGER

kinput2-canna-wnn  -jserver localhost &
LANG=ja_JP.eucJP
export LANG
PATH=$HOME/bin:$PATH

if [ -x "$WINDOW_MANAGER" ]; then
  realstartup=$WINDOW_MANAGER
elif [ -x /usr/bin/x-session-manager ]; then
  realstartup=x-session-manager
elif [ -x /usr/bin/x-window-manager ]; then
  realstartup=x-window-manager
elif [ -x /usr/bin/x-terminal-emulator ]; then
  realstartup=x-terminal-emulator
fi
exec $realstartup
これでめでたく xdm からログインすると KDE が上がるようになった。

ひとりスクリーンショット自慢大会

  1. 全体図(420KB)
    メニューが透けてるよ(; ´Д`)ハァハァ
    KDE3.1の透過メニューを開いた図)
  2. Konqueror(86KB)
    画像・動画ファイル、テキストデータとわかるものを勝手に展開表示するファイラ。 ファイラだけでなく、webブラウザにもなる。
    KDE附属のソフト(概して、k から始まる名称が多い)はかなり重い・・・。 Konquerorってすごいね、の図

Debian GNU/Linux, X や Mozilla で TrueTypeフォントを使う

TrueTypeフォントに奮闘(もじらで使おうTTフォント)

今まで筆者は xfs(X Font Server かな?) を使いビットマップフォントだけを使用していた。 だが、もじらでTrueTypeフォントを使いたくなってしまったため、急きょTrueTypeフォントの東風フォントを導入することにした。

まずフォントファイル(*.ttf)をもらってこなくてはならない。 とりあえず yasu さんのホームページ(Xttp://www.on.cs.keio.ac.jp/~yasu/jp_fonts.html)から東風明朝フォントと、東風ゴシックフォントの二つを頂いてくる。
次にそれを解凍して、 *.ttf ファイル(フォントファイル)と fonts.dir.xtt ファイルを /usr/lib/X11/fonts/truetype_jp というディレクトリへコピーした。 その際、fonts.dir.xtt を fonts.dir と名称変更をしておく。
このパスを見れば想像がつくかもしれないが、ファイルのコピーにはrootの権限が必要になる。 個人的に楽しむ目的ならばroot権限でフォントを導入する必要は全くないだろうから、一般ユーザのホームディレクトリ以下にこれらを置いておいても問題はないだろう。
ここでは /usr/lib/X11/fonts/truetype_jp にフォントファイルを置いたと仮定して話を進めていく。

$ tar jxvf kochi-mincho-0.2.20020727.tar.bz2
$ tar jxvf kochi-gothic-0.2.20020727.tar.bz2
# cp kochi-mincho/fonts/kochi-mincho.ttf /usr/lib/X11/fonts/truetype_jp/
# cp kochi-gothic/fonts/kochi-gothic.ttf /usr/lib/X11/fonts/truetype_jp/
# cp kochi-gothic/examples/fonts.dir.xtt /usr/lib/X11/fonts/truetype_jp/fonts.dir
$ cat /usr/lib/X11/fonts/truetype_jp/fonts.dir
16
kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-c-0-jisx0208.1983-0
bw=0.5:kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-o-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-o-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-c-0-iso8859-1
kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-c-0-jisx0208.1983-0
bw=0.5:kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-o-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-o-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-c-0-iso8859-1

次に、TrueTypeフォントを扱うためのxfs-xttサーバが入ってない(!)ので、インストールする。 今後は xfs に代わって xfs-xtt を介してフォントを表示させていくこととなる。

# apt-get install xfs-xtt

インストール中にいろいろメッセージが出るのだが、おそらく一番重要なのは3番目にでるものだろう。 以下にそれらのメッセージを挙げる。

  +-------------------------- Configuring Xfs-xtt ---------------------------+
  x                                                                          x 
  x xfs-xtt serves fonts using 100 dpi resolution                            x 
  x                                                                          x 
  x You should be aware that, by default, xfs-xtt (the X Font Server with    x 
  x X-TrueType) preferentially delivers fonts to clients using a resolution  x 
  x of 100 dots per inch.  This affects the visible font size.  Another      x 
  x common default is 75 dpi; some font rasterizers do not deal well with    x 
  x other dpi settings.                                                      x 
  x                                                                          x 
  x This setting can be changed by editing /etc/X11/fs-xtt/config.  See the  x 
  x xfs-xtt(1) manual page for more information.                             x 
  x                                                                          x 
  x                                  <Ok>                                    x 
  x                                                                          x 
  +--------------------------------------------------------------------------+
                                                                               
  +-------------------------- Configuring Xfs-xtt ---------------------------+
  x                                                                          x 
  x xfs-xtt does not listen on TCP port by default                           x 
  x                                                                          x 
  x Because xfs-xtt (the X Font Server with X-TrueType) is a daemon that     x 
  x runs with superuser privileges, by default it runs with TCP port         x 
  x listening disabled as a security measure.  This means that, as shipped,  x 
  x xfs-xtt is not reachable via the network and is unable to to serve       x 
  x fonts to X servers running on remote hosts.  Most people do not need to  x 
  x enable TCP port listening in xfs-xtt; it can serve fonts to local X      x 
  x servers without this functionality enabled.                              x 
  x                                                                          x 
  x xfs-xtt can be configured to remote X servers by appropriately editing   x 
  x /etc/X11/fs-xtt/config.  See the xfs-xtt(1) manual page for more         x 
  x information.                                                             x 
  x                                                                          x 
  x                                  <Ok>                                    x 
  x                                                                          x 
  +--------------------------------------------------------------------------+
                                                                              
  +-------------------------- Configuring Xfs-xtt ---------------------------+
  x                                                                          x 
  x xfs-xtt use 7110 port insted of 7100                                     x 
  x                                                                          x 
  x xfs-xtt would use 7110 insted of 7100 default, xfs-xtt does not          x 
  x conflict original xfs. So, if you installed xfs-xtt (1.3.0.1-15 or       x 
  x earlyer) previous and will not install xfs, you should modify font path  x 
  x in XF86Config, like this:                                                x 
  x                                                                          x 
  x FontPath "unix/:7100" ->  FontPath "unix/:7110"                          x 
  x                                                                          x 
  x                                  <Ok>                                    x 
  x                                                                          x 
  +--------------------------------------------------------------------------+
  
  +-------------------------- Configuring Xfs-xtt --------------------------+
  x                                                                         x 
  x xfs-xtt use /etc/X11/fs-xtt for config files                            x 
  x                                                                         x 
  x Older version of xfs-xtt (1.3.0.1-15 or earlyer) used /etc/X11/xfs for  x 
  x config files. Now this version uses /etc/X11/fs-xtt directory. So, you  x 
  x can use both xfs and xfs-xtt at the same time on the same machine.      x 
  x                                                                         x 
  x                                 <Ok>                                    x 
  x                                                                         x 
  +-------------------------------------------------------------------------+

3番目のメッセージでは、
「xfs-xttはポート7100からポート7110を使うようになるのでXF86Configファイルを編集しておくよう」注意を促している。
筆者の環境では /etc/X11/XF86Config-4 が X の起動時に使われるファイルとなっているので、それを編集した。
その他にも、フォントパスを追加したり、モジュールとしてxttを組み込むよう書き込んでいる。
以下に筆者の /etc/X11/XF86Config-4 の内容(一部)を示す。 強調部分が編集対象部分だ。

     :
     :
Section "Files"
#       FontPath        "unix/:7100"                    # local font server
        FontPath        "unix/:7110"                    # for XTTserver
        # if the local font server has problems, we can fall back on these
        FontPath        "/usr/lib/X11/fonts/misc"
        FontPath        "/usr/lib/X11/fonts/cyrillic"
        FontPath        "/usr/lib/X11/fonts/100dpi/:unscaled"
        FontPath        "/usr/lib/X11/fonts/75dpi/:unscaled"
        FontPath        "/usr/lib/X11/fonts/Type1"
        FontPath        "/usr/lib/X11/fonts/Speedo"
        FontPath        "/usr/lib/X11/fonts/100dpi"
        FontPath        "/usr/lib/X11/fonts/75dpi"
        FontPath        "/usr/lib/X11/fonts/japanese"
        FontPath        "/usr/lib/X11/fonts/truetype_jp"
EndSection

Section "Module"
        Load    "GLcore"
        Load    "bitmap"
        Load    "ddc"
        Load    "dri"
        Load    "extmod"
#       Load    "freetype"
        Load    "xtt"
        Load    "glx"
        Load    "int10"
        Load    "pex5"
        Load    "record"
        Load    "speedo"
        Load    "type1"
        Load    "vbe"
        Load    "xie"
EndSection
     :
     :

編集が終わったら、

$ /etc/init.d/xfs stop
$ /etc/init.d/xtt-xfs restart

などでxtt-xfsデーモンを立ち上げてみよう。

xfontselで kochi が加わったか確認してみる。
xfontselは、xfontselとシェルに打ち込めば上がるはずだ。
xfontselイメージ
文字が表示されていれば、他の場所(もじらなど)でも表示できるはずだ。

よくわからないけど・・・・。
xdmを使う際、
/etc/X11/xdm/Xservers というファイル内に
:0 local /usr/X11R6/bin/X vt7 -deferglyphs 16
のように書くと X に -deferglyphs all オプションつきで起動ができるとのこと。 これがないと X が固まるとの噂が・・・・。 だが筆者は特にこれを有効にしていないが、問題なく xdm から X が上がるのだが・・・・。

見くらべてみよーう。
ビットマップフォントのモナーフォント、TrueTypeフォントの東風フォントを使った際の例を以下に示す。

(フォント画像1) モナーフォントのとき
文字を縮小すればつぶれてしまい、
拡大すればカクカクが目立ってしまう
(フォント画像2) 東風フォントをそのまま指定
フォントサイズによっては
意外と荒さが目立ってしまう
(フォント画像3) 東風フォントにアンチエイリアスをかけた場合
より美しく表示、実にきれい(下記参照)

さらにもじらでこだわってみた。(上画像参照) せっかくTrueTypeフォントを使っているのだから、フォントにアンチエイリアスをかましてよりきれいに表示させてみたい。 なにやら、アンチエイリアスをかますことで、文字色の中間色を使用し文字曲面などのギザギザを目立たなくしてくれるというのだ。
なお筆者は mozilla ver.1.0.1(日本語化パック)を使用している。

$HOME/.mozilla/user_name/random.slt/user.js に次のように書き込んだ。(とはいえ、これもどっかからの写しで恐縮だが・・・・(ぉぃ))

// it is best to leave hinting off
user_pref("font.FreeType2.autohinted", false);
user_pref("font.FreeType2.unhinted", false);
// below a certian pixel size anti-aliased fonts produce poor results
user_pref("font.antialias.min",        8);
user_pref("font.embedded_bitmaps.max", 100000);
user_pref("font.scale.tt_bitmap.dark_text.min", 32);
user_pref("font.scale.tt_bitmap.dark_text.gain", "0.1");
// sample prefs for TrueType font dirs
user_pref("font.directory.truetype.1", "/usr/X11R6/lib/X11/fonts/Type1");
user_pref("font.directory.truetype.2", "/usr/X11R6/lib/X11/fonts/truetype_jp");

最後のほうにある /usr/X11R6/lib/X11/fonts/truetype_jp の下にはTrueTypeフォントが入っている。 この部分は、人それぞれに違うであろうから、丸写しをしても意味はないかと思われる。
### もちろん、もうすでにFontPathにこのディレクトリが指定されている。
書き込んで以降、もじらを起動すると、フォントのアンチエイリアスが可能となる。

メニューバー → 編集(E) → 設定(E)...

を選択し、設定ダイアログをあげる。

設定ダイアログ内のカテゴリから「表示」をダブルクリック → カテゴリの「フォント」をクリックする

とフォント変更ができるようになる。

東風フォントの場合では

Take-kochi gothic-jisx0208.1990-0
Take-kochi mincho-jisx0208.1990-0

のような、フォントが選択できるようになっている。
この最初の一文字が大文字のフォント「アンチエイリアス可」を表しているらしいのだ。 これらのフォントをいつも通り選択してやればよい。 実に楽々だ。

追記(8.Jan 2003)
もじらでフォントにアンチエイリアスをかけると、 フォントを太字にしたり斜体にしたりしても反映されない。
しかしアンチエイリアスをかけないようなフォントを選ぶと、 ちゃんと太字や斜体がちゃんと選択され、表示されたりする。
TrueTypeフォントと同じディレクトリにある fonts.dir の書き方がおかしいのか。
はたまた、これがもじらの限界なのだろうか。
情報求む。

追記(17.Jan 2003)
もじらで、東風フォントにアンチエイリアスをかけずに使用したとき、 全角文字は太字・斜体を表現できるのだが、半角(アスキー)文字は太字・斜体にならない。
しかし、なぜか fonts.dir を以下のように書き換えたらそれなりにうまくいった。
この fonts.dir は東風フォント+和田研フォント+渡辺明朝フォントのフォントデータといっしょに /usr/X11R6/lib/X11/fonts/truetype_jp/ の中に置いてある。
書き換えたら xset fp rehash コマンドでも打てばすぐに反映されるかも。

36
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-c-0-iso8859-1
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-p-0-jisx0208.1983-0
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-p-0-iso8859-1
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-m-0-jisx0208.1983-0
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-m-0-iso8859-1
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-c-0-iso8859-1
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-p-0-jisx0208.1983-0
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-p-0-iso8859-1
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-m-0-jisx0208.1983-0
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-m-0-iso8859-1
kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-c-0-jisx0208.1983-0
eb=y:kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ai=.2:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ds=y:ai=.2:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-p-0-jisx0201.1976-0
bw=0.5:kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-c-0-iso8859-1
kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-c-0-jisx0208.1983-0
eb=y:kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ai=.2:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ds=y:ai=.2:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-p-0-jisx0201.1976-0
bw=0.5:kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-c-0-iso8859-1

東風フォントの中でも、半角文字の jisx0201.1976 をプロポーショナルフォントとして名付ける感じ(?
上の例の東風フォント(明朝・ゴシック)の jisx0201.1976 のとこだけ p とし、他は c (等倍たっけ?)になってしまった。 全角文字の jisx0208.1983 のほうも p としてもよいが、表示がすごく遅くなってしまった。
ああ、アンチエイリアスのかかったきれいなフォントを使いたいなあ。

なお、そもそも xfontsel で東風フォントを表示させたときに pxlsz のところの選択肢が * と 0 と 17 の3つしかなかった、ということが判明。
学校(そらりす2.6)のモリサワフォントを xfontsel で見てきたところ、pxlszのところの選択肢が多くて、下は 2 、上は 48 くらいまで選べるではないか。 この問題には xserver やらが関わってきてとってもめんどそう。
→xttp://search.luky.org/vine-users.3/msg04150.html(参照)
xfontselの pxlsz選択肢 が全部選択可能でない限りは、アンチエイリアスどころではないのかもしれない。
ヽ(`Д´)ノウワーン

Debian GNU/Linux, bashシェルスクリプトでファイル名の一括変更

 ファイルをまとめてリネームするためのシェルスクリプトpowercp(in bash) 

2002-11-28版

既存のファイル file に対して mv file hogefile を実行するのみ。 ワイルドカードを使うと、複数個のファイルをいっぺんにリネームできる。
ただ現行ファイル名の頭に文字列をくっつけるだけにすぎない。 まだあまり柔軟性はない。
しかし、リネーム+他のディレクトリへの移動の際には上のhogeのところを特に /home/username/hoge のように書けばいい(あまり便利ではないが)。

ソース

#!/bin/bash
for h in $*
do
  if [ ! -f "$h" ]; then
    echo '***以下のファイルは本当に存在しますか?'
    echo $h
    exit 1
  fi
done

for j in "$*"
do
  echo '***以下のファイルについて処理を行います'
  echo $j
done

echo ''
echo '***文字列を入れてください'
read i

echo ''
echo '***以下のコマンドを実行します'
for j in $@
do
  echo mv $j $i$j
done

echo ''
echo '***よろしいですか? (y/n)'
read k
if [ "$k" = "y" -o "$k" = "Y" ]; then
  for j in $@
  do
    mv -vi $j $i$j
  done
else
  echo '***中断します'
fi

実行例

$ powercp 0*.mpg
***以下のファイルについて処理を行います
01.mpg 02.mpg 03.mpg 04.mpg 05.mpg 06.mpg 07.mpg 08.mpg 09.mpg

***文字列を入れてください
2p_not_so_good

***以下のコマンドを実行します
mv 01.mpg 2p_not_so_good01.mpg
mv 02.mpg 2p_not_so_good02.mpg
mv 03.mpg 2p_not_so_good03.mpg
mv 04.mpg 2p_not_so_good04.mpg
mv 05.mpg 2p_not_so_good05.mpg
mv 06.mpg 2p_not_so_good06.mpg
mv 07.mpg 2p_not_so_good07.mpg
mv 08.mpg 2p_not_so_good08.mpg
mv 09.mpg 2p_not_so_good09.mpg

***よろしいですか? (y/n)
y
`01.mpg' -> `2p_not_so_good01.mpg'
`02.mpg' -> `2p_not_so_good02.mpg'
`03.mpg' -> `2p_not_so_good03.mpg'
`04.mpg' -> `2p_not_so_good04.mpg'
`05.mpg' -> `2p_not_so_good05.mpg'
`06.mpg' -> `2p_not_so_good06.mpg'
`07.mpg' -> `2p_not_so_good07.mpg'
`08.mpg' -> `2p_not_so_good08.mpg'
`09.mpg' -> `2p_not_so_good09.mpg'

Debian GNU/Linux, Win98, イーサネットによるホームLAN とインターネット

LANとADSLインターネット

ISDNからADSLに回線を変更することになった。 いままでは、ISDNターミナルアダプタAtermITX80DのITMUXなる機能を利用して2台のコンピュータを同時にインターネットに繋ぐようにしていた。 もちろん、回線変更に伴いISDNターミナルアダプタは使えなくなる。 何も手を打たなければ、2台のコンピュータが同時にインターネットに繋げなくなってしまう。

そこで、家のコンピュータでプライベートなネットワークを組むことにした。 インターネットに出るときは、そのネットワーク内にあるゲートウェイに問い合わせをするようにする。 ゲートウェイ役を、とりあえず『レンタルモデム(ルータタイプ)』に任せることにする。
このモデム(ルータタイプ)はHUB機能こそついてないものの、 DHCP、NAT、IPマスカレードなどなどの多彩な機能をもつ。 これらのモデムの機能はWebブラウザから設定することができ、本当にこれはモデムなのか?、と疑うほどの簡単さなのだ。
なおそのモデムはFLASHWAVE 2040 M1(富士通)である。
なお、上記にあげたモデム(FLASHWAVE 2040 M1)の取扱説明書を手に入れるのならここにいくとよいだろう。

LANの構成、ADSLの詳細をまとめてみたい。

  • プロトコルはPPPoE(PPP over Ethernet)だとプロバイダに言われた。
  • モデム(ルータタイプ)のIPマスカレード機能を使うことにする。
    プライベートネットワーク内のパソコンの代わりにモデム(ルータタイプ)がインターネットに繋ぐ。
    ゲートウェイとなってもらうのだ。
  • モデム(ルータタイプ)と3台のパソコンは、192.168.0.0/24(192.168.0.0/255.255.255.0)というプライベートなネットワーク内にいる。
  • ゲートウェイ=モデム(ルータタイプ)は192.168.0.1/24を名乗る。
  • WinMEを搭載したノートパソコンは192.168.0.2/24を名乗る。
  • Win98を搭載したデスクトップパソコンは192.168.0.3/24を名乗る。
  • Debian GNU/Linuxを搭載した筆者のパソコンは192.168.0.4を名乗る。
  • WinMEもWin98もDebianもネットワークの設定はほぼ同じである。
    ゲートウェイを192.168.0.1にするだけだ。

買い物に行く。
買ってくるのは、パソコン用のNICと、LANケーブル(必要本数)、そして、Ethernetハブ(1つ)だ。
まだレンタルモデムが家に郵送されていなくても、これだけあればとりあえずLANだけは楽しめる(?)はずだ。

NICのインストール on Debian
筆者が買ってきたのは、RealTek RTL8139というチップののったNICだった。 NIC基板上のチップのところにカニの絵が描かれていたので、これはおそらく世間一般に言われているカニさんチップであろう。

NICをPCIスロットに挿してもOSが勝手に自動認識してくれなかったNICを挿しただけでちゃんと動いたと言う人のカーネルは相当膨らんでいるのだろうな、と憂えてしまう瞬間である。 (負け惜しみ)
そんなわけで、デバイスを認識してくれないということはカーネルまわりをいじらないといけないのだろう。
カーネル2.2.17の

Network device support → Ethernet(10 or 100 Mbit) → RealTek 8129/8139(not 8019/8029!) support

を n から m へと設定を変える。

ドライバをモジュールとして扱うことで得られる利点は多い。
ドライバをカーネルに完全に組み込んでしまうとカーネルは肥大化する。 カーネルは物理メモリにロックされるので、ディスクにスワップアウトされない。 つまり肥大化した分だけRAMを圧迫しつづけるというのだ。

逆に、モジュールならば、別のチップのNICを扱うときにカーネルを再構築したり、再起動したりする必要はなくなる。 実際には、今カーネルに組み込んでいるモジュールをrmmodコマンドで消して、新たなモジュールをinsmodコマンドで組み込んでやればよい。 さらに、modprobeコマンドを使えばモジュールの依存関係までも考慮して組み込んでくれる。
さらに、NICを複数枚挿す際、各々のNICに対するドライバの指定方法も簡単になるのだ。

システム管理者というのはここまで深く考慮しなければならないらしい・・・。 嗚呼、大変だ・・・。

次に/etc/modules.confというファイル内に

alias eth0 rtl8139

の1行を付け加え、NICに対してモジュールを指定。 なお、同様にして2枚目のNICのeth1に対するモジュールの指定も可能である。

その後なぜかノリでカーネルを再構築する。 とはいえ、リブートをしたら、NICをeth0として認識してくれていた。 起動時のメッセージや、ifconfigコマンドの結果などからそれを確認できるはずだ。
今思えば、再構築までしなくてもよかったな。

なお、今回、Debianのバージョンを2.2から3.0へと上げてから初めてのカーネル再構築となった。 最初、make-kpkgでエラー(arch/i386-none/Makefile が見つからないよ、というエラーだった)が出て止まってしまったが、以下のようにしてなんとか乗り切った。

# cd /usr/src/kernel-source-2.2.17
# mkdir ./arch/i386-none
# echo '' > ./arch/i386-none/Makefile
# make-kpkg clean
# make-kpkg --revision Custom.1.000 kernel_image
# cd ../
# dpkg -i kernel-image-2.2.17_Custom.1.000_i386.deb

しかし、dpkgでカーネルパッケージをインストールする際も、カーネルのバージョン(make-kpkg kernel_image する際に --revision のあとに続けて書くことでバージョンをつけられる)を下手に動かすとALSAが文句を言い出すためこれまたインストールが止まってしまう。
バージョン番号を振り変えるだけでエラーってのもすごいが、
とりあえずALSAユーザは要注意(?)。
筆者の場合、カーネルのバージョンを1.00から動かせなくなってしまった。 今後は1.000、1.0000、1.00000.....のように 0 を増やして対応していこうかと思っている。

Debianのネットワーク設定(IP割り振り、ルーティングテーブル)
ifconfigコマンドでeth0というデバイスが認識されていればあとはもう楽だ。 このeth0というネットワークインターフェースに対して、IPアドレス、ネットマスクを振り、ゲートウェイがどこにあるのかを教えればよいのだ。
とりあえず手動でコマンドを打って設定を行う。 もちろん、このようなネットワーク設定を起動時に自動的に行わせる方法もあるが、それは後述する。

NICにIPアドレスを振るifconfigコマンドの最低限の使い方

デバイス(eth0など)の設定を見るなら

ifconfig デバイス

デバイスに特定のIPアドレスを振り、ネットマスクをかけた状態でインターフェースを使用できるようにするには

ifconfig デバイス IPアドレス broadcast ブロードキャストアドレス netmask ネットマスク up

のようにコマンドを打つとよい。
eth0に192.168.0.4/24を名乗ってもらうようにするには以下のように打つ。 upを指定しているため、このコマンドを打っただけでインターフェースが利用できるようになる。

# ifconfig eth0 192.168.0.4 broadcast 192.168.0.255 netmask 255.255.255.0 up

現在の設定を確認するには以下のように打ち、出力を眺めればよい。

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0A:79:04:E9:4F  
          inet addr:192.168.0.4  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:93531 errors:0 dropped:0 overruns:0 frame:0
          TX packets:72978 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:73196745 (69.8 MiB)  TX bytes:8174396 (7.7 MiB)
          Interrupt:11 Base address:0xec00

2行目の出力部分にインターフェースのIPアドレスなどが書かれている。
3行目はいくつかのフラグが見える。

  • UP:そのインターフェースが利用可能でパケットの送受信ができる状態であることを表す
  • BROADCAST:全てのブロードキャストを受信できる
  • RUNNING:このインターフェース用のドライバが動いている
  • MULTICAST:マルチキャストが可能
  • MTU:このインターフェースが出すパケットの最大バイト数(Maximum Transfer Unit)
  • Metric:優先度みたいなもの、よくわからん、同じ設定のものがあっても、この値の小さい方を優先的に使うらしいのだが・・・

そのほかにも、インターフェースから見えるネットワーク上の全てのトラフィックを受け入れることを表すPROMISCというフラグもある。 これが今、週刊B春で流行りの「ネットワークスニファ」機能につながるのだ。

ルーティングテーブルを作るrouteコマンド

ルーティングテーブルはパケットの処理方法を制御するのに役立つ。 パケットの宛先を参考にしてそれを次にどこへ飛ばすかを決めるのだ。
ルーティングテーブル自体はメモリ上にあるらしい。 確認するには以下のコマンドを打つといい。

# route -n

-n をつけると、IPアドレスの名前解決をさせないようにできる。

どのようなルーティング規則にするかを考えなければならない。 とはいえ、筆者の家のネットワーク構成がそれほど複雑ではないため、それほど難しくはない。

  1. 家庭内のネットワーク(192.168.0.0/24)にあるホストへパケットを飛ばす際はブロードキャスト(FF:FF:FF:FF:FF:FF)を使い、返事をしてきたホストに送る。 つまり、イーサネットをそのまま使うのだ。
  2. それ以外の宛先にパケットを送る際はゲートウェイ(デフォルトゲートウェイ)192.168.0.1/24に送り、代わりに届けてもらう。

という風にする。

ルーティングテーブルに経路を追加/削除するにはrouteコマンドを使う。

route add -net ネットワークアドレス netmask ネットマスク gw ゲートウェイ dev デバイス

デフォルトゲートウェイとして 192.168.0.1 を指定するには以下のようにした。

# route add -net 0.0.0.0 netmask 0.0.0.0 dev eth0 gw 192.168.0.1

これで、自ネットワーク以外の宛先へパケットを送る際には192.168.0.1に送るようになった。 ゲートウェイ(モデム ルータタイプ)側ではIPマスカレードにより、ローカルIPを伏せて代わりに通信をしてくれるので、パソコン側にこれ以上の設定をする必要はないはずだ。
最終的にルーティングテーブルは以下のようになった。

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0

そういえば、ループバックアドレスはどこへ行ってしまったんでしょうね?(ぉ

Winのネットワーク設定
Win系ではマニュアルをもとにCD-ROMからNICのドライバをインストールすれば楽だろう。 マイコンピュータを右クリックし、プロパティだかを選ぶと、パソコンのシステム画面が出たと思う。 その中の左から2番目のタブをクリックし、デバイスの接続状況を見る。 NICがうまくインストールされているかどうか(アイコンに?マークや×マークが付いていない)、さらにプロパティを開けてみて、そのNICデバイスに使用可能のチェックマークが入っているかを確認したい。
うまくインストールされていなければ、デバイスドライバの削除/再インストールをしなくてはならない。
使用可能のチェックマークが入っていなければチェックをいれなくてはならない。

ネットワークの設定はDebianと同じで、

  1. 家庭内のネットワーク(192.168.0.0/24)にあるホストへパケットを飛ばす際はブロードキャスト(FF:FF:FF:FF:FF:FF)を使い、返事をしてきたホストに送る。 つまり、イーサネットをそのまま使うのだ。
  2. それ以外の宛先にパケットを送る際はゲートウェイ(デフォルトゲートウェイ)192.168.0.1/24に送り、代わりに届けてもらう。

のようにすればいい。 唯一 異なるのは各々のホストパソコンに名乗らせるIPアドレスだけだろう。
手順はだいたい次のようになった

  1. コントロールパネルを開き、ネットワークをダブルクリック
  2. TCP/IP→(使っているNICの名前)を選択し、プロパティボタンをクリック
  3. IPアドレスタブを開け、「IPアドレスを指定」にチェックをし、割り振りたいIPアドレスを書きこむ
  4. ゲートウェイタブを開け、ゲートウェイのIPアドレス(192.168.0.1)を書きこみ、追加ボタンをクリック
  5. WinME機のみの設定
    DNS設定タブを開け、「DNSを使う」にチェックをし、ゲートウェイのアドレス(192.168.0.1)を書き込む。 ホスト名も(適当に)書かなければならない。
    WinMEでは、この設定がないと名前解決をちゃんとやってくれなかった。
  6. OKボタンを押して、ダイアログを全部閉じようとすると「再起動しますか」などと恐ろしいことを聞かれるので、言う通りにする

あとはコントロールパネル→ネットワークオプション→接続タブあたりに残っている、今まで使っていたISDNでの設定を消し、ダイアルしないでLANから繋がせるようにすればいい。

クリックマンセーである。

Ping打!
物理的にホスト同士をハブで繋いだら、 自ネットワークの全てのホスト(自分自身も含め)に向けpingを打ちあってみて、返事がちゃんと返ってくるか確かめよう。
pingコマンドはLinuxにもWinにも入っているはずだ。
もちろん、WindowsではMS-DOSプロンプトを使ってコマンドを打とう。 LinuxでもWinでも以下のようにpingの引数に宛先を指定すればいい。 Linux版では Ctrl-c を押して止めないと延々 ping を送出し続けるので気をつけよう。

# ping 192.168.0.1
# ping 192.168.0.2
# ping 192.168.0.3
# ping 192.168.0.4
# ping 192.168.0.255

自ネットワーク192.168.0.0/24内のホストに向けてpingを打っているのに、ゲートウェイを抜けて外に出てしまった、なんてことは絶対にないようにしたい。
自ネットワーク内で全ホスト同士がちゃんとpingを受け取り合うことができれば、次に外のインターネットワーク上のホストに向けて打ってみよう。

以下の例は www.google.com へ ping を打つときの例である。

# ping 216.239.33.101
# ping www.google.com

なお、traceroute(tracertコマンド)も有用だ。 これは経路の途中に通過したルータを表示してくれる。
こちらはWin用のものしか試したことはない。 Linux用もあるらしい。
Win用のtracertコマンドはpingコマンド同様に以下のようにして使う。

> tracert 216.239.33.101



ネットワークインターフェースの定義を起動時に自動的に行う方法。
/etc/network/interfaces というファイル内にネットワークインターフェースの設定をまとめて書いておくことができる。 /etc/init.d/networking が起動時に実行されれば、このファイルの設定を行ってくれる。
以下に例をあげる。

auto lo eth0                    #自動起動の定義
iface lo inet loopback          #loインターフェースにloopback127.0.0.1を定義
iface eth0 inet static          #eth0インターフェースに
        address 192.168.0.4     #  静的なIPアドレスを定義
        network 192.168.0.0     #  ネットワークアドレスを定義
        broadcast 192.168.0.255 #  ブロードキャストアドレスを定義
        netmask 255.255.255.0   #  ネットマスクを定義
        gateway 192.168.0.1     #  ゲートウェイのアドレスを定義

もしスイッチングハブではなく、ダムハブ(バカハブ)を買っていれば、家庭内でネットワークスニファ(監視)ができた。 今思うと残念でならない。
ちなみに最近、週K文春で「ねっとわーくすにふぁ怖イヨ怖イヨ怖イヨプぷらいべーとナめーるモうぇぶモミーンナ丸見エダヨヽ(`Д´)ノウワーン」みたいに(なんと11/7から2週連続で)掲載していた。
ある意味、「パケットなんだから、見えて当り前」だ、と納得。 全く見えなかったら相手に届かないしね☆

参考文献
Linuxルータの導入とネットワークの設計
トニー・マンシル著
河村政雄訳
ピアソンエデュケーション出版

整然と設置されていると第三者が触ったりいじってみようという気を起こしづらいので、ルータは整然と設置すべきだ とまで書いてあるシステム管理者向けの面白い本。 システム管理者って大変だ。
学校図書室で発見。N教授の本のそばにあった。(ワラ

Debian GNU/Linux, WindowMaker をよりよく使うためのユーザ設定

WindowMakerを使いこなしたい

WindowMaker(以下wmakerと略すかも)はXウィンドウマネージャの一種である。 ここではwmakerの「見た目」を追求していく上でのポイントを述べるだけにする。 筆者がdebパッケージ生活をしているためwmakerのインストールからの話が書けないだけであることをお詫びしておく。
筆者の使用しているのはversion0.80、その前は0.6X系であったと思われる。

日本語を使うためにしたこと
~/GNUstep/Defaultディレクトリ内にwmakerの設定のためのファイル群がある。

WMGLOBAL, WMRootMenu, WMState, WMWindowAttributes, WindowMaker

これらがあると思う。

WMGLOBAL

WMGLOBALの中身は

{
  MultiByteText = YES;
  SystemFont = "-*-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-*-medium-r-no
rmal-*-%d-*,-misc-fixed-medium-r-normal-*-%d-*-jisx0208.1983-*";
  BoldSystemFont = "-*-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*,-*-*-medium-r-
normal-*-%d-*,-misc-fixed-medium-r-normal-*-%d-*-jisx0208.1983-*";
}

のようになっている。 MultiByteTextをYESにすることにより日本語のような2バイト文字をタイトルバーやメニューに使用するのが許可されるのだ。
なおSystemFontやBoldSystemFontはいまいちよく分からない。 だが、これらのフォントが「アイコンやドックの設定ウィンドウ内のフォント」「WPrefsの表示に使われるフォント」「ポップアップバルーン内のフォント」として使われている。 WPrefsでは大きめ(16ポイントくらい)の日本語フォントを使うと設定ウィンドウ内の日本語文が切れてしまい(文字の表示領域をはみ出してしまうみたい?)悲しいことになるのでご注意を。

※WprefsはwmakerのためのGUI設定ソフト

WMRootMenu

次にWMRootMenuの中身はだいたいこうである

"/home/my_login_name/GNUstep/Library/WindowMaker/menu.ja"

menu.jaは日本向けのルートメニューの初期設定ファイルである。 筆者の環境では/etc/X11/WindowMakerなどに各国のユーザー向けのメニュー設定ファイルが詰まっている。 これを~/GNUstep/Library/WindowMaker/menu.jaとしてコピーした。 ただこの方法だと、手元にコピーしたmenu.jaをエディタで編集することによってルートメニューに新たな項目などを加えていく方法をとらざるをえない。 WPrefsによりGUIからメニューを編集するという方法もあるが筆者は試したことはない。

menu.jaの例はこちら。 筆者の普段使っているものをほぼそのまま載せた。 何かの参考になれば幸いである。

WMWindowAttributes

次はWMWindowAttributesだが、これはwmakerが自動で編集する類のものであるらしい。 これの手動編集を勧める輩は世の中にそう多くはないようで、筆者もこれに倣うことにしたい。 どのアプリケーションにどのアイコンを設定するか、タイトルバーなどをつけないアプリケーションはどれかなどの情報が記録されている。 例えばkinput2+canna使用時にモジラのウィンドウの下部分にくっつく[ あ ]ウィンドウ(名前を知らない)などは

  "mozilla-im-status.MozillaImStatus" = {
    NoResizebar = Yes;
    NoCloseButton = Yes;
    NoTitlebar = Yes;
    NoMiniaturizeButton = Yes;
    Unfocusable = Yes;
  };

のように記述されていた。
ちなみにその昔Netscape4.7を使っていた頃、 日本語入力をしようとC-oを押すと [ あ ]ウィンドウ(名前を知らない)とNetscape自身との フォーカスの取り合いが起こり入力が非常にしづらくなる、 という現象があったため/usr/share/WindowMaker/Defaults/WMWindowAttributesというファイルに以下のように書き足した(外側のカッコ{}の中にはいれてあげるわけだが・・)記憶がある。

Kinput2 = { 
  NoTitlebar = Yes; 
  NoResizebar = Yes; 
  NotClosable = Yes; 
  NotMiniaturizable = Yes; 
  KeepOnTop = Yes; 
  Omnipresent = Yes; 
  SkipWindowList = Yes; 
  NoHideOthers = Yes; 
  NoKeyBindings = Yes; 
  NoMouseBindings = Yes; 
  KeepInsideScreen = Yes; 
  NoAppIcon = Yes; 
  Unfocusable = Yes; 
  DontSaveSession = Yes; 
};

なにやら~/GNUstep/Default/WMWindowAttributesにも書き込む必要がある場合もあるらしい・・・。 ただ、これを記述してもフォーカスを取り合ってしまう場合があるらしい。
なんともはや・・・

WindowMaker

そしてWindowMakerというファイル。 これがタイトルバーにどの色を使うかどのフォントを使うか、背景はどうするか・・・などの「見ため」関する記述が連なっている。 何か「テーマ」を適用したあとはこのファイルが即座に書き換えられるらしく、 ダウンロードしてきたテーマを適用してみたが付属の背景が気に入らなかったといった場合にはこのファイルを編集するだけで背景だけを変えたりできるので(テーマの作者さんには悪いけれども)何かと便利だ。 テーマのデータファイル自体に影響はないのでおすすめかと・・・(何

日本語フォントを一括設定するwsetfontコマンド

ちまたでダウンロードできるテーマはたいていASCII文字に対する設定しかなされていない。 ただ、そう感じるのは日本人が2バイトのひらがなや漢字を普段つかうからであって、ASCII文字しか使用しない某国の連中にとってはそんな設定は不必要でありむしろ邪魔なのだ(ろう)。 よってダウンロードしてきたテーマを適用した途端タイトルバー、メニュー、アイコン、クリップetcのフォントが変わってしまうことがしばしばある。 日本語フォントの設定はないため、日本語フォントは解読不能なコードとなって表示されたりしてしまう。 (wmakerのversion0.80くらいともなると、日本語フォントを何とか表示しようとがんばってくれる、ビットマップフォントをモトにしているので、あまりきれいな文字にはならなくて悲しいのだが・・)
あらかじめ『タイトルバーはこのフォント、メニューのタイトルはこのフォント・・・』という感じで決めておき、テーマを変更した際などに文字が化けたときそれを呼び出すことができる。 筆者の場合~/GNUstep/Defaults/WMGLOBALと、/usr/share/WindowMaker/Defaults/WindowMakerという二つのファイルにフォント設定を書いた。
~/GNUstep/Defaults/WMGLOBALは上記にある通りである。 SystemFontBoldSystemFontはここで指定されているわけだ。

/usr/share/WindowMaker/Defaults/WindowMakerの中の一部を

WindowTitleFont =
"-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal-*-
14-*-*-*-*-*-jisx0208.1983-*";
MenuTitleFont =
"-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal-*-
14-*-*-*-*-*-jisx0208.1983-*";
MenuTextFont =
"-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal-
*-14-*-*-*-*-*-jisx0208.1983-*";
IconTitleFont =
"-*-helvetica-medium-r-normal-*-8-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal-*
-10-*-*-*-*-*-jisx0208.1983-*";
ClipTitleFont =
"-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal-*-
10-*-*-*-*-*-jisx0208.1983-*";
DisplayFont =
 "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal
-*-14-*-*-*-*-*-jisx0208.1983-*";

のように書きかえた(らしい)。←ずいぶんと昔のコトなので忘れ気味・・・
大抵名前を見れば分かると思うが

  • WindowTitleFont ではウィンドウのタイトルバーで使うフォントを指定、
  • MenuTitleFont ではメニューのタイトル部分で使うフォントを指定、
  • MenuTextFont ではメニューの各項目内で使うフォントを指定、
  • IconTitleFont ではアイコン(ウィンドウを最小化したときに表示される)上で使うフォントを指定、
  • ClipTitleFont ではクリップ(ダブルクリックするとランチャー?が出たり消えたりする、デフォルトでは画像ファイルをドロップすると背景に設定してくれたかな・・・、)上で使うフォントを指定、
  • DisplayFont ウィンドウの現在位置(+200, +621とか)などを表示するとき(ウィンドウを移動させるときなどに見られる)に使うフォントを指定する。
  • あとついでにLargeDisplayFontというのもあり、これはどうやらワークスペースの移動の際に今いるワークスペース名をテレビのテロップのように一時的に表示させる際に使用するフォントの指定だと思われる。
    たぶんこれも指定しないとテロップが化ける可能性があるので要設定だろう。

フォントは " で囲んだ中に , でASCII文字用のフォント名と日本語文字用のフォント名を区切って書くようだ。 前のバージョン(0.6系?)ではワイルドカードを書かずにフォント名に多用されるハイフンを続けて書くと、どうもうまくフォントをロードしてくれなかったような気がする。 皆様ご注意を・・・。

かくのごとくファイルを編集したら

$ wsetfont japanese

と打つことにより、設定したフォントが適用されるようになる。

じつは筆者は『テーマのデータファイル(styleというファイル)の中で全てのフォントを指定』しているため、wsetfont を全然使用していない・・・。 だからLargeDisplayFontを指定しなくても涼しい顔をしているわけだが・・・。

Debian GNU/Linux, PPxP オンデマンド接続 on kernel 2.2.x

PPxPオンデマンド on kernel2.2.x(スクリプト作成)

PPxPというのは、オンデマンド接続に対応している。 外に出ようとする通信があると、それを察知し、勝手に繋いでくれるという機能だ。 ちょうど「イソターネットエクスプローラを起動したら自動的にインターネットに繋いでくれて、M$Nのトップページを表示してくれるんだよ 便利だよね」というのとだいたい一緒だろう。

ところが、この便利な機能は、カーネル2.1.xの後半くらいからそれ以降のものではちょっと調子が悪いのである。 びっくりである。 ちなみに筆者のDebian BOX、カーネルのバージョンは2.2.17である。 ジャストミートした。 筆者は、懸賞などの抽選に洩れなかったことは今までに一度もないくせに、こういうのにはよく洩らさず当たる。 森永チョコボールのエンゼルマークに、人生のうちのすべてのツキを捧げているのだからしようがあるまい。
それはいいとして、この機能がどう調子が悪いのか述べよう。
オンデマンド(オートモード)をONにすると、インターネットに繋ごうとしても、プロバイダ外への通信ができなくなり、この症状はppxpdを切るまで(quitするまで)ずっと続く、というもの。 (公式ホームページの詳細情報
なお、公式ホームページにある「対処方法」にある通り

仮アドレスとして127.0.0.xを使わない。 例えば、一度手動で接続し、その時のIPアドレスを仮アドレスとしてIP.LOCALに設定する。

という方法を用いると確かにうまくいくのだ。 具体的には

  1. 手動で接続する
  2. そのときのIPアドレスを/sbin/ifconfigや、ターム上でppxpのプロンプト(ppxp>)を出し、printと打って変数IP.LOCALに入っている値を見る
  3. 切断する
  4. ターム上でppxpのプロンプト(ppxp>)を出し、変数IP.LOCALにさきほど調べたIPアドレスを代入する(set IP.LOCAL xxx.xxx.xxx.xxxのようにすればよいだろう)
  5. オートモードをONにする
  6. オンデマンド準備完了、また繋ぐ

.............面倒だ。 筆者は面倒なことは好きではないのだ。

PPxPには「接続確立時と切断時にスクリプトを実行する」ことができるという機能がある。 人によっては「インターネットに繋いだときにニュースグループからニュースを取ってくるようにした」とか「インターネットに繋いだときに日本の時計サーバーに繋いでPCの時計と同期させる」といった使い方をしている。 たしかにこれは便利な機能かもしれない。 筆者は今までこの機能をずっと眠らせていた。 PPxPオンデマンド接続機能を実現するにはこれを利用しない手はない。

どうやってスクリプトを扱うのか。 主にユーザ権限でこの機能を利用する場合を紹介する。

実行させたいスクリプトは、~/.ppxp/rc/に置いておく。 筆者は~/.ppxp/rc/ondemand.rcというスクリプトを書いた。 書いたスクリプトはchmodコマンドで実行形式にすることを忘れないようにしよう。

次に~/.ppxp/ip/にテキスト形式のファイルをつくる。 筆者は~/.ppxp/ip/reconnectというファイルを作った。 これのほかに、~/.ppxp/ip/というディレクトリが無かったのでmkdirで作ったりもした。

最後に~/.ppxp/conf/fooなどのppxpでプロバイダなどへ繋ぐ際の設定が書かれたファイル内を編集する。

スクリプト~/.ppxp/rc/ondemand.rcは以下のようにした。 # 筆者は家じゃbash関白である(謎

#!/bin/sh
export PATH="/usr/bin:/bin:/sbin:/usr/sbin"

case "$1" in
    up)
 case "$PPXP_PHASE" in
     Dead)
  ;;
         *)
  ONDEMAND1=`ppxp foo -C show mode`
  case `echo $ONDEMAND1 | grep AUTO` in
      "")
          ONDEMAND2=`ppxp foo -C print IP.LOCAL`
   ONDEMAND3=`expr "$ONDEMAND2" : "IP.LOCAL=\(.*\)"`
   ppxp foo -C disconnect
   ppxp foo -C disconnect
   ppxp foo -C set IP.LOCAL "$ONDEMAND3"
   ppxp foo -C auto on
   ppxp foo -C connect
      ;;
  esac
      ;;
 esac
 ;;
    down)
 ;;
esac

もしPPxPで接続(手動)したら、そのときの変数IP.LOCALの値(IPアドレス)をとっておく。
そうしたら切断する。 切断のためのコマンドが連続して2つあるのは、すぐに切断したいからである。
切断すると、変数IP.LOCALは最初の127.0.0.1/0.0.0.0という値に戻ってしまう。 よって、変数IP.LOCALにさきほどとっておいたIPアドレスを代入する。
代入してからオートモードをONにする。
また接続する。
するとまたこのスクリプトを実行することになる。
現在のモードがオートモードかどうかをチェックし、オートモードならスクリプトではなにも実行させずに終えるようにする。
これでオンデマンド接続を行える状態になる。

ただ単に「自動でオンデマンド接続OK状態に持っていかせる」だけだが意外に苦労した。 今までスクリプトはほとんどやったことがなかったので、何度もスクリプトをループさせてしまったりした。 接続させるたびにスクリプト内の切断コマンド、接続コマンドを実行してしまうので、繋いだり切ったりをえんえんと繰り返すのである。
とても面白い光景だったが、それでは人を楽しませること以外なんの役に立たないので改良を重ねた。

ファイル~/.ppxp/ip/reconnect
このファイルは以下のようになっている。

start ondemand

これだけ、1行だけ。 ondemandというのは、上記のondemand.rcのことだ。 拡張子は書かないのだ。
もっとその他のスクリプトを~/.ppxp/rc/に作り、それも実行したいのなら

start ondemand
start foo
start fooo
start foooo

のように書けばいい。
なお、スクリプトondemand.rc、foo.rc、fooo.rc、foooo.rcは~/.ppxp/rc//etc/ppxp/rc/などに置く。

設定ファイル~/.ppxp/conf/foo
これは普段PPxPでプロバイダにつないでいるときに使っているものを利用すればいい。 以下は筆者が普段使っているもの(修正あり)である。

source qdial
set MODE active
set AUTH.PASSWD foo
set LOG.FILE foo.log
set LINE /dev/ttyS0
set DIAL.TYPE Isdn
set DIAL.LIST 0123456789PA/10
set AUTH.PROTO PAP
set SERIAL.MODEM aterm
set IDLE.INIT 0
set IP.VJ yes
set IP.RESOLV yes
set IP.DNS xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
set Initialize "ATH0E1Q0V1X3$N9=10$N1=1&D0&C1"
set IP.START reconnect    # ここでスクリプトを指定している

最後の1行だけ加える。 変数IP.STARTにセットされたものをPPxP起動時に実行する。 同様にして変数IP.STOPをつかえばPPxP終了時に行いたいスクリプトの指定ができる。

お願いとか
こんな強引な方法ではなくもっといい方法があるぞという方は、掲示板もしくはメールでよろしくお願いします。
#はじめてのスクリプトなものでして....(^^;

Debian GNU/Linux, Windows98 も インストール

そういやデュアルブートしました

最近PCをあまりいじっていない、 かと思っていたが、そういえばこのあいだマルチブート(DOS/V)に挑戦したので 少しだけ記しておこう。 筆者が行ったのはLILOを用いたLinuxとWindows98の同居であった。

ハードディスク構成はもともと、次のようであった。

0        10        20       30        40 (GB)
|--Linux--|------------FREE------------|

40GBのハードディスクの後半の3分の1はガラ空きなのだ。 もったいないこと限りないので、残りの領域には窓の98にでも入ってもらうことにした。

普通、マルチブートをする際は、ハードディスクの一番最初の基本領域を窓のCドライブとして使うのがいいとされている。 あと、ペンギンと窓のデュアルブートをする際などは、「窓を先にインストールしておく」のが望ましいとされている。
そう、それはいきなりの苦境(w)だった。 筆者の環境では、一番最初の拡張領域はLinuxに使われている。 もちろん、Linux BOX に窓を入れなくてはならない。
debianをインストールしたころはこのようなマルチブートの知識は皆無だった。 後悔である。
気を取りなおして、パーティションの構成を見ていこう。

+-------------------------------------+
|  +-------------------------------+  |
|  |          Linux ext2           |  |
|  |              /                |  |
|  |          (/dev/hda1)          |  |
|  |            1.5GB              |  |
|  |           Primary             |  |
|  +-------------------------------+  |
|                                     |
|  +-------------------------------+  |
|  |  +-------------------------+  |  |
|  |  |      Linux ext2         |  |  |
|  |  |          /usr           |  |  |
|  |  |      (/dev/hda5)        |  |  |
|  |  |           3GB           |  |  |
|  |  |         Logical         |  |  |
|  |  +-------------------------+  |  |
|  |                               |  |
|  |  +-------------------------+  |  |
|  |  |       Linux ext2        |  |  |
|  |  |           /var          |  |  |
|  |  |       (/dev/hda6)       |  |  |
|  |  |          3.25GB         |  |  |
|  |  |         Logical         |  |  |
|  |  +-------------------------+  |  |
|  |                               |  |
|  |  +-------------------------+  |  |
|  |  |       Linux ext2        |  |  |
|  |  |          /home          |  |  |
|  |  |       (/dev/hda7)       |  |  |
|  |  |         1.75GB          |  |  |
|  |  |         Logical         |  |  |
|  |  +-------------------------+  |  |
|  |                               |  |
|  |  +-------------------------+  |  |
|  |  |        Linux swap       |  |  |
|  |  |          swap           |  |  |
|  |  |       (/dev/hda8)       |  |  |
|  |  |          0.5GB          |  |  |
|  |  |         Logical         |  |  |
|  |  +-------------------------+  |  |
|  +-------------------------------+  |
|                                     |
|  +-------------------------------+  |
|  |            FAT32              |  |
|  |          Win98 C:             |  |
|  |         (/dev/hda3)           |  |
|  |             3GB               |  |
|  |   Primary Bootable(Active)    |  |
|  +-------------------------------+  |
|                                     |
|  +-------------------------------+  |
|  |            FAT32              |  |
|  |           Win98 D:            |  |
|  |         (/dev/hda4)           |  |
|  |          残り全部GB           |  |
|  |            Primary            |  |
|  +-------------------------------+  |
+-------------------------------------+

のようにしようということにした。
4つしか作ることの許されていない基本領域を2つも窓に捧げるとは、窓に優遇しすぎである。

窓98のインストールを始める前にすること
ベタだが、「バックアップは取ろう」とかそんな話だろう。 筆者はもちろんとらなかったが.....。
筆者が思うに、バックアップに匹敵する程大事なことがある。 それはLinuxを起動させるための手段を用意しておくことである。 悪名高き「HDのMBRを窓起動専用に上書きされてしまうトラップ」に対抗するためである。 もし仮にWindowsのインストールに成功してしまえばハードディスクからはWindowsしか起動できなくなる。 このとき、Linuxの起動フロッピーがなければもう二度とLinuxを起動できなくなるかもしれないのである。 (ぇ?loadlin.exe使うって?それは失礼しました)
Linux起動用フロッピーをもう既に持っている人もあろうかと思う。 これは直接カーネルにアクセスするものである。 できればWin98も一緒に起動できるようなフロッピーができたら嬉しい。 これを叶えるには、LILOをフロッピーにインストールするのがよいと思う。
筆者の環境では、/etc/lilo.confがliloの設定となる。 rootで以下のようにファイルを書き換え、/sbin/lilo -vを実行した。

  lba32
# boot=/dev/hda    # MBRにLILOをインストールせよ、という意味
  boot=/dev/fd0    # フロッピーにLILOをインストールせよ、という意味
  root=/dev/hda1
  install=/boot/boot.b
  map=/boot/map
  delay=20
  vga=normal
  default=Linux

  image=/vmlinuz
        label=Linux
        read-only
  image=/vmlinuz.old
        label=LinuxOLD
        read-only
        optional
  other=/dev/hda3
        label=win
        table=/dev/hda

これにより、フロッピーディスクをドライブに入れたままPCを起動すると、LILOが上がるようになる。 2秒待つと勝手にlinuxが上がり、シフトを押してLILOのboot:プロンプトを出して"win"と打てばwindowsが起動するという次第である。

窓98のインストールを始めることにする。 窓98のインストールディスクはあるのだが、これを読むためのフロッピーディスクがないので作ることにする。 窓98のインストーラ起動のためのディスクを作る際のポイントはCD-ROMを扱えるようにすることのようである。
Win98起動用フロッピーディスクは通常2枚要るのだが、これは1枚で済むのがよい。 (ただ、要らないファイルを消すだけだが.....) まず、だれかからWin98マシンを借り、「コントロールパネル」の「アプリケーションの追加と削除」からフロッピーディスクを起動専用でフォーマット。 (マイコンピュータ→Cドライブ→右クリック・フォーマットで「起動専用」フォーマットをしても失敗した) フォーマット完了後にフロッピー内の要らないファイルを消し、必要なファイルをWin98マシンからコピーする。 とりあえず必要なファイルを記す。

ank16.fnt     biling.sys    config.sys    format.com   jfont.sys    mscdex.exe
ank19.fnt     btcdrom.sys   drvspace.bin  himem.sys    jkeyb.sys    msdos.sys
command.com   edit.exe      io.sys        jkeybrd.sys  oakcdrom.sys
autoexec.bat  fdisk.exe     jdisp.sys     kanji16.fnt

ただし、autoexec.batとconfig.sysは自分で編集をしたもの、oakcdrom.sysはWin98マシンのCD-ROMドライブのドライバである。 お使いのCD-ROMドライブのドライバを使用することをすすめる。 ただ、CD-ROMドライブの仕様に各社大差がありそうもないので、案外他社のドライバでも動いたりしてしまう。

次に、実際に用いたautoexec.batとconfig.sysの中身を紹介。

autoexec.batの中身

  @echo off
  LH MSCDEX.EXE /D:MSCD001 /L:Q

config.sysの中身

  FILES=60
  BUFFERS=20
  DOS=HIGH,UMB
  LASTDRIVE=Z
  SHELL=A:\COMMAND.COM
  DEVICE=HIMEM.SYS
  DEVICEHIGH=BILING.SYS
  DEVICEHIGH=JFONT.SYS /MSG=OFF
  DEVICEHIGH=JDISP.SYS /HS=LC
  DEVICEHIGH=JKEYB.SYS
  DEVICEHIGH=OAKCDROM.SYS /D:MSCD001
  REM DEVICE=BTCDROM.SYS /D:CDROM001

autoexec.batでは、CD-ROMをQドライブとしてアクセスするように書いた。
config.sysでは、DEVICEHIGH=OAKCDROM.SYS /D:MSCD001のように書いてCD-ROMドライバを指定している。 なお、REMで始まる行はいわゆる「コメントアウトされる」のと同じ状態になる。 よって、最後の行はコメントアウトされているわけである。
最後に言うのも何だが、このファイルの文字コードはShift-jisにしよう。

起動フロッピーができたら、ドライブに挿してPCを起動する。 フロッピー内に必要ファイルがあり、上記2つのファイルが適切に書かれているようなら

Starting Windows 98 ....

などと表示され、command.comが動き出す。 ただ言っておくが、ここでWindows 98が本当に起動したわけではない。 善良なユーザはこのメッセージにだまされないようにしたい。 ちなみに、ここでうまく"Windows 98"があがらず

PRESS A KEY TO REBOOT

といわれてしまい止まってしまう場合は、今度からSHIFTキーを押しながらPCをブートするとうまくいく場合があるようである。

さて、うまくWindows 98が起動したら、以下のようなプロンプトが出ているに違いない。 autoexecを実行しているのは、こうしないとCD-ROMドライブを認識してくれないからである。 うまく認識しないとき(以下の例の場合ではQドライブへ移動できない場合など)はこのautoexecを実行してみるといいかもしれない。

A:\> fdisk
A:\> format D:
A:\> format C:
A:\> autoexec
A:\> Q:
Q:\> setup

fdiskでパーティションを整え、ドライブのフォーマットを行い、CD-ROM上のsetup.exeを実行するのが基本的なセットアップ方だろう。 窓98のfdiskは機能があまりよくなく、ドライブDを複数の論理ドライブとして切ることを許さなかった。 なお、setupにいろいろな引数を付けて実行することもできる。 どんな引数があるのか見るには普通にQ:\> setup /?でよい。 とりあえずこれで、Win98のインストールが開始する。

インストールが終わったら、窓起動専用に書き換えられてしまった哀れなMBRを救済しよう。 Linuxの起動ディスクや、LILOをインストールした起動ディスクなどを用いてLinuxを起動させる。 lilo.confを書き換え、LILOをMBRにインストールしてしまえば、MBRからLinuxもWindowsも起動できるようになる。

おまけ情報1
筆者の環境では、ドライブDが正常に扱えないという悲しい自体に陥った。 LBAの設定がダメなんだよゴルァ、とWindowsから言われてしまったので、 マザーボードにくっついてきた「PertitionMagic6.0」を使用してみた。 なんとかD:にアクセスできるようにはなったが、いまだ恐ろしくてドライブDはあまり使用していない。 Win98に3GBしか使っていないのはちょっと恥ずかしい。

おまけ情報2
なぜCドライブだけbootableのフラグが上がっているのだろう。 筆者もすこし再考してしまった。
Windowsの起動ディスクを用いてWindowsを起動したいときに、Windowsのインストールされたパーティションを発見させるためだったと思う。 DOS/V自体が窓のために作られたハードであったことの名残であろう。 Windowsのブートでは、最初に見つけた「bootフラグのついているパーティション(Active)」をWindowsのインストールされたパーティションだと頭ごなしに決めつけてしまう。 (だからwin9x同士の同居もしづらいんでしょうね、NTローダとかいうのはもうちょっと高機能らしいのだが....)
それからWindows9xのfdiskであるが、これは2つ以上の論理領域がつくれないとかいう噂を聞いた。
┐(´ー`)┌これだからげいつOSは.....、と思ったものの、Linuxのcfdiskでもできなかった.......。 linuxのfdiskはどうだろうか、今度試そうと思っている。