戻る

Linux関連メモ

Gmailの送受信 (2006-12-21)
undefined reference to `stat'対策 (2006-03-17)
ループデバイスの追加 (2006-03-17)
JAVA開発環境の構築 (2006-03-08)
セルフ開発環境(dev-img1.6) tmake.confの設定 (2006-02-15)
セルフ開発環境(dev-img1.6) (2006-02-15)
洋ぽんで通信通信してみる (2005-12-03)
スクリーンセーバとQCopコマンドの実行 (2005-10-01)
rootによるQCopコマンドの実行(atd下での動作) (2005-10-01)
セルフ開発環境(dev-img1.3) チュートリアル (2005-09-01)
セルフ開発環境(dev-img1.3) (2005-09-01)
セルフ開発環境(zgcc34) (2005-09-01)
アプリに必要なライブラリを知る方法 (2005-08-24)
ext領域を作る (2005-08-24)
Qtopiaを抜ける方法 (2005-08-24)
LAN経由でファイル共有 その2 (2005-08-24)
LAN経由でファイル共有 (2005-08-24)
USBメモリのパーティションの作成し直し (2005-08-24)
USBホスト機能 (2005-08-24)
指定時間にコマンドを実行させる (2005-08-24)
IMkit-Anthyの辞書登録 つづき (2005-08-24)
IMkit-Anthyの辞書登録 (2005-08-24)

Gmailの送受信

Gmailの大容量をアーカイブとして活用すべく、ザウルスの標準メールで送受信が可能なるように設定。
Gmailのpop/smtpはSSLが必要になりますが、その辺は参考サイトを参考にstoneを使用して設定。なおGmail側は予めpop/smtpが可能な設定にしておきます(これに気がつかずにハマリました(^^ゞ)
参考サイト:http://azek.air-nifty.com/pdalabs/2005/01/zaurusgmail_.html
$ stone pop.gmail.com:995/ssl localhost:1025 
$ stone smtp.gmail.com:465/ssl localhost:1026 
このコマンドはネット接続状態で実行しないと失敗するみたいです、KeyHelperやNetHelperにスクリプトを登録しておけばOKですね。

本家サイトで公開しているザウルス用stoneはOpenSSL0.9.7を必要とします。自分の使用しているOpenSSLはdipusさんトコの0.9.8でw3m等でも使用しているので、こっちを使用するようにstoneをコンパイル。ちなみに2006/10現在のstoneのバージョンは2.3cです。
本家サイトのCVS レボジトリからtarballをゲットしてきてDebian上に展開、参照するOpenSSL0.9.8は以前Rubyのコンパイルで作ったのでそれを利用、Makefileを適当に書き換え

CFLAGS=		-static-libgcc # -Wall -g

SSL=		/home/zaurus/ipkg/openssl-0.9.8b/opt/QtPalmtop   # 適当に修正
#SSL=		/usr/local/ssl

(中略)

zaurus-ssl:
	$(MAKE) CC="arm-linux-gcc" TARGET=zaurus ssl_stone
#	$(MAKE) CC="arm-linux-gcc" SSL_LIBS="-lssl -lcrypto" TARGET=zaurus ssl_stone
あとは、「make zaurus-ssl」を実行。
出来たバイナリをザウルスの/home/QtPalmtop/binに放り込んで実行してからメールの送受信テスト。うん、上手く行ってるようです。

undefined reference to `stat'対策

dev_img-1.6でコンパイルをしているとタイトルのようなエラーが出て先に進めないことがある。「stat」は「lstat」だったり「fstat」だったり。ググってみたところdev_img-1.3のころからあったようで、既に解決策があった。
ここの「dev_img1.3解決」を参考にSL-C3000に対策を行う。 これでエラーが出なくなった。
ちなみにlibc_nonshared.aを/usr/local/libに置いたのは、/usr/libに新規ファイルの追加ができなかった為。

ループデバイスの追加

