2008.06.03

[N810][Emacs]NOKIA N810向けEmacs23.0.60 with Xftパッケージ等

やへーさんがXftを有効にしたEmacs23.0.60をビルドしてくださったので、パッケージを作ってみました。

Emacs23onn81001

Emacs23onn81002

一応Launcherに登録されますが、タスクバーのところのアイコンがデフォルトのものになってしまいます。一度は設定できたんですけどね。

愛用のC/Migemoをビルドしてパッケージしました。migemoの動作に必要なapel10.7もパッケージにしました。

みんな大好きNavi2chもパッケージにしました。

ダウンロード

ダウンロード emacs23cvs080525-1armel.deb (37124.4K)

「apel-10.7-1.deb」をダウンロード

「cmigemo-1.3-1_armel.deb」をダウンロード

「navi2ch-cvs-20070510.deb」をダウンロード

インストール

まずはキーボードのカスタマイズをしないことには始まらないでしょう。

[N810]NOKIA N810用カスタマイズ済のキーマップをインストールするパッケージ

パッケージは普通にApplication managerからインストールできると思います。 ただし、Red pill modeにしておく必要があります。

107MBほど食います。容量が足りないでしょう。 「/usr/local/」以下にインストールされますので、内蔵のFlashをext2もしくはext3等にフォーマットして、シンボリックリンクで「local」以下を逃がすといいと思います。

e2fsprogsをインストールした後、やへーさんのご指導に基づき以下のような感じで内蔵2GBのFlashをext3にフォーマット。

# mkfs.ext3 -b 1024 -j -J size=32 /dev/mmcblk0p1

設定

「/usr/local/share/emacs/site-lisp/site-start.el」に最低限の設定をしていますが、余計なものも交じっているかもしれません。

画面が狭いのでメニュー等は全部表示しないようにしていますが、その辺りが気に入らなければ、「/usr/local/share/emacs/site-lisp/site-start.el」を参照の上.emacs.elで設定し直してください。

site-start.elの内容

