« [iPod touch]Mac OS XとiPod touch間で「Touchmods SIP-VoIP」を使って音声チャット! | Main | [N810]NOKIA N810上のEmacsでクリップボードを扱う »

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で書きました。

|

« [iPod touch]Mac OS XとiPod touch間で「Touchmods SIP-VoIP」を使って音声チャット! | Main | [N810]NOKIA N810上のEmacsでクリップボードを扱う »