squashfsやcramfsをマウントするときに使用される/dev/loop。
標準では/dev/loop0と/dev/loop1の2つしかないので追加を行う。
$ su
# mknod /dev/loop2 b 7 2       # loop2と最後の2は同じ数字、7まで可能?
# chmod 660 /dev/loop2
# chown root:operator /dev/loop2
なお、ザウルスを再起動すると追加した分は消滅してしまうみたいなので「洋ぽんで通信通信してみる」と同じ要領で/etc/rc.d/init.dの下にスクリプトを作成して、起動時に自動で追加させる必要あり。

JAVA開発環境の構築

JAVAセルフ開発環境を構築してみる。
実行環境
一応これでJ2ME PPのJAVAアプリの実行が可能なはず。
開発環境
btclasses.zipをいれなくなくてもjikes_1.1.6-2_arm.ipkにもライブラリ(libgcj.jar)があるけど、一応btclasses.zipに設定してみた。
コンパイル&実行
GUIアプリの作成
GUIを作るにはAWTというライブラリ?を使用してみるようだ。他にもSwingというのがあるみたいだけどザウルスの環境だと使えないみたい。全くわからないのあちこちググってボタンを押したイベントを取得するプログラムを作成。

サンプルTest.java.txt(日本語はUTF-8)


参考サイト:
-JavaTM 2 Platform Standard Edition 5.0 API 仕様
-とほほのJAVA入門
-Deep Side of Java〜Java 言語再入門


セルフ開発環境(dev-img1.6) tmake.confの設定

zten改など使用していて、compiler_setup.sh実行時の/usr/local/includeのシンボリックリンク作成が失敗していても、cのソースのmakeでのコンパイル時にパスを通す為にtmke.confを書き換えてみる。
なお同じ環境にてcのソースをコマンドラインから直接コンパイルする場合は無条件で/usr/local/inclueを見にいくようなので-Iオプションを指定する必要がある。

squashfsパッケージ内のtmake.confの書き換えができないので必要なファイルを書き換え可能な場所(/hdd3/)にコピーして試してみました。
これでprogen、tmakeを使用してMakefileを作成してmakeでコンパイルする様にすればcのソースもc++のソースもコンパイル出来そう。

セルフ開発環境(dev-img1.6)

Zaurus育成日記さんにてdev-img1.6が公開されているので入手。

洋ぽんに繋げて通信してみる

to_ri_sanさんのブログエントリを参考にさせていただき、その通りに設定したところSL-C3000でUSB経由の通信が問題なくできました。京ぽんのような自己責任モジュールは必要ありませんでした。

スクリーンセーバとQCopコマンドの実行

下の項目の続き
スクリーンセーバが起動していると、スクリプトに記述されたQCopコマンドが機能しない模様
そこでスクリーンセーバを切る以下のQCopコマンドを発行してみたのですが、SL-C3000では何故か機能しません。
停止
qcop QPE/System 'setScreenSaverMode(int)' 0
再開
qcop QPE/System 'setScreenSaverMode(int)' 3
もう一つのコマンド
停止
qcop QPE/System 'setScreenSaverIntervals(int,int,int)' 0 0 0
再開
qcop QPE/System 'setScreenSaverIntervals(int,int,int)' -1 -1 -1
を試したところ、こちらは機能しました。
atdに登録して処理を行う場合などは、この処理を行っておく必要がありそう。

rootによるQCopコマンドの実行(atd下での動作)

通常QCopコマンドを含むスクリプトをatd下で実行させる場合は、
#!/bin/sh
export QTDIR=/home/QtPalmtop
(略)
/home/QtPalmtop/bin/qcop ……
(略)
というScriptを用意して
# echo su zaurus -c Script | at yyyy.mm.dd-HH:MM:SS
という様にしてatdに登録しています。

次にスクリプトをroot権限で実行させる場合を考えてみます、通常root権限ではQCopは使用できないので環境変数LOGNAMEをrootに変えて行う必要があります。
そこでScriptの冒頭部に

export LOGNAME=root
を追加して
# echo Script | at yyyy.mm.dd-HH:MM:SS
の様にatdに登録してみました、結果は残念ながらQCopを実行しませんでした。どうやら実行するScriptにLOGNAMEを書いても有効にならない模様です。
次に/var/spool/at/以下に置くスクリプトに直接書いてみました。
#!/bin/sh
export LOGNAME=root
Script
以下略
これで実行したところrootのままでもQCopが機能しました。
結論としてはatd下でのrootによるQCopコマンドの実行はatコマンドによる自動登録ではなくて、直接/var/spool/at/以下にスクリプトを作成する必要があるということみたいです。具体的な方法は指定時間にコマンドを実行させるを参照のこと。