(setq exec-path (append '("/usr/local/bin/") exec-path))

(set-language-environment 'Japanese)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq locale-coding-system 'utf-8)

(tool-bar-mode -1)
(menu-bar-mode -1)
(scroll-bar-mode -1)

(display-time)

(transient-mark-mode t)
(iswitchb-mode t)
(setq kill-whole-line t)
(show-paren-mode t)

(setq-default tab-width 4)

(setq dired-use-ls-dired nil)
(setq list-directory-brief-switches "-C")

(setq inhibit-startup-message t)
(setq startup-echo-area-message "")
(setq initial-scratch-message "")

そのほか、以下のような設定をとりあえずしています。

今の.emacs.el

;; 本体上部のボタンに機能割り付け
(global-set-key (quote [f8]) (quote toggle-input-method))
(global-set-key (quote [f7]) (quote execute-extended-command))
(global-set-key (quote [f6]) (quote electric-buffer-list))

(setq load-path (append load-path '("/home/user/elisp")))
(setq exec-path (append '("/home/user/bin/") exec-path))

;; emacsclient用
(server-start)

(line-number-mode t)
(column-number-mode t)

;; 拙作のtwit.el variantの設定
(load "twit")
(twit-mode t)
(setq twit-username "MY_ACCOUNT")
(setq twit-password "PASSWORD")
(setq twit-favorite-friends
      '("hitoriblog" "otsune" "masui" "miyagawa" "emacs"))

;; navi2ch用の設定
(autoload 'navi2ch "navi2ch" "Navigator for 2ch for Emacs" t)
;; busybox版はオプションが違うので
(setq navi2ch-net-gunzip-args '("-d" "-c"))
;; スレを開く際に画面分割しないので便利
(setq navi2ch-bm-stay-board-window nil)

;; 黒バックに
(set-foreground-color "white")
(set-background-color "black")
(set-cursor-color "gold")
(setq frame-background-mode 'dark)

;; 初期カレントディレクトリをHOMEに
(setq home-dir (getenv "HOME"))
(setq default-directory home-dir)

;; SKK用
;;(load "skk-setup")
;;(setq skk-large-jisyo "/usr/share/skk/SKK-JISYO.L")

;; sense-region用の設定
(autoload 'sense-region-on "sense-region"
  "System to toggle region and rectangle." t nil)

;; ruby-mode用設定
(require 'ruby-electric)
;; pabbrev-mode
(require 'pabbrev)
(setq pabbrev-idle-timer-verbose nil)

(autoload 'ruby-mode "ruby-mode"
  "Mode for editing ruby source files" t)

(setq auto-mode-alist
      (append '(("\\.rb$" . ruby-mode)) auto-mode-alist))
(setq interpreter-mode-alist (append '(("ruby" . ruby-mode))
                    interpreter-mode-alist))
(autoload 'run-ruby "inf-ruby"
  "Run an inferior Ruby process")

(autoload 'inf-ruby-keys "inf-ruby"
  "Set local key defs for inf-ruby in ruby-mode")

(add-hook 'ruby-mode-hook
      '(lambda ()
         (inf-ruby-keys)
        (ruby-electric-mode t)
         (pabbrev-mode t)
      ))

(sense-region-on)

;#####################
;# for clip.rb
;#####################

;; クリップボード連携のための設定
;; 関連エントリ
(global-set-key "\C-cc" 'clip-copy)
(global-set-key "\C-cv" 'clip-paste)

(defun clip-copy ()
  ;; Copy region on current buffer to clipboard on maemo.
  (interactive)
  (let ((coding-system-for-write 'utf-8))
    (message "... copy to clipboard")
    (call-process-region (region-beginning) (region-end) "clip.rb" nil nil nil "-s")
    (message "")))

(defun clip-paste ()
  ;; Paste maemo clipboard to current buffer.
  (interactive)
  (message "... paste from clipboard")
  (let ((s (point))(e))
    (let ((coding-system-for-read 'utf-8))
      (call-process "clip.rb" nil t nil "-g"))
    (setq e (point))
      (if (equal e s)
          (ding)
        )
    (message "")))

;; browse-urlでmicrobにURLを送るよう設定
;; 関連エントリ
(autoload 'browse-url-osso-browser "browse-url-osso-browser" "" t)
(setq browse-url-browser-function 'browse-url-osso-browser)

;; C/Migemo用設定
(load "migemo.el")
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs" "-i" "\g"))
(setq migemo-dictionary "/usr/local/share/migemo/euc-jp/migemo-dict")
;;(setq migemo-dictionary "/usr/local/share/migemo/cp932/migemo-dict")
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)

Hildonizeされておらず本体上部のボタンが余っているので、機能を割り当てています。 上記の設定では「-」ボタンを押すとtoggle-input-methodが実行されて、日本語入力ができるようになります。

FDcloneの設定

FDcloneからemacsclient経由でEmacsにファイルを開かせる設定をしときます。 /home/user/.fd2rcに以下の行を加えます。

EDITOR='emacsclient -n'

先にEmacsが起動していないとダメです。

関連エントリ

[N810]NOKIA N810用FDclone2.09g、lv4.51、nkf2.0.8bパッケージ

[N810]NOKIA N810でFDclone/lvを便利に使うためのヘルパースクリプト

| | Comments (0) | TrackBack (0)

2008.05.30

[N810]NOKIA N810でGPSロガーHOLUX m-241のログをBluetooth経由で取得!gpsbabel-1.3.5-beta20080514

gpsbabelのCVS先端だとHOLUX m-241に対応しているとのことだったので、NOKIA N810 (OS2008)向けにビルドしてdebパッケージを作ってみました。

R0012721_3

ダウンロード

「gpsbabel-1.3.5-beta20080514.deb」をダウンロード

インストール

例によって、Application managerからインストールするにはRed pill modeにする必要があります。

/usr/local/binにインストールされるので、PATHを通す必要があります。

使い方

NOKIA N810とHOLUX m-241との接続はBluetooth経由となります。 カーネルモジュールをインストールしたとしても、バスパワーの関係で、直接USBでつないでも認識しないと思います。

NOKIA N810とHOLUX m-241とのペアリングを済ませておく必要があります。

#!/bin/sh

#m-241
BTADDR=00:00:00:00:00:00

dbus-send --system --type=method_call --print-reply \
 --dest=com.nokia.btcond /com/nokia/btcond/request \
  com.nokia.btcond.request.rfcomm_bind string:$BTADDR string:SPP

その後に、上記のスクリプトのBTADDRをHOLUX m-241のアドレスに書き換え、実行し、/dev/rfcomm0にバインドします。(先客が居れば、/dev/rfcomm1〜にバインドされます)

バインドされたのが/dev/rfcomm0でなかったら、以下は実際にバインドされたものに読み替えてください。

ログをダウンロード

$ gpsbabel -t -w -i m241 -f /dev/rfcomm0 -o gpx -F out.gpx

ダウンロードした後にm-241からログを消す

$ gpsbabel -t -w -i m241,erase -f /dev/rfcomm0 -o gpx -F out.gpx

この例ではログを取得後にGPXフォーマットで書き出していますが、これをMemo Mapperで直接TrackやRouteとして読み込み、地図上にプロットすることができます。

おまけ: WBT-201の場合

WintecのWBT-201でも、ほぼ同様の手順でログの取得ができます。 オプションが少し変わるだけです。

$ gpsbabel -t -w -i wbt -f /dev/rfcomm0 -o gpx -F out.gpx

ダウンロードした後にWBT-201からログを消す

$ gpsbabel -t -w -i wbt,erase -f /dev/rfcomm0 -o gpx -F out.gpx

gpsbabelが対応している機種(m-241以外のMTK搭載機種、DG-100/BT-335等)なら、同じ手順でログの取得が可能だと思います。

GTK G-Rays 2がポートされているので(参考)、WBT-201の場合はログの取得のほか、設定変更が可能です。

| | Comments (0) | TrackBack (0)

2008.05.24

[N810]sqlite3 for OS2008 (NOKIA N810)

If you find sqlite3 for OS2008 as a command line interface, You should try this.
It did install to /usr/local/bin.

sqlite3-3.4.1-1.deb

You have to change Application manager to "red pill mode" before you install.

To run this sqlite3 requires libreadline5.
It can be install from exon's repo.

http://apt.exon.name/

Add this repo to Application manager, and type at terminal:

$ sudo gainroot
# apt-get install libreadline5

| | Comments (0) | TrackBack (0)

[N810]NOKIA N810用カスタマイズ済のキーマップをインストールするパッケージ

よくNOKIA N810の環境構築をやり直すんですが、面倒なのでカスタマイズ済のキーマップをインストールするパッケージを作ってみました。すいませんが、無保証です。


「customized-keymap-n810-0.1.deb」をダウンロード

ただ、パッケージxkbdataと競合するのでインストールするには力技が必要。Maemo CJK Supportを先にインストールしておいた方がいいと思います。

ダウンロードしたパッケージは、以下のようにターミナルからルート権限でインストールする必要があります。

# dpkg --force-overwrite -i customized-keymap-n810-0.1.deb

パッケージをインストールすると「/usr/share/X11/xkb/symbols/nokia_vndr/rx-44」を置き換えます。同時に「/usr/share/X11/xkb/symbols/nokia_vndr/rx-44.org」としてオリジナルのバックアップを取ります。Ctrl+Eのグローバル検索のショートカットを無効にもします。

インストール後にControl panel のText input settingsを起動してOKを押せば反映されると思います。

アンインストールは普通のパッケージ同様Application managerからアンインストールでき、オリジナルに復帰します。

N810keybind

カスタマイズの詳細については以前書きました。

[N810]NOKIA N810のキーボードカスタマイズ

| | Comments (2) | TrackBack (0)

2008.05.11

[N810]Advanced/W-ZERO3[es]をNOKIA N810のモデムとして認識させるKernel Module

以前、Advanced/W-ZERO3[es]を、NOKIA N810のモデムとして使う試みをしました。

[N810]NOKIA N810にAdvanced/W-ZERO3 [es]をモデムとして認識させられたけど……。

そのときは、「/dev/ttyUSB0」として認識させることができたものの、Hubを介さないとダメという結果になって、残念な思いをしました。
しかし、それはAdvanced/W-ZERO3[es]の「設定>パワー マネジメント>USB給電」を「給電する」に設定していたのが原因でした。「給電しない」にしておけば、Hubを介さずに認識しました! 何たるドジ!!

というわけで、下に掲載しているパッケージ「zero3module-1.0-1.deb」をインストールし、再起動をした後でNOKIA N810をUSB Hostモードにし、Advanced/W-ZERO3[es]をUSBケーブルでNOKIA N810に接続すれば、「/dev/ttyUSB0」として認識すると思います。

ただ、PPPの設定がうまくいかないので、どなたかに助けていただきたい次第。
それが、今回のエントリの目的です。

ダウンロード

「zero3module-1.0-1.deb」をダウンロード

「/dev/ttyUSB0」として認識させるまでの手順

こんなことを試せる環境があったり、試す必然性のある人は少ないと思いますが、前述の理由で関心を持つ人が増えてほしいので、「/dev/ttyUSB0」として認識させるまでの手順を書いておきます。

Advanced/W-ZERO3[es]側の設定

  • 「設定>パワー マネジメント>USB給電」を「給電しない」に設定
  • 「設定>接続>USB接続>」を「モデムとして使用する」に設定

NOKIA N810側の設定

ルート権限の取得

flasherでR&Dモードに切り替えるなどの方法でルート権限を取得していなければ、以下の手順を実行してください。

  • Repositories for Nokia〜」で紹介のあるリポジトリ「Eko One」の緑の矢印をタップ
  • ダイアログ「File download」が表示されるので、「Open」ボタンを押下
  • 「Application manager」が起動し、しばらくして「Add catalog」ダイアログが表示されるので、「OK」ボタンを押下
  • 「Refresh application list」ダイアログが表示されるので「OK」ボタンを押下
  • 「Application manager」の「Browse Installable applications」ボタンを押下すると「becomeroot」があるので、それをインストール
  • 以後、「X Terminal」で「sudo gainroot」とたたくとルート権限を得られます

Red Pill Modeの設定

「Application manager」は、デフォルトでは一部のパッケージしかインストールできない、制約のかかった状態になっています。

制限を緩めるために「Red Pill Mode」への切り替えをします。

なぜなら、僕の作ったパッケージは仕様を満たしておらず(!?)「Red Pill Mode」にしておかないとインストールできないからです。すいません、勉強不足です。

既に「Red Pill Mode」にしていれば、もちろんこの手順の実行は必要ありません。

  • 「Settings>Application manager」を起動
  • 「Application manager」のメニュー「Tools>Application catalog...」を選択
  • ダイアログ「Catalog」の「New」ボタンを押す
  • ダイアログ「New catalog」のフィールド「Web address」に「matrix」と入力し、「Cancel」ボタンを押す
  • 「Which pill?」というメッセージのダイアログが表示されるので「Red」ボタンを押す
  • ダイアログ「Catalog」の「Close」ボタンを押す

「zero3module-1.0-1.deb」のインストール

  • このエントリにある「zero3module-1.0-1.deb」をダウンロード
  • ランチャーの「Utilities>File manager」を起動
  • 「File manager」上でダウンロードした「zero3module-1.0-1.deb」をダブルタップ
  • インストールのプロセスに入り、いくつかダイアログが表示されるので、それらにはOKと答える

「usb-otg-plugin」のインストール

  • USB OTG pluginのプロジェクトページからパッケージをダウンロード(現時点では「usb-otg-plugin_0.0_armel.deb」)インストール「usb-otg-plugin」を
  • 「zero3module-1.0-1.deb」と同様に「File manager」からインストール

ケーブルの用意

接続方法

  • USB OTG pluginをインストール後、タスクバーに表示されるUSBアイコンをタップし、メニュー項目「USB UTG host mode」を選択、チェックマークが付いた状態にする
  • NOKIA N810→CA-101相当のケーブル→Aメス to Aメスのジェンダチェンジャ→A to mini Bケーブル→Advanced/W-ZERO3[es]といった具合に接続

結果の確認

「Utilities>X Terminal」、もしくは「Extras>X Terminal」を起動し(カスタマイズしてしまって、どっちだったか忘れてしまいました)、コマンドラインで以下をたたきます。

$ dmesg | grep ttyUSB0
[28859.671875] usb 1-1: PocketPC PDA converter now attached to ttyUSB0

上記のような行が見つかればOKです。
ちなみに、「|」はキーボードのカスタマイズをしていなければ、入力の方法が無いと思います。

minicomでATコマンドの応答まで見てみましょうか。

minicomは、「Repositories for Nokia〜」で紹介のあるリポジトリ「debfarm」にあります。先例にならって「Application Manager」の「Catalog」に登録し、インストールしてみてください。パッケージがリストに現れない場合は、「X Terminal」から以下のようにするとインストールできます。

$ sudo gainroot
# apt-get install minicom
# apt-get install ncurses-base

途中で「Install these packages without verification [y/N]」と聞かれますので、「y」と答えます。

「X Terminal」でminicomを起動します。
minicomを起動する前にメニュー「Tools>Settings...>Font settings」で、フォントサイズを10ptにします。また、ズームボタンで全画面に切り替えておきます。さもないと、画面が崩れます。

$ minicom -s

メニューが表示されるので、「Serial port setup」を選択し、「a」を押して「/dev/ttyUSB0」と入力し、Enterで確定。さらにEnterで「Serial port setup」を閉じる。
続いて「Modem and dialing」を選択。また「a」を押して「Init string」の編集に入り、デフォルトの初期化文字列を消して「ATZ^M」と入力、Enterを2回押して「Modem and dialing」を閉じ、「Save setup as dfl」、そして「Exit」を選択。
すると、「Initializing Modem」と表示され、Advanced/W-ZERO3[es]との通信が開始されます。
次の起動からは、-sオプション無しの「minicom」だけでOKです。

以下のようにタイプしてみます。

AT@LBC1 
OK 
AT@LBC? 
(郵便番号と緯度経度が返ってくる)

OK
AT@LBC2
OK
ATDT0570-570-081##64
CONNECT 300000

NO CARRIER

REASON:7000

さあ、ここまできたら、pppd/chatの設定ですが、これがよく分からないです。
ぜひ教えてください。

「/etc/ppp/peers/provider」を編集しながら関連ファイルを編集しつつ、/usr/bin/ponを実行して様子を見てみたのですが、「/var/log/ppp-connect-error」にエラーが記録されず、かといって何も起きずという状態になってしまい、糸口をつかめないでいます。

| | Comments (0) | TrackBack (0)

2008.05.09

[N810]NOKIA N810にcronをインストール

NOKIA N810にもcronが入ってません。
こんなに定期実行が大好きなのに、なんでなの〜! ということで探してみると、パッケージがありました。

Andrewさんのページからたどれる氏のリポジトリにあります。
Andrewさんのページはとても参考になりますね。パッケージの作り方、(Trastedな)リポジトリの作り方、内蔵GPSに対する考察など、話題は多岐に亘ります。

ちなみに、氏のリポジトリにはlibdecodeqr-0.9.3.debというものもありますね。ライブラリだけじゃなくて、「/usr/bin/qrdecode」が入っているので、すぐ使えるかな? QRコードのデコードができるコマンドでしょう。

インストール

http://andrew.triumf.ca/N810/repository/

上記にある「andrew.install」をタップして「Open」、Application listをRefreshします。
しかる後にターミナルから、

$ sudo gainroot
# apt-get install cron

次の起動時からcronがdaemonとして動き出します。

もちろん「crontab -e」で登録。
普通のcronと使い方は同じですね。

インプレッション

LockスイッチでLockした後も動き続けていますし、Wifiがつながる環境なら、ネットワークを利用する処理も動いてます。
バッテリの持ちに影響しそうですが、それについては評価中。

ちなみに、ntpdateを使った時刻合わせは、以下のようにできるそうです。

ntpdateのインストール


# apt-get -y install ntpdate

システムクロックの調整と、ハードウェアクロックへの反映


# ntpdate pool.ntp.org
# /mnt/initfs/usr/bin/retutime --rtc-from-system

これをcronに仕込めば便利ですね。

| | Comments (0) | TrackBack (0)

2008.05.07

[N810]NOKIA N810とAdvanced/W-ZERO3[es]でBluetooth PAN

2008.05.10追記:これに関係して、接続/切断支援MortScriptを書きました。以下のエントリです。
[Windows Mobile]Advanced/W-ZERO3[es]でのBluetooth PAN接続/切断支援MortScript

ICSInstall.CABとWMWifiRouterをインストールすれば、Advanced/W-ZERO3[es]は無線ルータとして機能するようになり、NOKIA N810からも使えるわけですが、無線LANは消費電力が多いので、できればBluetooth PANで接続したいものだと思っていました。

試行の結果、NOKIA N810とAdvanced/W-ZERO3[es]とをBluetooth PANで接続でき、Advanced/W-ZERO3[es]が、NOKIA N810の無線ルータとして使えるようになりました。

ちなみに、自分がAdvanced/W-ZERO3[es]に接続しているBluetoothドングルは、IBSJapanのIMUB-01です。

手順を書いておきます。

Advanced/W-ZERO3[es]側の設定

Bluetoothドングルを使えるようにします。
自分が使っているのはIBSJapanのIMUB-01ですので、Enablerをダウンロードしてインストールしました。

「スタートメニュー>設定>接続>Bluetooth」を起動し、モードタブのチェックボックス「Bluetoothをオンにする」と、「このデバイスを他のデバイスからも検出できるようにする」をOnにします。

ICSInstall.CABをインストールします。ダウンロードには会員登録が必要です。

WMWifiRouterをインストールします。インターネット共有の設定をやってくれるからです。
以前は、インターネット共有(ICS)の設定だけをしてくれる「em1ics helper」というものがあったのですが、公開停止になってしまいました。
WMWifiRouterの最新バージョンは、「em1ics helper」がやってくれた設定もいっしょにしてくれますので、「em1ics helper」にこだわる必要はありません。

WMWifiRouterはシェアウェアですので、レジストしないでいると試用期間が過ぎて使えなくなりますが、インターネット共有(ICS)の機能は、その後も継続して使えます。

WMWifiRouterといっしょにインストールされた「\Windows\wmwr_cprog.exe」を実行します。
すると、タスクバーに見慣れないアンテナアイコンが表示されると思います。インターネット共有は、この状態にしておかないと動きません。「\Windows\wmwr_cprog.exe」のショートカットを「\Windows\スタートアップ」に作って、起動時に実行されるようにしておくのも手でしょう。

「\Windows\IntShrUI.exe」がインターネット共有を開始するアプリケーションです。WMWifiRouterをインストールすると、「スタートメニュー>プログラム>IntShrUI」としても登録されます。

NOKIA N810側の設定

「Settings>Control panel>Bluetooth」を起動し、チェックボックス「Bluetooth on」、「Visible」をOnにします。

Advanced/W-ZERO3[es]側ではBluetoohドングルを差して起動させておきます。
しかる後にNOKIA N810側でさきほどの「Bluetooth」設定ダイアログを開き、「Devices」ボタンを押します。
さらに「New」ボタンを押して、デバイスの検索をかけます。見つかったAdvanced/W-ZERO3[es]の項目をダブルタップし、Passcodeを適当に設定した後、「OK」ボタンを押します。
Advanced/W-ZERO3[es]側でPasscodeを入力して、登録を完了させます。

完了した項目を選択し、「Edit」ボタンを押します。
ここで表示される「Device name」と「Bluetooth address」をメモしておきます。

maemo-panをインストールします。マニュアルでは「Settings>Control panel>Phone」でPANの接続相手を登録するとありますが、Advanced/W-ZERO3[es]+Bluetoohドングルは、「Phone」では見つからないと思います。

以下のようなシェルスクリプトを用意し、BTADDRとBTNAMEを、さきほどメモしたものに置換します。

#!/bin/sh
BTADDR="00:00:00:00:00:00"
BTNAME="Pocket_PC"
gconftool-2 --type string --set /system/osso/connectivity/BT/preferred ${BTADDR}
gconftool-2 --type string --set /system/bluetooth/device/${BTADDR}/name ${BTNAME}

BTADDR→「Bluetooth address」
BTNAME→「Device name」

上記スクリプトをbtadd.shとして保存したとすると、

$ sh btadd.sh

などとして実行します。
このスクリプトは、「Settings>Control panel>Phone」で設定を変更してしまわない限り、一度実行すればOKです。

接続手順

■Advanced/W-ZERO3[es]側

「\Windows\IntShrUI.exe」ないしは「スタートメニュー>プログラム>IntShrUI」を実行します。

「PCとの接続」を「Bluetooth PAN」に、「ネットワーク接続」は、ダイヤルアップに使うエントリを指定します。自分はデフォルトの「CLUB AIR-EDGE」を使っています。

そして、「接続」ボタンをタップして、接続の確立を確認します。

「\Windows\wmwr_cprog.exe」を実行して、デフォルトとはデザインの異なるアンテナアイコンをタスクバーに表示させておかないと、うまくいきませんので注意してください。
つまり、デフォルトのもの、そしてwmwr_cprog.exeを実行することで表示されるものと、タスクバーにアンテナアイコンが二つ表示された状態にしておくわけです。
邪魔ですが、仕方がありません。

■NOKIA N810側

画面上部のWifiアイコン(?)をタップし、表示された「Select connection...」メニューを選択。
「Select connection」のダイアログにて、項目「Bluetooth-PAN」を選択すれば、それでOKのはずです。

Bluetooth-PANが確立しても、Wifiアイコンは薄灰色から白色には変化しませんので慌てずに。

Mac OS X LeopardでもOK

この状態のAdvanced/W-ZERO3[es]で、Mac OS X LeopardともBluetooth PANで接続でき、無線ルータとして機能させられました。
詳細はまたの機会に。

| | Comments (0) | TrackBack (2)

2008.05.01

[N810]Micro-USB BタイプのリトラクタブルUSBケーブル購入

WX330K発売に合わせてでしょう、MIYAVIXから、国産初!? のMicro-USB BタイプのリトラクタブルUSBケーブルが発売されたので購入しました。
これでNOKIA N810の活用度が上がるかな?

本当に欲しいのはL型、リトラクタブル、Micro-USB A to Mini-USB Bのケーブルなわけですが。
2個買って、1個は切ったりつないだりする用に回そうと思っていたんですが、1個しか注文されてなかった……。








| | Comments (0) | TrackBack (0)

2008.03.03

[N810]NOKIA N810でFDclone/lvを便利に使うためのヘルパースクリプト

先日のエントリ「[N810]NOKIA N810用FDclone2.09g、lv4.51、nkf2.0.8bパッケージ」に関連して。

lvの文字コード自動判定機能が完全でなく、lvがFDcloneのViewerとして機能不全だったので、開くテキストの文字コードを意識せずに済むよう、ヘルパースクリプトを書いてみました。

#!/bin/sh

enc=X`nkf --guess $1 | cut -d" " -f1`

case "$enc" in
"XUTF-8")
    opt="u8"
    ;;
"XShift_JIS")
    opt="s"
    ;;
"XEUC-JP")
    opt="ej"
    ;;
"XISO-2022-JP")
    opt="j"
    ;;
*)
    opt="a"
    ;;
esac

lv -I${opt} -Ou8 $1

nkfの文字コード判定機能を利用して、lvの入力文字コードのオプションを自動指定するという流れです。 lvはもちろん、nkfをインストールしておく必要があります。

このスクリプトをlvhとして保存し、

chmod +x lvh

で実行権を付加し、パスの通ったところに置き、.fd2rcで

PAGER=lvh

といった感じでPAGERとして指定すれば、FDcloneからのテキスト読みが快適です。

テキストファイルがShift-JISでもEUC-JPでもJISでもUTF-8でも、FDcloneからEnter一発で文字化けせずにlvで読めます。

こんなことせずとも、nkfで一意な文字コードに変換した後lvで開くスクリプトにすればいいという話ではありますが。

| | Comments (0) | TrackBack (0)

2008.02.19

[N810]NOKIA N810にAdvanced/W-ZERO3 [es]をモデムとして認識させられたけど……。

ipaq.cにAdvanced/W-ZERO3 [es]のベンダーIDとプロダクトIDを追加して作ったKernel Module ipaq.koと、ipaq.koが依存するusbserial.koをinsmodして、Advanced/W-ZERO3 [es]がモデムとして認識でき、/dev/ttyUSB0が出来ました。

[50928.820312] usb 1-1.1.1: new device strings: Mfr=1, Product=2, SerialNumber=3
[50928.820312] usb 1-1.1.1: Product: SHARP Windows Mobile USB Modem
[50928.820312] usb 1-1.1.1: Manufacturer: SHARP CORPORATION
[50928.820312] usb 1-1.1.1: device v04dd p91ac is not supported
[50928.820312] usb 1-1.1.1: uevent
[50928.820312] usb 1-1.1.1: usb_probe_device
[50928.820312] usb 1-1.1.1: configuration #1 chosen from 1 choice
[50928.820312] ipaq 1-1.1.1:1.0: PocketPC PDA converter detected
[50928.828125] usb 1-1.1.1: PocketPC PDA converter now attached to ttyUSB0

知らなかったんですが、insmod時にベンダーIDとプロダクトIDを指定できるんですね。
いちいちipaq.koをビルドする必要は無かったかも。

# insmod usbserial.ko
# insmod ipaq.ko vendor=0x04dd product=0x91ac

その先はやってませんが、N810にはpppするための道具が標準で入っているので、所定の手順でダイヤルアップはできるでしょう。

ただし……。

そのままつないだのではKernel Moduleがロードされませんでした。
Advanced/W-ZERO3 [es]の消費電力がN810のバスパワーの供給電力を超えると判断されたからのようです。
ようですってか、エラーメッセージはそう告げています。

[52913.085937] usb 1-1: rejected 1 configuration due to insufficient available bus power
[52913.085937] usb 1-1: no configuration chosen from 1 choice

それならばと、電源供給機能のあるUSB HUBを経由してつないだところ、Kernel Moduleがロードされ、/dev/ttyUSB0が出来たわけです。

かといって、N810よりデカくかさばるので、バッテリ駆動かつ電源供給可能なUSB HUBを持ち歩く人は居ないでしょう。

実際のところ、Advanced/W-ZERO3 [es]はN810からの電源供給を受けずとも動作可能でしょうから、Kernelの、configurationを選択する部分にパッチを当てて無理矢理使うことはできそうです。

この辺の判定をしているのは、

/drivers/usb/core/generic.c

にある、

static int choose_configuration(struct usb_device *udev)

という関数のようですね。ここをいじればあるいは……。
手段として間違っている気がしますが。

期待させると悪いのであらかじめ断っておきますが、この問題解決を完遂せずに飽きる可能性大。

2008.04.29追記:すいません。アホやってました!「設定>パワー マネジメント>USB給電」を「給電する」に設定していたから弾かれたのでした。「給電しない」に設定したら、Hubを介すること無くモデムとして認識され、/dev/ttyUSB0が出来ました。

| | Comments (3) | TrackBack (2)

2008.02.17

[N810]NOKIA N810用FDclone2.09g、lv4.51、nkf2.0.8bパッケージ

NOKIA N810でも、FDcloneとか欲しいよなということで、パッケージを作ってみました。

/usr/local/以下、実行ファイルは/usr/local/binに入るので、PATHの設定が必要です。.profile、あるいはbashを入れていれば.bashrcなどに追記。

export PATH=$PATH:/usr/local/bin

ダウンロード

無保証なので自己責任で試してください。

2008.2.18追記: すいません。Red Pillモードにしないと僕のパッケージはインストールできませんでした。Red Pillモードへは、Application managerを起動し、メニューのTools>Application catalogを選択してダイアログを出し、Web address欄にmatrixと入力し、closeボタンを押すと表示されるダイアログで移行できます。

オフィシャル:FDclone

「fdclone_2.09g_armel.deb」をダウンロード

オフィシャル:lv

「lv_4.51_armel.deb」をダウンロード

オフィシャル:nkf

「nkf_2.0.8b_armel.deb」をダウンロード

補足

FDcloneのパッケージインストール時、UTF-8環境に合わせた/home/user/.fd2rcを作ります。
既に存在した場合はorg.fd2rcとして退避します。次回からは上書きされますので注意してください。

lvを入れたら、.fd2rcのPAGERのところのコメントを外してください。-Iaでファイルのエンコーディングが自動判定されるはずですが、sjisやeucでは判定が失敗してしまいますね。-Is(sjis)、-lej(euc-jp)で明示すると読めますが……。osso-xtermはutf-8なので、-Ou8は固定でOKです。

編集用のエディタを指定する場合は、.fd2rcにEDITORの項目を作って指定します。

EDITOR=vim

lvで常に-Ou8が指定されるように、.profile、.bashrcなどにも以下のように書いておくといいかもしれません。あんまり信頼ならないようですが、一応-Iaも書いておくといいかも。
lvでテキスト読みをすると、jとkでスクロールできるので、片手操作によいかもです。

export LV='-Ou8 -Ia'

2008.03.03追記:上記の設定をしてもいまいち不便なのでヘルパースクリプトを書きました。[N810]NOKIA N810でFDclone/lvを便利に使うためのヘルパースクリプト

インプレッション

やっぱfdあると落ち着くわ。

| | Comments (2) | TrackBack (1)

2008.02.16

[N810]NOKIA N810で強制USB HostモードとOn-The-Goモードとを一発で切り替える

NOKIA N810にUSB機器を、標準添付のUSBケーブルとジェンダチェンジャを使って接続する際に必要な、強制USB Hostモードへの移行とOn-The-Goモードへの復帰を一発で実行できるスクリプトを書いてみました。

関連エントリ:

[N810]強制USB HostモードでNOKIA N810にUSB機器をいろいろ接続

[N810]NOKIA N810で使うUSB Aオスのジェンダチェンジャを作ってみた

ダウンロード

2008.02.20追記: なぜかruby1.8とruby1.8-maemoに依存したパッケージにしていたので修正しました。また、インストールにはRed Pillモードにする必要があります。Red Pillモードへは、Application managerを起動し、メニューのTools>Application catalogを選択してダイアログを出し、Web address欄にmatrixと入力し、closeボタンを押すと表示されるダイアログで移行できます。

「usbswitch-0.1.armel.deb」をダウンロード

使い方

「becomeroot」をインストールするか、R&Dモードに変更するなどで「sudo gainroot」実行でルート権限のシェルが実行できるようにしておく必要があります。

File managerからタップするなどでインストールすると、ランチャのExtrasの中に「USB Switch」という項目が出現します。

これを実行すると「USB Hostモード」と「On-The-Goモード」の間で交互に切り替えできます。


| | Comments (2) | TrackBack (0)

2008.02.08

[N810]NOKIA N810でキーボードからランチャー起動やタスクスイッチなどをする

NOKIA N810を使っていて不便に思うのは、キーボードからランチャーが起動できないことです。全画面にして使うことが多いので、自分にとっては結構深刻な問題なのです。

タスクスイッチは液晶左のボタンでできますが、ひっかかりがあって何とも押しにくい。キーボードからタスクスイッチができたらさぞかし便利でしょう。

どうにかならないものかと思ったら、どうということはない、control panelから設定できました。

設定方法

  • 「control panel>Bluetooth keyboard」を起動
  • 「Shortcuts」タブを表示
  • 「Task launcher」を選択し、「Edit」ボタンを押す
  • 右Ctrlを押してから右Shiftを加えて押し、Aをさらに押す(CtrlとShiftの順番が逆ではダメ)
  • 「OK」ボタンを押す
  • 「Task switcher」を選択し、「Edit」ボタンを押す
  • 右Ctrlを押してから右Shiftを加えて押し、Sをさらに押す(CtrlとShiftの順番が逆ではダメ)
  • 「OK」ボタンを押す
  • 「OK」ボタンを押して「Bluetooth keyboard」を閉じる

これで、N810のキーボードから、設定したショートカットで「Task launcher」、「Task switcher」の起動ができるようになったと思います。

そう、「Bluetooth keyboard」といいつつ、ここで設定したショートカットは内蔵キーボードでも有効なのですね。

右Ctrlと右Shiftは、右の親指でヒールアンドトゥーの要領で二ついっぺんに押します。使用時も、設定時同様Ctrlの方を先に押さないとダメです。

ちなみに、USBキーボードでも有効です。

実際は右のShiftが若干押しづらいですし、しくじるとCtrl+SやCtrl+Aを押してしまう(この付近のキーだとどれもいただけないショートカットになりますよね)ので、キーボードカスタマイズで「Chr」キーを「Ctrl」に変更し、左Shift+左Ctrl+L、Kといった感じの設定にする方が使いやすいと思います。僕はそうしています。

ただでさえ固いN810のキーを二つ同時に押すのは相当キツいですが、こればっかりはどうしようもありません。気合でどうにかするほかありません。

XKBの設定でスペシャルキーをlatchedにできることは分かっていますし、一般的なLinuxのデスクトップ環境なら、Universal Accessの機能の一つとして標準でできることは確認していますので、ぜひともN810でも同時押しでなく、順次押しで済むlatch設定をしたいものですが、XKBの機能が高度で、きちんと書式と機能を理解しないと、どう書いていいものか見当が付きません。

| | Comments (0) | TrackBack (0)

[N810]NOKIA N810内蔵GPS問題を改善するパッケージに副作用があった

先日エントリした「[N810]NOKIA N810内蔵GPSの測位が遅い問題を改善するgpsd関連のパッケージが登場」で紹介した、内蔵GPSの測位が遅い問題を改善するgpsd関連のパッケージですが、みなさんからいただいたレポート、トラックバック元の記事を読ませていただくと、効能は確かのようですね。

NOKIA N810内蔵のGPSは、あまりGPSシーンで名前が挙らないTI製ということもあってか、バグを回避しても「すっげえ早くなった! 最強!」みたいな感じではなさそうですが。

僕はといえば、なかなか地上に出る時間が取れず、今のところ試せずじまいです。

そんな素敵なパッケージではあったわけですが、作者Jussi Kukkonen氏のブログに、Owen Williams氏から次のようなコメントが投稿されているということをZachさんから教えてもらいました。

**要注意** 上でリンクされているパッケージをインストールしたら、aptコマンドが文句を言うようになったよ。apt-get upgradeやらを再び使えるようにするために、オリジナルのosso-gpsdパッケージをインストールするハメになった。 ビルド済みのパッケージが見当たらなかったので、実際にはSDKのscratchboxを使ってosso-gpsdのパッケージをソースからリビルドする必要があったよ。 そんなわけなんで、用心してね。

Jussi Kukkonenはこれに対し、

Owenありがとう。パッケージを1.0-25 debにアップデートしてアップしておいたよ。 予期せぬトラブルに巻き込んでしまって、みなさんごめんなさい。 osso-system-versionが特定バージョンのosso-gpsdに依存しているので、(訳注:対策パッケージをインストールしたままで?)Maemoのシステムパッケージをすっきりとアップデートする方法は無いみたいだ。

今上がっているパッケージをインストールすれば副作用を回避できるのは確かでしょうが、Jussi Kukkonenのコメントの文脈から、osso-gpsdもバグありの標準状態に戻り、うるう年バグはそのままかもしれません。実際に試していないのでよく分かりません。検証した方がいらしたら教えてください。

いずれにせよ2月28日を過ぎれば、バグ持ちのgpsdでもN810内蔵GPSの測位スピードは本来の状態に戻り、4年後の次のうるう年までこの問題は表面化しないそうですので、この件で腰が引けた方も、あと3週間の辛抱です。

対策パッケージをインストールしてGPSの測位が早くなった恩恵を受けていて、当面困ったことが起きていなければ、あと3週間はそのままにしておくのも選択肢の一つかもしれません。

1.0-25 debは、最初に対策パッケージがアップロードされていた以下にあります。

http://folks.o-hand.com/jku/osso-gpsd/

| | Comments (2) | TrackBack (2)

2008.02.07

[N810]NOKIA N810上のEmacsからbrowse-urlする! browse-url-osso-browser.el

NOKIA N810でEmacsを使っていて不便なのは、とりあえずクリップボード連携ができるようになった今、Emacs上でURLを踏んだときにブラウザでブラウズできないことです。

というわけで、以前bg66さんが公開してらしたLinux Zaurus向けのElispであるbrowse-url-netfront.elを改造して、NOKIA N810の標準ブラウザであるosso-browserにURLを渡すElisp、browse-url-osso-browser.elを作ってみました。

bg66さん、今はどこでどうされているやらではありますが、ありがとうございます。

これをbrowse-url-browser-functionに登録し、Navi2chのスレ内等に登場するURL上でEnterを押せば、osso-browserでブラウズできます。

ダウンロード

「browse-url-osso-browser.el」をダウンロード

一応中身も貼っておきます。

;; To use, add the following line to your .emacs:
;; (autoload 'browse-url-osso-browser "browse-url-osso-browser" "" t)
;; (setq browse-url-browser-function 'browse-url-osso-browser)

(defcustom browse-url-osso-browser-program "browser_dbuscmd.sh"
  "The name by which to invoke the osso web browser."
  :type 'string
  :group 'browse-url)

(defcustom browse-url-osso-browser-before-args nil
  "*A list of strings defining options for `browse-url-osso-browser-program'."
  :type '(repeat (string :tag "Argument"))
  :group 'browse-url)

(defcustom browse-url-osso-browser-args '("open_new_window")
  "*A list of strings defining options for `browse-url-osso-browser-program'."
  :type '(repeat (string :tag "Argument"))
  :group 'browse-url)

(defun browse-url-osso-browser (url &optional new-window)
  "Ask the Osso-Browser WWW browser to load URL.
Default to the URL around or before point."
  (interactive (browse-url-interactive-arg "Osso-Browser URL: "))
  (message "Sending URL to Osso-Browser...")
  (apply #'start-process `(,(concat "Osso-Browser" url) nil
               ,@browse-url-osso-browser-before-args
               ,browse-url-osso-browser-program
               ,@browse-url-osso-browser-args ,url))
  (message "Sending URL to Osso-Browser...done"))

インストール

browse-url-osso-browser.elをload-pathの通ったところに置き、以下を.emacs.elに追記。

(autoload 'browse-url-osso-browser "browse-url-osso-browser" "" t)
(setq browse-url-browser-function 'browse-url-osso-browser)

制限

ただし、既に少なくとも一つはosso-browserでウインドウを開いていないとダメという制限があります。 結構不便なのでどうにかしたいんですが、Windowsで言うところの「start」、Mac OS Xで言うところの「open」に相当するコマンドは無いもんでしょうかね。dbus-launchというコマンドがありますが、これはちょっと意味合いが違いそうです。

ご存知の方がいらしたら教えてください。

| | Comments (0) | TrackBack (0)

2008.02.06

[N810]NOKIA N810内蔵GPSの測位が遅い問題を改善するgpsd関連のパッケージが登場

NOKIA N810内蔵GPSの評判がかんばしくありませんが、これはうるう年問題に関係するgpsdのバグに起因するもののようです。

Jussi Kukkonen氏のブログのエントリ「Solution to N810 GPS problems?」に、対策パッチを当てたgpsd関連のパッケージがアップロードされています。
バグは2008年1月1日から2008年2月28日まで、タイムスタンプが86,400秒進んでしまうというもので、これが原因で、前回の測位情報が参照されないということが起こっているようです。

曰く、「ここ最近は、NOKIA N810のGPSにある、初回の測位までが遅い問題がどうにかならないものかと試行錯誤していたよ。そしていい結果が出たので紹介しよう: これまでは、とてもいいコンディション下であっても、測位には少なくとも5分から15分かかっていた。今日試したところ、以前はほとんど測位が不可能だった、室内窓際からというシチュエーションでさえ、測位まで30秒から3分で済んだ」
「パッケージをインストールした後の最初の測位は、以前同様長い時間がかかるだろう。でも、次の測位から早くなるはずだ」

このエントリに寄せられたコメントは、「N810内蔵GPSは初回の測位までが遅かったからBluetooth GPSを使っていたけど、このパッケージをインストールしたら内蔵GPSでも40秒ほどで測位するようになったよ! ありがとう! オープンソースの持つ力を象徴する事例の一つになったね!」などといった絶賛の嵐。

ちなみに、N810内蔵GPSはTI製で、E90に搭載されているものと同じだそうです。

僕はまだインストールしただけで試してませんが、試された方どうですか?

| | Comments (4) | TrackBack (2)

2008.02.05

[N810]NOKIA N810でもMBROLAを使って日本語音声合成

多言語対応音声合成エンジンMBROLAをNOKIA N810で動かしてみました。

基本的に、以前Linux Zaurusでやったのと同じです。

とりあえず試してみる

NOKIA N810で動くMBROLAのバイナリ(ソース配布は無し)は、LINUX / Pocket PC版です。

三つの実行ファイルが入っていますが、ライブラリがスタティックリンクされたmbrola-linux-strongarm2-staticだけが使えました。

実行ファイルのほかに音素ファイルが必要です。

日本語用音素ファイルにはいろいろあるのですが、発声マクロ生成に使うmuDaTTSがjp2のみをサポートしている都合で、jp2 (jp2: Japanese Female (5.6Mb) Tomohisa Tachiki)で試してみます。

試行の手順としては以下の通りです。wgetは標準では入ってませんが、osso-browserでダウンロードするなどで適当に。

$ mkdir mbrola
$ cd mbrola
$ wget http://tcts.fpms.ac.be/synthesis/mbrola/bin/pocketlinux/mbr301h.zip
$ wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/jp2/jp2-270202.zip
$ unzip mbr301h.zip
$ unzip jp2-270202.zip
$ ls
mbrola-linux-strongarm
mbrola-linux-strongarm2
mbrola-linux-strongarm2-static
jp2
$ chmod +x mbrola-linux-strongarm*
$ ./mbrola-linux-strongarm2-static jp2/jp2 jp2/test/kon1.pho kon1.wav
$ play-sound kon1.wav

NOKIA N810上で動作させたMBROLAで生成したWAVファイル

jp2に同梱のkon1.phoで生成したWAVを置いておきます。

「kon1.wav」をダウンロード

インプレと展望

テキストから発声マクロを生成するツールに、muDATTSというRubyスクリプトが存在します。

これをLinux Zaurusで動作させた実績があるので、既にRubyがPortされているNOKIA N810でもそれが流用できると思います。ChaSenとKAKASIをPortしないといけませんが……。KAKASIとRuby/KAKASIはすんなりビルドできました。

メモリが64MBしか搭載されておらず、スワップを作ってもQtが強制的にアプリを落としてしまうZaurusでは、MBROLA+muDATTSは結局実用的に使えませんでしたが、NOKIA N810では実用可能な雰囲気です。

ただし、muDATTSで生成できる発声マクロは、抑揚の無いものです。kon1.phoのような抑揚は付きません。

先ほどのkon1.wavが高品質で感動するかと思いますが、テキストからこのレベルの発声マクロを出力するツールは存在しないようなので、kon1.phoは、VOCALOIDよろしく職人芸によって作られたデータなのでしょう。

以下に挙げた当ブログの関連エントリにサンプルを上げていますので、参考にしてみてください。

Zaurusで日本語音声合成 MBROLA+muDaTTS

(実践編)Zaurusで日本語音声合成 MBROLA+muDaTTS

Zaurusで日本語音声合成 zmuDaTTS.rb v 0.2

[Zaurus]Zaurusで日本語音声合成 zmuDaTTS.rb v0.3

僕がZaurus用に改造(改悪)した版のzmuDaTTSはNOKIA N810でも基本的に使えると思いますが、読み上げ用の辞書ファイルをZaurus依存のパスにしていたりSoXを使っていたりで修正は必要です。

| | Comments (0) | TrackBack (0)

2008.02.02

[N810]NOKIA N810で使うUSB Aオスのジェンダチェンジャを作ってみた

NOKIA N810に付属のUSBケーブルCA-101でUSB機器をつなぐのに使えるUSB Aメス<>Aメスアダプタ(いわゆるジェンダチェンジャ)を自作してみた。

関連エントリ:[N810]強制USB HostモードでNOKIA N810にUSB機器をいろいろ接続

既に市販品を持っているので必要無かったのだけど、Host/On-The-Goモード判別ピンをこっち側で処理すればいいんでは? と思って深く考えずに部品を買って、作業にかかる段階でやっとそんなことができないことに気がついた。

母艦側のUSB Aコネクタはモードセレクトをする必要が無いので、モード判別ピンは出ていないのだ。って、そんなこと常識だっつーの。

しかし、買った部品が勿体無かったので、とりあえず普通のジェンダチェンジャを作ってみた。

サイズは市販の同等品より小さくなったので、一応面目躍如かな。

基板実装用のUSB Aメスコネクタを二つ組み合わせて瞬間接着剤で結合。くつひもを結ぶような感じでクロスさせて配線。

長めに切った熱収縮チューブをかぶせ、加熱してピチピチにし、余分なところをカッターで切断して出来上がり。

意地でもこれを使うことにした。

| | Comments (0) | TrackBack (0)

2008.01.29

[N810]GPS対応地図ソフトMaemo Mapperに、D-Bus Interface経由で特定の地点を表示させる

NOKIA N810で動くGPS対応地図ソフトMaemo Mapper

マップデータをGoogle MapsやVirtual Earthなどからローカルに一括ダウンロードして使えるという禁断の機能が付いており、GPXフォーマットでTrackやRouteの読み書きができるなど、結構出来がよくてホクホクしています。

GeocodingなどのWebサービスと連携させるとよかろうなと思いますが、Maemo Mapperを外部からコントロールする機能が無いことにはどうにもなりません(※)。

※:どうにもならないことはないですが面倒です。

MaemoにはD-Busというプロセス間通信の機構が搭載されていて、D-Bus Interfaceが実装されているアプリは、外部からコントロールができるようになっています。

Qtopiaにおける、qcopメッセージみたいなものですね。D-Bus系の処理をするコマンドは、「dbus」で始まる名前で存在しており、特定のプロセスに対してメッセージを送る場合は、dbus-sendを使います。

Maemo Mapperにも、数は少ないながらD-Busのメソッドとシグナルが実装されています。詳しい情報は、ソースのdbus-ifc.hにあります。

でもって、以下のようなシェルスクリプトを書いて「map」という名前で保存した後に実行権を付与し、パスの通ったところに置いたならば、

#!/bin/sh

dbus-send \
--session \
--type=method_call \
--print-reply /com/gnuite/maemo_mapper \
--dest=com.gnuite.maemo_mapper \
com.gnuite.maemo_mapper.set_view_center \
double:$1 double:$2 int32:$3 double:$4

以下のようなコマンドで、Maemo Mapperに特定の地点を特定のズームレベルで表示させることができます。

凡例) map [lat] [lon] [zoom level] [rotate angle]

map 100.000 100.000 5 0.0

ただし、rotate angleの指定はどうも効いていないみたいで、変な角度で表示されます。

カーソルキーの上を押すと上に向き直るので、それでしのごうかと思っています。

もし角度を指定できたら教えてください。実際の処理はソースファイルdbus-ifc.cに書いてあります。 読んでもよく分かりませんでした。

osso-browserにD-Bus Interfaceから特定のURLを表示させる

N810標準のブラウザである「browser」またの名を「osso-browser」に、外部から特定のURLを表示する場合は、browser_dbuscmd.shという標準で存在するスクリプトを使います。

browser_dbuscmd.shの中身は以下の通りです。dbus-sendを使ってますね。

#!/bin/sh

dbus-send --system --type=method_call --dest="com.nokia.osso_browser" --print-reply /com/nokia/osso_browser/request com.nokia.osso_browser.$1 string:"$2"

exit 0

browser_dbuscmd.shの使い方は以下の通りです。

新しくウインドウを開いて表示
browser_dbuscmd.sh open_new_window http://www.google.co.jp/

既存のウインドウで表示
browser_dbuscmd.sh load_url http://www.google.co.jp/

一番手前のウインドウを一つ閉じる
browser_dbuscmd.sh close_window

osso-browserを終了させる
browser_dbuscmd.sh exit_browser

これでJavaScriptも実行できます。

既存のウインドウに対して実行

browser_dbuscmd.sh load_url "javascript: alert(document.title);"

RubyからD-Bus

Ruby Maemoにdbusというライブラリが収録されており、これでD-Busをいじることができます。

詳しくはググってください。

require 'dbus'

| | Comments (0) | TrackBack (0)

2008.01.28

[N810]強制USB HostモードでNOKIA N810にUSB機器をいろいろ接続

N800からの改良で本体USBポートからUSB機器に対する電源供給ができるようになり、機器がつなぎやすくなったN810ですが、本体側のコネクタにMicro USB (EMU)が採用されたことで、国内ではケーブルの入手が困難です。

特に、USB Hostで動作させるのに必要な、Micro USBのAタイプが付いたタイプは入手困難です。

しかし、付属のUSBケーブル、NOKIA CA-101を使ってUSB機器を使う方法があるので紹介します。

N810でUSB機器を使う上での情報は、 Internet Tablet Talkの、以下のForumに集積されてます。

http://www.internettablettalk.com/forums/showthread.php?t=14092

方法1: ケーブルを加工する

Micro Bのケーブルに、W-ZERO3 [es]のときに流行った、Mini Bを電気的にAタイプ相当にするのと同様の改造を適用する方法があります。

前出のForumに、こんなことが書いてあります。

> ケーブルを剥くと出てくる5本の被服線のうち、通常赤、緑、白、黒がUSB用、
> 茶色がhost/周辺機器判別用だ。
>
> 黒、茶色の線の被服を途中で剥く。
> 燃えてしまわないよう注意しながらライターであぶる。
> こうすると被服が溶けて剥きやすい。
>
> 2本を剥いた部分で短絡させ、半田付けする。
> これでHostモードケーブルの出来上がり。
>
> 野心的なあなたは、2本の線の間にスイッチを設置するといいだろう。
> そのケーブルはどっちの用途にも使えるようになる。

W-ZERO3[es]の時と同じですね。

しかし、この改造をするには、信号線5本全結線されていないといけません。
さもなくば、Micro USB側のコネクタの樹脂を破壊する改造が必要になってきてしまいます。

CA-101が全結線かどうか分かりませんし、替えが無く、通販で入手するしか無いものを改造に供するのは気が引けるので、僕はやりませんでした。

方法2: 強制的にUSB Hostモードへ移行させる

方法1とは別に、ケーブルに手を入れずに、強制的にUSB Hostモードへ移行する方法があります。

それは、以下のようなコマンドを実行するというものです。

N800の時からできたことですが、ケーブルの入手が困難なN810においては、より価値が高まってますね。

USB Hostモードへの強制的な移行

$ sudo gainroot
# echo host >/sys/devices/platform/musb_hdrc/mode
# exit

USB Hostモードから、デフォルトのモード(On-The-Go)への復帰

$ sudo gainroot
# echo otg >/sys/devices/platform/musb_hdrc/mode
# exit

デフォルトでは「sudo gainroot」コマンドは使えません。
flasherでR&Dモードにするか、パッケージ「becomeroot」をインストールして、「sudo gainroot」できるようにする必要があります。

管理者権限の取得については、こちらのエントリを参考にしてください。

[N810]NOKIA N810のキーボードカスタマイズ

USB Hostモードに移行したら、CA-101と、Aメス<>Aメスのジェンダチェンジャを組み合わせてUSB機器を接続できます。

いろいろつないでみた

というわけで、「方法2」で早速いろいろなものをつないでみました。

KINESIS Advantage USB

キーボードとしては結構電気を食う方ですが、使えました。

キーボードに共通した問題として、つなぐとストレージデバイスとして自動マウント処理をしようとし、エラーダイアログが出てしまうというものがあります。動作には問題ありません。

ケーブルが邪魔ですが、本体を真ん中のスペースに置くとちょうどいい。

Happy Hacking Keyboard

むかーし買った3モードのHappy Hacking Keyboardを、USB to PS/2アダプタを介してつないでみました。

問題無し。

Twiddler2

片手キーボードTwiddler2のUSB版をつないでみました。

トラックポイントには反応しませんが、使えます。

GR-DIGITAL

GR-DIGITALをマスストレージモードでつないでみました。

問題無し。

アンマウントは、ステータスバーのUSBアイコンを使って実行します。

メモリカードリーダ

メモリカードリーダをつないでみました。BUFFALOのMCR-C12/U2。特に問題無し。

ファームウェアが古かったので、SD化したMicro SD 2Gが認識しませんでしたが、アップデートしたら認識するようになりました。Micro SD 8GB(SanDisk)は、いかようなアダプタを挟んでも認識しませんでした。

Micro SD 8GBは、付いてきたMicro SD to USBアダプタでも認識しませんでした。

SDHCを認識させる要件は何なのでしょうか。

| | Comments (0) | TrackBack (0)

2008.01.24

[N810]NOKIA N810上のEmacsでクリップボードを扱う

NOKIA N810でEmacsを使うようになってまず不便に思うのは、現状のmaemo-cjkを入れた環境ではキーボードのスペシャルキーのロックが利かないこともそうですが、クリップボードとの連携ができないことです。

Linux Zaurusではyaktyさんのqcfと、namさんのqcf-copy / qcf-pasteを使っており、qcfの代わりになるコマンドを探せばよさそうです。

ZaurusではQteのクリップボード(QClipboard)でしたが、N810のOS2008の場合はGTKベースですので、GTKのクリップボードと標準入出力のブリッジを探すことになります。

しかし、これというものを見つけることができなかったので、自分で作ることにします。

Ruby-Maemoを調べた時にRuby/GTK2が含まれているのを知ったので、それでやってみました。

clip.rb

GTKのクリップボードと標準入出力のブリッジの役を果たすRubyスクリプトです。

Thomas Leeさんのブログを参考にコピペしました(それは参考とは言わない)。

#!/usr/bin/env ruby

require 'kconv'
require 'gtk2'
require 'optparse'

def get_clip()
  puts Gtk::Clipboard.get(Gdk::Selection::CLIPBOARD).wait_for_text.toutf8
end

def set_clip()
  buf = ""
  while gets()
    buf += $_
  end
  Gtk.init
  clip = Gtk::Clipboard.get(Gdk::Selection::CLIPBOARD)
  clip.set_text(buf.toutf8)
  clip.store
end

opts = OptionParser.new

opts.on("-g"){
  get_clip()
}

opts.on("-s"){
  set_clip()
}

opts.parse!(ARGV)

クリップボード中のテキストをRubyで処理して書き戻す、などといった使い方もできますね。

clip-copy / clip-paste

Elispの方です。namさんのものを改造しました。

;#####################
;# for clip.rb
;#####################
(global-set-key "\C-cc" 'clip-copy)
(global-set-key "\C-cv" 'clip-paste)

(defun clip-copy ()
  ;; Copy region on current buffer to clipboard on maemo.
  (interactive)
  (let ((coding-system-for-write 'utf-8))
    (message "... copy to clipboard")
    (call-process-region (region-beginning) (region-end) "clip.rb" nil nil nil "-s")
    (message "")))

(defun clip-paste ()
  ;; Paste maemo clipboard to current buffer.
  (interactive)
  (message "... paste from clipboard")
  (let ((s (point))(e))
    (let ((coding-system-for-read 'utf-8))
      (call-process "clip.rb" nil t nil "-g"))
    (setq e (point))
      (if (equal e s)
          (ding)
        )
    (message "")))

インストール

clip.rbを実行権を付けてパスの通った場所にコピーします。 僕は、clip.rbをexec-pathを通した/home/user/binに置いてます。

clip.rbの実行にはRubyとRuby/GTK2が必要ですので、以下からRuby-Maemoをインストールします。

http://maemo.org/downloads/product/OS2007/ruby-maemo/

Ruby/GTK2はRuby-Maemoに含まれています。 Ruby-Maemoとは、そういう実体があるわけでなく、複数のextensionから成る複合パッケージです。

続いて、clip-copy, clip-pasteを.emacs.elなどにコピペ。 eval-bufferするか、Emacsを再起動します。

使い方

Ctl+c cでリージョンをクリップボードに転送

Ctl+c vでカレントポイントにクリップボードからペースト

インプレと展望

Linux ZaurusでできていたことがN810でもできるようになりました。

ただ、clip.rbの実行に当たってRuby/GTK2のロードに時間がかかるので、ちょっと長めに待たされます。

Thomas LeeさんのブログにはC版のソースも載っているので、いずれ作ってみようかと思っていますが、保証の限りではありません。

#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <string.h>

int main (int argc, char **argv) {
    const char *message = "Hello, World";

    /* initialize GTK */
    gtk_init (&argc, &argv);

    /* set the clipboard text */
    gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), message, strlen(message));

    /* store the clipboard text */
    gtk_clipboard_store(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));

    return 0;
}

browse-urlの設定が残されてますが、コマンドラインからブラウザにURLを表示させる方法が分からない……。

ご存知の方がいらしたら教えてください。

| | Comments (2) | TrackBack (0)

2008.01.18

[N810]NOKIA N810のキーボードカスタマイズ

NOKIA N810が届きました(えっ!?)。

やはりキーボードが固いですね。親指の先でなく、親指の腹で押すようにすると少しいいかなという感じがします。

せっかくのキーボードですが、固い上に必要なものがいろいろありません。
Escこそ液晶横のバックボタンで代用できますが、Tab, Esc, "|", "[", "]", "{", "}", "`"などなど。
一般の人はあんまり使わないでしょうが、NOKIA N810を買うようなアレな人は気になるはず。

カスタマイズの方法を探してみると、色男Mike Rowehl氏のブログのエントリ「Adding Pipe and Tab to the N810 Keyboard」にいろいろと書いてありました。
Mike Rowehl氏は「xmodmap」を使う方法を提案していますが、このエントリに寄せられたtajuma氏のコメントにある、以下のファイルを直接編集する"brute force solution"をまねしてみました。

/usr/share/X11/xkb/symbols/nokia_vndr/rx-44

何はともあれosso-xterm

「osso-xterm」をインストールします。
maemoのDownloadページからインストールできたと思います(後で書きます)。
ここで引っかかる人は居ないですよね。

root権限でシェルを実行する準備

「/usr/share/X11/xkb/symbols/nokia_vndr/rx-44」を編集するにはroot権限が必要ですが、標準状態ではroot権限を取得する方法が無いようです。suしようにも以下のようなエラーが出ます。

su: applet requires root privileges!

Linux Zaurusにおけるアイコン長押しに相当する設定方法があるのでしょうか。

sudoするとパスワードを聞かれますが分からず。
検索してもこれというものを見ないので、どうやらrootのパスワードは公開されていないようですね。

正式には「flasher」を使ってR&Dモードにすることによってroot権限を得るそうですが、それには母艦とのUSB接続が必要です。
N810単体でも「becomeroot」というパッケージをインストールすると、root権限のシェルが実行できるようになります。

N810標準のパッケージ管理ツールは「Application manager」ですが、標準状態で登録されている公式のリポジトリだけでは用が足せません。maemoの世界では、野良リポジトリが負う部分が大きいようです。
「becomeroot」を置いているリポジトリをはじめ代表的なリポジトリは、次なる手順で一網打尽的に登録できます。

  • N810のブラウザで「http://gronmayer.com/it」にアクセス
  • ページの一番下までスクロール、「Select All Repositories.」をクリック
  • 「Install Selected」ボタンをクリック
  • リポジトリを一つ追加するごとにダイアログが表示されるので、逐一「OK」をクリック

登録を済ませ、「Application manager」を起動し、「Show installable applications>All」とたどると「becomeroot」が現れるはずです。これをインストールします。
以降、「sudo gainroot」でroot権限のシェルが実行できます。

「easyroot」という同目的に使うと思われるパッケージもありますが、「becomeroot」とは排他利用となります。「easyroot」はまだ使ったことがありません。

「sudo gainroot」なんて気持ち悪いコマンドなど使いたくないので、普通に「su」ないし「sudo」できるようにしたいところです。
このリポジトリ登録方法含め「Hacking the Nokia N810」に全部書いてありますが、passwdでrootのパスワードを変更してもsu/sudoできてません。
とりあえず「sudo gainroot」でroot権限のシェルは実行できるので、この問題は後回しにします。

設定ファイルの編集

ここまで来たら、後は「/usr/share/X11/xkb/symbols/nokia_vndr/rx-44」を編集するだけです。

$ sudo gainroot
# cd /usr/share/X11/xkb/symbols/nokia_vndr
# cp rx-44 rx-44.org
# vi rx-44

編集後のファイルをアップしておきます。
「Version: 1.2007.42-19」のものです。バージョンが違う場合は、そのまま使わない方がいいかと思います。

「rx-44」をダウンロード

オリジナルはこちら。

「rx-44.org」をダウンロード

編集したのは以下の部分です。

key <AB07> { [ m, M, bar, bar ] };
key <AB08> { [ comma, less, bracketleft, braceleft ] };
key <AB09> { [ period, greater, bracketright, braceright ] };
key <BKSP> { [ BackSpace, BackSpace, Escape, BackSpace ] };
key <SPCE> { [ space, space, Tab, space ] };
key <AC10> { [ semicolon, colon, grave, grave ] };
key <COMP> { [ Control_L, Control_L, Control_L, Multi_key ] };
modifier_map Control { Control_L, Control_R };

オリジナルのファイルのバックアップを取っていなかったので、持っている方がいらしたら都合していただけないでしょうか(笑)。534さんありがとうございました。

編集した後に、以下も実行しておきます。
元ブログのコメントに書いてあるのは「-set」となっていてエラーが出るので注意してください。

gconftool-2 --set -t string "/apps/osso/keybindings/global/osso-global-search" ""

この操作で、Ctrl+Eで検索のダイアログが出なくなるようになります。
これをやっておかないと、例えばxtermを使っている際にCtrl+Eで行末に飛ぼうと思うと検索のダイアログが出てしまうなどという、いただけない状況に舌打ちすることになります。

設定後の効能

設定後、control panel のText input settingsを起動してOKを押すか(Tezさん情報)、電源ボタンを押し「Switch off!」で電源を切り、再起動すると以下のようなキーないしキーコンボで当該文字が入力できるようになっているはずです。

Chr -> Ctrl(Ctrlを左右二つにしたわけです)
Fn + Space → Tab
Fn + BS → Esc
Fn + m → "|"(ユーロをつぶします)
Fn + ; → "`"(ポンドをつぶします)
Fn + , → "["
Fn + . → "]"
Shift + Fn + , -> "{"(Shiftを押してからFn+,)
Shift + Fn + . -> "}"(Shiftを押してからFn+.)

カーリーブレースを割り当てた「Shiftを押してからFn+〜」というのは、Shiftが先でないとダメなので、親指でヒールアンドトゥーをするがごとくに操作をします。

親指タイピングを快適にするため、同時押しでなく、Shift、Fn、Ctrlなどのスペシャルキーを押してから次のキー、という操作ができるよう「sticky toggle latch」などという単語でググってますが、これという情報に当たらないですね。
できるようになる方法をご存知の方がいらしたらぜひ教えてください。

2008.1.24追記:「latchToLock LatchMods setxkbmap」などでググるとどうもそれらしき設定が……。

http://www.charvolant.org/~doug/xkb/

その他設定

標準のシェルである「ash」はショボいし挙動不審なので、「bash3」をインストールしました。
/etc/passwdを編集し、ログインシェルをbashにしました。

user:!:29999:29999::/home/user/:/bin/bash

また、busybox版で不満が残る「vi」は、「vim」で置換しました。
~/.profileに以下のように書いておきました。

alias vi=vim

このvim、UTF-8に対応していて日本語が扱えます。このエントリの一部もN810上のvimで書きました。

| | Comments (7) | TrackBack (4)

その他のカテゴリー

Chumby | DTP | Emacs | Linux Zaurus | Mac OS X |