日別アーカイブ: 2009年9月26日

NetWalker PC-Z1 Bluetooth とキーカスタムその他

●Bluetooth

Bluetooth アダプタ Princeton PTM-UBT3S, PLANEX BT-Mini2EDR を使ってみました。

・システム → システム管理 → Synaptic パッケージマネージャー
・gnome-bluetooth をインストール指定 → 適用
・いったんログアウトして再ログイン

アダプタを接続すると通知スペースに Bluetooth のアイコンが表示されるので
そこからペアリング等を行います。または システム → 設定 → Bluetooth 。

ペアリングしたもの。
マウス SONY VGP-BMS33, キーボード REUDO RBK-2100BTJ

二回ほどサスペンド後にアダプタを認識してないことがありましたが、
電源入れ直し等で復活。以降は今のところ動いています。

●キーボード

購入時からキーボードの配列のカスタマイズを考えていました。
本当は uinput を使いたいのですが module uinput.ko が無かったので取りあえず
xmodmap を使います。

$ xmodmap -pke > $HOME/.Xmodmap

以降 .Xmodmap の書き換えでキー配列の入れ替えができます。
書き換えた内容はログインし直しで適用されるはずです。
その場で確認するなら

$ xmdomap $HOME/.Xmodmap

上のコマンド実行だけだとサスペンド後に配列が戻ってしまいます。
再ログインしておけばサスペンド後も有効となります。
$HOME に .Xmodmap で始まるファイルが複数ある場合、ログイン時にどれを用いるか
選択画面が出ます。

実際に設定してみます。
例えば [/?] (61) と [;+] (47) を入れ替えるなら 61 と 47 を交換します。

!keycode  47 = semicolon plus semicolon plus semicolon plus
keycode  61 = semicolon plus semicolon plus semicolon plus

!keycode  61 = slash question slash question slash question
keycode  47 = slash question slash question slash question

Shift や Control キーを入れ替える場合はモディファイヤの再登録が必要です。

[ J ][ K ][ L ][/? ][Ent]
 [ M ][<,][>.][ ↑ ][Sft]

  ↓

[ J ][ K ][ L ][;+ ][Ent]
 [ M ][<,][>.][ /? ][ ↑]

例えば内蔵キーボードの右下部分を上記のように並べ替えるには

! ファイル先頭で remove
remove shift = Shift_R

!keycode  47 = semicolon plus semicolon plus semicolon plus
keycode  61 = semicolon plus semicolon plus semicolon plus

!keycode  61 = slash question slash question slash question
keycode  111 = slash question slash question slash question

!keycode  62 = Shift_R NoSymbol Shift_R NoSymbol Shift_R
keycode  47 = Shift_R NoSymbol Shift_R NoSymbol Shift_R

!keycode 111 = Up NoSymbol Up NoSymbol Up
keycode 62 = Up NoSymbol Up NoSymbol Up

! ファイル最後で add し直し
add shift = Shift_R

●キーボードカスタマイズ uinput

User Input を利用するとプログラムでキーの挙動をカスタマイズすることが可能です。
下記のページを参考にさせていただきました。

Linux Input Subsystemの使い方

x86 PC の Ubuntu 上で試してみました。
入力を遅延判定させた場合のバッファリングとかそのフラッシュなど、Windows /
WindowsMobile 上で ctrlswapminiem1key を作っていたときとほとんど同じ感覚です。
おそらく同等のプログラムの移植も可能だと思います。
日本語入力の状態が取得できれば親指シフト入力も対応できるでしょう。

(2009/10/03 追記: 親指シフトについてはこちらをどうぞ)

NetWalker 向けのプログラムも作ったのですが uinput が使えずまだ試しておりません。
実際のプログラム例は下記の通りです。
これは [A] と [B] を交換するだけです。サンプルにあった hook_main.c/.h をそのまま
使わせていただきました。hook_main.c をリンクするだけで動作します。

// swap_AB.c
// swap_AB /dev/input/event*
#include  
#include  
#include  
#include  
#include  "hook_main.h"

const char*  name= "swap_AB";
const char*  version_information= "swap_AB";
const char*  description= "swap_AB";

static int   keyboard_fd= 0;

void* init_event_handler( int number_of_event_device_files, int* event_fds )
{
    ioctl( keyboard_fd= *event_fds, EVIOCGRAB, 1 );
    return  NULL;
}

void finalize_event_hander( void* user_data )
{
    ioctl( keyboard_fd, EVIOCGRAB, 0 );
}

void handle_event( int fd, struct input_event event, void* user_data )
{
    int	vk= event.code;
    if( event.type == EV_KEY ){
        switch( vk ){
        case KEY_A:
            vk= KEY_B;
            break;
        case KEY_B:
            vk= KEY_A;
            break;
        }
    }
    send_event( event.type, vk, event.value );
}

void set_event_bits( int ui_fd )
{
    int	i;
    ioctl( ui_fd, UI_SET_EVBIT, EV_KEY );
    for( i= 0 ; i< 256 ; i++ ){
        ioctl( ui_fd, UI_SET_KEYBIT, i );
    }
}

●その他気がついたことなど

最初すぐにバッテリーが減ったように見えるけど、ステータスでは「バッテリー容量:中」。
容量とアイコンの見た目が合っていません。

フラッシュメモリの容量は 4GB ですが、初期状態の空きはおよそ 2.7GB でした。
カタログには「ユーザーエリア 2GB」と書かれているので若干余裕があります。

RAM 容量は 512MB、利用可能な空間は 480MB。
Firefox、ドキュメントビューア、コンソールを起動して消費メモリは 200MB くらい。
ページを複数開いてもまだまだ大丈夫です。

「パネルへ追加」から「CPU 周波数の計測モニタ」を追加してみました。
CPU クロックはピーク時 800MHz で、アイドル時は 160MHz まで落ちているようです。

上パネルの時計の設定から都市を登録しておくと天気や温度も表示されます。

[Fn]+[8] で画面のバックライトだけ消すことが可能です。

黒い色を買ったせいか汚れは結構目立ちます。
ストラップをつけられるのは便利です。手でもって使う場合も安心。

仕様一覧によるとフレームバッファは 16bit 65536色です。

関連エントリ
NetWalker PC-Z1 意外にいける
Netwalker PC-Z1 買いました
タッチタイプの境界
NetWalker PC-Z1