セルフ開発環境(dev-img1.3) チュートリアル

下のつづき
ブラウザで/mnt/dev/doc/index.htmlから“QT Library Referrence Manual”→“チュートリアル”と辿るとチュートリアルがあるので最初のサンプルをターミナル環境でコンパイルしてみる。
$ progen -o project
INCLUDEPATH	+= $(QPEDIR)/include \
		/mnt/dev/include \
		/mnt/dev/include/qt
TARGET		= t01
$ tmake -o Makefile project
$ make
$ ./t01


デザインをザウルス用のものに変更してみる。t01.cppを以下の様に修正した後、コンパイル、実行
#include <qpe/qpeapplication.h>            ←修正
#include <qpushbutton.h>
int main( int argc, char **argv )
{
    QPEApplication a( argc, argv );        ←修正
    QPushButton hello( "Hello world!", 0 );
    hello.resize( 200, 60 );               ←修正
    以下略



セルフ開発環境(dev-img1.3)

dev_imgを試してみる。こちらのページの下の方にあるdev-img.binを入手、これだとQTのアプリも作れるみたい。
設定
~/.bashrcに以下を追加
export PATH=$PATH:/mnt/dev/bin:/mnt/dev/tmake/bin
export TMAKEPATH=/mnt/dev/tmake/lib/qws/linux-sharp-g++
export TMP=/hdd3/tmp   ←適当に空いてるエリアを使用
念の為スワップを作成
dev_img.binをマウント、マウントポイントが/mnt/devであることに注意
初期設定を行う
gcc -vでバージョン表示すればOK
$ su
# mkdir /mnt/dev
# swapon /hdd3/swapfile
# mount -o loop -t cramfs /hdd3/dev-img.bin /mnt/dev
# cd /mnt/dev/bin
# ./compiler_setup.sh -r /mnt/dev
# exit
$ gcc -v
hello.cのコンパイル
単純にコンパイルしたらエラー、stdio.hが無いと怒られた。どうやらincludeディレクトリが設定されていないみたい。incldeディレクトリを明示的にコンパイルしたらOK。ついでにいうとdev-imgをアンマウントしてもhelloは動作しました。「-I」はエルでなくてアイ。
$ gcc -o hello -I/mnt/dev/include hello.c
追記(2005/12)
INCLUDE関連で問題が生じたのは/usr/local/includeが他のアプリのインストールで実体ディレクトリとして存在、リンクが作成されないための模様(未確認です)
りなざうテクノウさんのdev-img.bin パッケージ化群で同じ問題が発生しましたが、こちらはdev-2で対策されました。




hello.cppのコンパイル
こちらのサンプルプログラムをコンパイル。なおprogenやtmakeにはperlが必要なのでここからperlを入手。3つのソースファイルのあるディレクトリで以下を実行
$ progen -o hello.pro
$ tmake -o Makefile hello.pro
$ make
*.hが無いというエラー表示、Makefileの中をみるとINCPATHが$(QTDIR)/includeのみ、ちなみにQTDIR=/home/QtPalmtopです。以下の様にINCPATHに追加。
INCPATH = -I$(QTDIR)/include -I/mnt/dev/include -I/mnt/dev/include/qt
progenやtmakeで勝手に追加させるようにするにはどうすれば良いのだろう?
追記(2006/2)
tmake.confを修正すれば良さそうです。セルフ開発環境(dev-img1.6) tmake.confの設定を参照
念の為、make cleanしてから再度make、コンパイルできました!
./hello
で実行。これもdev-imgをアンマウントした環境でも動作しました。
ZEditorのコンパイル
Satoshi村さんより最新版のZEditorのソースzeditor3.4.1_src.tar.gzをダウンロード、展開して、コンパイルしてみる、zeditor.proが同梱されているので、これからtmakeでMakefileを作成。Includeのパスを追加してからmake。ちゃんとコンパイルできて、起動もできました。

セルフ開発環境(zgcc34)

ブログを巡っていたら橘さんの幾霜でzgcc34なるセルフ開発環境があるのを発見、試してみる。

こちらから、cramfs.img, env.sh,mount.sh, umount.shをダウンロード、cramfsがやたらとデカイです。デフォルトでCFに環境を構築するようになっていたのでダウンロードしたファイルは全てCFへ
マウントポイント、作業ディレクトリ、スワップファイル作成

$ su
# mkdir /usr/local/zgcc34
# cd /mnt/cf
# mkdir tmp
# dd if=/dev/zero of=./swap.img bs=1M count=32
# mkswap ./swap.img
# exit
$
env.shの2行目以下を/home/zaurus/.bashrcの最後に追加
ターミナルを起動しなおして、マウント
$ cd /mnt/cf
$ su
# ./mount.sh
# exit
$
マウントされたか確認、lsでarm-linux,binなどが見えればOK。ついでにgccの起動も確認、ずらずらと表示された最後にVersion3.4.4の文字
$ ls /usr/local/zcc34
$ gcc -v
お約束のHello.cをコンパイル
$ cat hello.c
#include 
int main()
{
   printf("hello world\n");
}
$ gcc -o hello hello.c
OK、環境をアンマウントする、~/.bashrcに追加した内容も削除
$ su
# /mnt/cf/umount.sh
# exit
$
ちなみにコンパイルしたファイルは、環境をアンマウントした状態では実行すると、ライブラリがないよ!って怒られました(^^; ファイルがでかいのは、X/Qt用のファイルとかも入っているからみたいですね、詳しいことは判りませんけど
(追記)作者さまより教えていただきました、-staticオプションをつけると開発環境がないでも実行できるようになります。
$ gcc -static -o hello hello.c
$ gcc -static-libgcc -o hello hello.c

アプリに必要なライブラリを知る方法

アプリケーションで必要とするライブラリを知る方法はlddというコマンドで知ることができます。lddコマンドはarmutils on QTに入っているそうです。dev-imgにも入ってました。
$ ldd ファイル名
また、“/lib/ld-linux.so.2 --list ファイル名”で同じようなことが出きるそうです。
とりあえず~/.bashrcに
alias lddd='/lib/ld-linux.so.2 --list'
としたら上手く行っているみたいです。

ext領域を作る

SL-C3000の本体ディスク(/hdd3)は大きな領域を持っていますが、FAT32でフォーマットされているためシンボリックリンクやパーミッションが使用できません。extフォーマットされたエリアを利用するには、/hdd3をフォーマットし直す、/hdd2の空き領域を使用するなどの方法があります。更にもう一つの選択肢として/hdd3上に仮のext領域を作成する方法があります。
考え方はスワップファイル作成と基本的に同じ、具体的には以下のとおり
$ cd /hdd3
$ dd if=/dev/zero of=./extfile bs=1M count=32    #32Mの領域の場合
$ mkfs.ext2 ./extfile
$ mkdir /home/zaurus/mnt    #マウントポイント
$ su
# mount -t ext2 -o loop /hdd3/extfile /home/zaurus/mnt
# exit
$ ls /home/zaurus/mnt       #確認してみる
lost+found
アンマウントは以下の手順で
$ su
# umount /home/zaurus/mnt
再起動で自動にマウントさせるには/etc/rc.d/rc5/にスクリプトを書くか、fstabに設定すれば良いと思う。

Qtopiaを抜ける方法

$ su
# init 2; chvt 1
Qtopia環境への復帰方法
# init 5
ただしノーマルカーネルだとQtopiaを抜けた状態ではコンソールは画面最下行しか使用できない。スペシャルカーネルでは問題なし。

LAN経由でファイル共有 その2

PC側の共有フォルダをザウルスからアクセスに行く方法。
りなざうテクノウさんより smbmountコマンドをダウンロードしてインストール
最初はSmbMounterというGUIのソフトもインストールして試してみたのですが上手く行きませんでした。調べてみたところこのソフトではザウルス側のマウントポイントに、本体ディスク/NetworkFolders/ホスト名/共有名を使用するのですが、これだと上手くいかない模様、SmbMounterがsmbmountコマンドに渡す引数を使用してターミナルで直接smbmountを実行してもNG、マウントポイントを本体ディスク/NetworkFoldersにしてみたところ上手くいきました。マウントポイントのフォルダ構成が深いとダメなのでしょうか、でもSL-C700ではちゃんと動作しているみたいですし不思議です。

マウント操作は具体的には
$ su
   マウント
# /usr/bin/smbmount //HostName/ShareFolder /home/zaurus/Documents/NetworkFolders -o guest,codepage=cp932,iocharset=utf8
   アンマウント
# /bin/umount /home/zaurus/Documents/NetworkFolders
Hostnameを接続するPC名、ShareFoldrを共有フォルダ名に置き換えます、マウントして本体ディスク/NetworkFoldersを開くと接続した共有フォルダの内容をみることができるようになります。

ターミナル操作は面倒なのKeyHelperに登録
[Menu]
01_smbmnt = @exec(TAB)/usr/bin/sudo /usr/bin/smbmount //HostName/ShareFolder /home/zaurus/Documents/NetworkFolders -o guest,codepage=cp932,iocharset=utf8
02_smbumnt = @exec(TAB)/usr/bin/sudo /bin/umount /home/zaurus/Documents/NetworkFolders
接続する先が複数ある場合には、qshdlgを使用してSmbMounterのようにメニューから接続先を選択してマウントするようにしたほうが便利かもしれません。

参考ページ:SmbMounter

LAN経由でファイル共有

データをPCからザウルスに送るのにいちいちUSBケーブルを接続するのは面倒なのでsambaを使用してLAN経由のファイル共有ができるようにしてみました。参考サイトはWalrus,Visit - Linuxザウルス/sambaです。
/usr/lib/samba/samba.confというファイルを編集して設定します。
workgroup = WGROUP
PCと同じワークグループ名を設定
hosts allow = 192.168. 127.0.0.1

interfaces = usbd0,wlan0,eth0
無線LAN(wlan0)と有線LAN(eth0)を使用するので、interfaces行に追加します。
また一応アクセス制限としてルータの内側(192.168.*.*)のみアクセス可能にする為、hosts allow行を追加します。
これでsambaコマンドを実行すれば起動/停止できますが、ターミナルから実行するのは面倒なので、KeyHelperのメニューランチャーに登録
[menu]
01_smbstart = @exec(TAB)/usr/bin/sudo /etc/rc.d/init.d/samba start
02_smbstop = @exec(TAB)/usr/bin/sudo /etc/rc.d/init.d/samba stop
Windows XPの場合、ランチャーメニューからsambaを起動して「マイネットワーク」-「ネットワーク全体」-「MicrosoftWindowsNetwork」-「ワークグループ名」を開くと「Samba 2.07-ja-2.2(Zaurus)」が見えるので、これをクリックして更にhomeフォルダをクリックすると内蔵HDD(InternalDisk)とSD_Cardがあるのでファイルのやり取りが可能になります。
試しに100MBのデータのPC→ザウルスの転送速度を測定してみました。
・USBストレージ	7.02Mbps
・有線LAN(10Base-T)	4.65Mbps	Planex CF-10T
・無線LAN(802.11b)	2.28Mbps	Planex GW-CF11H

USBメモリのパーティションの作成し直し

手持ちのUSBメモリを接続してみましたが、いくつかはそのままでは認識しませんでした。これらのUSBメモリはザウルスに入っているfdiskコマンドで以下の作業をすることで使用可能になりました。
注意:USBメモリ内のデータはなくなります。全てのUSBメモリがこの作業で認識する保証はありません。
$ su
# umount /mnt/usbmem	アンマウント操作(念の為)
或いは
# umount /hdd3/Documents/Photo_Files/usb


# fdisk /dev/sda

d 4		既存パーティション4情報削除
d 3		既存パーティション3情報削除
d 2		既存パーティション2情報削除
d 1		既存パーティション1情報削除
n p 1		新規パーティション
		プライマリパーティション
		ファーストパーティション
(Enter)		ファーストシリンダー(デフォルト)
(Enter)		エンドシリンダー(デフォルト)
t c		パーティションタイプ選択
		Win95 FAT32(LBA)を選択
p		パーティションテーブル確認
w		変更情報の書き込み

# mkdosfs -F32 /dev/sda1	フォーマット
# exit
$ exit

USBホスト機能

USBホストケーブルを購入したのでUSBメモリを繋げてみました。
塩田紳二のPDAレポート−SL-C3000のUSBホスト機能を使うの「実際の作業」に沿って作業をすると、ザウルスホーム画面の「ファイル」タブに「本体ディスク」「SDカード」等と一緒に「Storage /dev/sda1」が表示されてUSBメモリの内容にアクセスすることができるようになります。

自分の場合、以下のように変更しました。 /etc/hotplug/usb/usb-storage
#!/bin/sh
. /etc/hotplug/hotplug.functions
if [ ! -L /var/run/usb/%proc%bus%usb%* ]; then
  #mount -t vfat -o umask=000,noatime,iocharset=utf8,codepage=932 /dev/sda1 /mnt/usbmem
  mount -t vfat -o umask=000,noatime,iocharset=utf8,codepage=932 /dev/sda1 /hdd3/Documents/Photo_Files/usb
  if [ $? = 0 ]; then
    ln -s /etc/hotplug/usb/usb-storage.off $REMOVER
    mesg make REMOVER in $REMOVER
  fi
fi
/etc/hotplug/usb/usb-storage.off
#/bin/sh
. /etc/hotplug/hotplug.functions
#umount /mnt/usbmem
umount /hdd3/Documents/Photo_Files/usb
rmmod usb-storage
上の二つのスクリプトはchmod a+xで実行属性をつけること、chown root:rootもしておいた方が良いかもしれません。

アンマウント用にKeyHelper.confに以下を追加
[Menu]
01_USB_exit = @exec(TAB)/usr/bin/sudo /etc/hotplug/usb/usb-storage.off

指定時間にコマンドを実行させる

automailやQTアラムーチョのように指定時刻にコマンドを実行させる手段を調べてみた。
指定時刻に実行する機能はatdが行っているらしい、/var/spool/at/以下にファイル名「指定時刻(1970年からの秒数)」.「任意の拡張子?」のスクリプトファイルを登録するとatdがこれを監視していて実行させているらしい。
実際にどの様に登録を行うかというと以下の2通りの方法がある。

atコマンドによる登録
SL-C3000には登録用にatというコマンドが用意されている。使用方法は
$ su
# echo command | at 2005.03.10-21:34:00
のように実行させたいコマンドを時刻指定したatコマンドへパイプで接続させる。


シェルスクリプトによる登録
atコマンドによる登録では指定時間に1回の実行しかできない。一定間隔で実行させるためにはatコマンドと同等の役割を行うスクリプトを作成する必要がある。一例として/home/QtPalmtop/bin/at_regi.shを作成してみた。
#!/bin/sh

ATD=/home/QtPalmtop/bin/atd
ATSPOOL=/var/spool/at

case "$1" in
     -d)
	EXETIME=`date -d "$2" +%s`
	;;
     -s)
	EXETIME="$2"
	;;
      *)
	;;
esac

ATFILE=/var/spool/at/${EXETIME}.444
NEXTTIME=`expr $EXETIME + $3`

echo \#!/bin/sh > $ATFILE
echo rm \$0 >> $ATFILE
echo su zaurus -c \""$4"\" >> $ATFILE
echo export TZ=Asia/Tokyo >> $ATFILE
echo /home/QtPalmtop/bin/at_regi.sh -s "$NEXTTIME" "$3" \""$4"\" >> $ATFILE

chown root:qpe $ATFILE
chmod a+x $ATFILE
$ATD $ATSPOOL
使用方法は以下
$ su
# at_regi.sh -d yyyy.mm.dd-HH:MM:SS interval command
登録内容は以下のとおり(automailが作成する内容に準じた)
#!/bin/sh
rm $0
su zaurus -c "command"
export TZ=Asia/Tokyo
/home/QtPalmtop/bin/at_regi.sh -s $NEXTTIME interval "command"
このようにするとautomailとほぼ同じ機能を持たせることができる。automailでは登録ファイルの拡張子が.333固定のため複数のコマンド登録させる場合、実行時間が重ならないように注意をする必要があったが、このスクリプトでは拡張子を引数に追加すれば登録するコマンド各々で別の拡張子を持たせることも可能である為、そのような注意をしなくても良くなる。
あるいは実行回数を引数にして
$NEXTCNT=`expr $COUNT - 1`
if [ $NEXTCNT -eq 0]; then 〜
のようにすれば指定回数の実行も可能だと思う。

IMkit-Anthyの辞書登録 つづき

KeyHelperからスクリプトを実行させてIMkit-Anthyの辞書登録をさせてみる。「よみ」と「単語」はクリップボードを使って受け渡しをさせる。
クリップボードと標準入力/標準出力と連携させるqcfをここから入手、インストール。ここからperlとsudoを入手、インストール。

シェルスクリプト/home/zaurus/bin/anthy_rec.shを作成、chmod a+xを忘れずに、内容は以下
#!/bin/sh

OUTFILE=/home/zaurus/.anthy/private-dic.src
MEISI=/home/zaurus/.anthy/meisi_rec.src
NAMAE=/home/zaurus/.anthy/namae_rec.src
TIMEI=/home/zaurus/.anthy/timei_rec.src

qcf -w | perl -e '$_ = <>;s/(.+?) (.+)/\1 1 \2/;print $_."\n"' > $OUTFILE

case "$1" in
    meisi)
	cat $MEISI >> $OUTFILE
	;;
    namae)
	cat $NAMAE >> $OUTFILE
	;;
    timei)
	cat $TIMEI >> $OUTFILE
	;;
    *)
	;;
    esac

cat $OUTFILE | /home/QtPalmtop/bin/anthy-dic-tool --load
/home/zaurus/.anthy/以下にmeisi_rec.src,namae_rec.src,timei_rec.srcを作成、内容は名詞、人名、地名の登録フォーマットの2行目以下、副詞や形容詞は使用頻度が小さいと思うので今回はパス。下記は名詞の場合、文字はEUCで書くこと。
品詞 = 名詞
な接続 = y
さ接続 = y
する接続 = y
語幹のみで文節 = y
格助詞接続 = y
(空行)
qcfの行で登録フォーマットの1行目を作成している、具体的にはクリップボード上の「よみ(半角スペース)単語」を「よみ(半角スペース)1(半角スペース)単語」に変更して改行コードを付加している。sedあたりを使用してもっとシンプルにできそうな気がするけど使い方を知らないのでperlを使用、perlの文法もイマイチ怪しいけれで動いているから、まあいいか。
このスクリプトをkeyhelper.confのShift+全/半キーの入力モード選択のメニューに追加する。ただ追加するだけでは上手くいかないので、sudoを使用してユーザーzaurusで動作させる必要があるようだ。
[Menu01]
07_名詞登録= @exec(TAB)/usr/bin/sudo -u zaurus -s /home/zaurus/bin/anthy_rec.sh meisi
08_人名登録= @exec(TAB)/usr/bin/sudo -u zaurus -s /home/zaurus/bin/anthy_rec.sh namae
09_地名登録= @exec(TAB)/usr/bin/sudo -u zaurus -s /home/zaurus/bin/anthy_rec.sh timei
Menu01の日本語コードはUTF8で書くこと。

IMkit-Anthyの辞書登録

ここの解説どおりにprivate-dic.srcを作成、よくわからないので頻度は1、y/nは全てyとしてみる。下の例は名詞の場合(文字コードはEUC)
よみ 1 単語
品詞 = 名詞
な接続 = y
さ接続 = y
する接続 = y
語幹のみで文節 = y
格助詞接続 = y
(空行)
登録してみる
$ cat /home/zaurus/.anthy/private-dic.src | anthy-dic-tool --load
うん、ちゃんと候補に登場している、private-dic.srcを削除してダンプしてみる
$ anthy-dic-tool --dump > /home/zaurus/.anthy/private-dic.src
登録した候補は出力されている。これでマシン間の移植も問題なさそう。

最終更新日 2006-12-21