comment -*- mode: text; tab-width:2; indent-tabs-mode:nil -*-

Framebuffer 対応に関するメモ

* テスト環境
  Arch Linux
  CentOS 5
  (Linux kernel 2.6 以降対応)

  FreeBSD 9.0
  FreeBSD(98) 4.11

  NetBSD teokure 9.0

  OpenBSD 5.3

* ビルド
  ./configure --with-gui=fb (--disable-anti-alias) ...
  make
  sudo make install
  (インストール先は、X 版 mlterm と同じディレクトリで構いません。
   この場合、すでに X版 mlterm がインストールされていれば、全てのファイルを
   make install しなくても、make install-fb で、mlterm-fb 及び
   libim-*-fb.so ファイルだけインストールしても、問題ありません。)

* 設定
  フォント設定以外は、X 版 mlterm と同じです。
  なお、mlterm-fb を起動する前に、必ずフォントの設定を行ってください。

  o フォントの設定方法
    ~/.mlterm/font でなく、~/.mlterm/font-fb に、使用したい pcf 又は true type
    フォントを設定してください。font-fb のフォーマットは font と基本的には同じ
    ですが、XLFD ではなく、使用するフォントファイルのパスを記載します。
    (etc/font-fb がサンプルです。)
    true type フォントの表示には、あらかじめ freetype をインストールしておく
    必要があります。

    mlfc コマンドを実行すると、true type フォントを検索し、~/.mlterm/font-fb を
    自動的に生成します。

    また、mlterm-fb --aafont と起動すると、~/.mlterm/*font-fb ではなく、
    ~/.mlterm/*aafont の設定を読み込み、fontconfig を使ってフォントを検索します。

    なお、true type フォントを使用しない場合は --disable-anti-alias オプション、
    fontconfigを使用しない場合は --disable-fontconfig オプションを指定して、
    ./configure し、ビルドしてください。

* 起動方法
  mlterm-fb (-fg white -bg black -sb=false)

* 留意事項
  (for Linux)
  o キーボードに対応する /dev/input/event<num> が存在しない、又はアクセスする権
    限がない場合、ショートカットキーは使用できません。
    なお、キーボードに対応する /dev/input/event<num> は、
    /sys/class/input/input<num>/name の文字列に "key" が含まれているかどうかで判
    定しています。
    KBD_INPUT_NUM 環境変数により、<num>の値を指定することもできます。
    (KBD_INPUT_NUM には、<num>,<num> のようにコンマで区切って複数の <num> を指定
    することも可能です。)
  o キーボードレイアウトを変更したい場合は "loadkeys jp106" のように loadkeys コ
    マンドを実行してください。
  o ドイツ語などのキーボードで、いわゆるデッドキーを使って、発音記号がついた文字
    を入力する場合に使用する変換テーブについては、mlterm-fb 起動後に loadkeys コ
    マンドでキーボードレイアウトを変更しても、基のキーボードレイアウトのもののま
    ま変わらないので注意してください。
  o マウスに対応する /dev/input/event<num> が存在しない、又はアクセスする権限が
    ない場合、マウスを使うことはできません。
    なお、マウスに対応する /dev/input/event<num> は、
    /sys/class/input/input<num>/name の文字列に "mouse" が含まれているかどうかで
    判定しています。
    MOUSE_INPUT_NUM 環境変数により、<num>の値を指定することもできます。
    (MOUSE_INPUT_NUM には、<num>,<num> のようにコンマで区切って複数の <num> を指
    定することも可能です。)
  o マウスを使用する場合、gpm は停止しておいてください。
    (/etc/init.d/gpm stop)

  (for FreeBSD)
  o あらかじめ、SC_PIXEL_MODE 及び VESA オプション付きのカーネルで起動(又は起動
    後にカーネルモジュールをロード)し、vidcontrol コマンド等により、適切な表示モ
    ードを指定してください。
    $ vidcontrol MODE_XXX
    (vidcontrol -i modeで表示される全てのモードで mlterm-fb が起動するわけではな
    いので注意してください。)
  o キーリピートを変更する場合は kbdcontrol -r [delay.repeat] で、write-combine
    を有効にする場合は memcontrol set -b 0x.... -l 0x.... write-combine で、それ
    ぞれあらかじめ設定しておいてください。
  o キーボードレイアウトを変更したい場合は kbdcontrol -l cz のように kbdcontrol
    コマンドを実行してください。
  o FreeBSD 5.0 以上で、マウス(/dev/sysmouse)を使用する場合、あらかじめ、次のよ
    うに moused を起動しておいてください。
    $ /etc/rc.d/moused onestart
  o FreeBSD(98)では、4 bpp のみサポートしています。

  (for NetBSD)
  o See https://gist.github.com/tsutsui/5689730
    (Thanks to @tsutsuii san)
  o NetBSD/x68k 用の mlterm-fb をビルドするか、wscons 用の mlterm-fb をビルドす
    るかは、./configure が自動的に判定しますが、--with-gui=x68kgrf 又は
    --with-gui=wscons オプションを指定すると、どちらにするか強制的に指定すること
    も可能です。
  o /boot.cfg に次のように vesa を指定して起動してください。
    menu=Boot ... vesa 0x13e;boot
                  ^^^^^^^^^^ -> 0x13e は 640x400x32 (boot prompt で > vesa list)
  o キーリピートは、~/.mlterm/main に次のオプションを指定することで変更できます。
    ただし、指定できる値は25ms単位になります。
    kbd_repeat_1=400
    kbd_repeat_N=50
  o キーボード入力は、/dev/wskbd を使って読み込みます。別のデバイスを使用したい
    場合は、WSKBD 環境変数にそのデバイス名を指定してください。
    (e.g. export WSKBD=/dev/wskbd0)
  o キーボードレイアウトを変更したい場合は wsconsctl -w -k encoding=cz のように
    wsconsctl コマンドを実行してください。
  o 8 bpp で使用した場合、色が正しく表示されません(要修正)。
  o Input method plugin として iBus を使用する場合は、./configure に
    --without-pthread を指定してビルドしないでください(mlterm-fb に pthread ライ
    ブラリをリンクしておかないと、ibus module の dlopen に失敗します。)。
  o 1・2・4 bpp では、壁紙等は ANSI color から近似色を検索して表示しますが、
    4 bpp で --colors=false (use_ansi_colors=false)を指定し、16色以下の sixel を
    背景にセットした場合は当該画像のパレットを使用します。
  o NetBSD/luna68k では、--depth=1 又は --depth=4 により、1bpp と 4bpp を切り替
    えることができます。
  o NetBSD/x68k では ~/.mlterm/main に次のように指定することで、解像度を変更でき
    ます。サポートする解像度は、512x512x15 512x512x8 768x512x4 768x512x1
    1024x768x4 1024x768x1 640x480x4 です。
    fb_resolution=512x512x15
  o NetBSD/x68k では、fb_resolution=768x512x4、1024x768x4 又は 640x480x4 の場合
    に、 --multivram=false 又は separate_wall_picture=false オプションを指定しな
    ければ、壁紙のみ Text VRAM に (その他は Graphic VRAM) に描画します。これによ
    り、スクロール速度が改善します。

  (for OpenBSD)
  o 次の2行を有効にしてカーネルの再構築を行ってください。
    (OpenBSD 4.9以降では http://mlterm.sourceforge.net/openbsd-5.3-fixvesa.patch
    も当ててください)
    vesabios0 at mainbus?
    option VESAFB
  o ~/.mlterm/main に次のように指定することで、解像度を変更できます。
    fb_resolution=800x600x32
  o キーリピートは、/etc/wsconsctl.conf に設定するか、wsconsctl コマンドで指定し
    てください。
    $ wsconsctl keyboard.repeat.del1=400
    $ wsconsctl keyboard.repeat.deln=50
  o キーボード入力は、/dev/wskbd を使って読み込みます。別のデバイスを使用したい
    場合は、WSKBD 環境変数にそのデバイス名を指定してください。
    (e.g. export WSKBD=/dev/wskbd0)

  (Common)
  o 画面の右下隅でマウスの左ボタンをダブルクリックすると、ソフトウェアキーボード
    を使用することができます(1・2・4 bppを除く。)。
  o mlcc を使ってフォント設定を動的に変更する場合には、
    $ mlcc font-fb ...
    でなく、X 版と同様、
    $ mlcc font ...
    としてください。
  o 画面にゴミが残ったり、8 bpp での cmap の設定が変わってしまった場合には、
    $ mlcc exec update_all
    としてください。
  o 使用可能なスクロールバーは、simpleのみです。
    ただし、1 bpp の場合は、スクロールバーありの状態で画面スクロールを行うと、ス
    クロールバーの表示が乱れることがあるため、使用は推奨しません。
  o 使用可能な Input method plugin は、kbd、canna、wnn、skk、m17nlib、uim、iBus
    及び fcitx です。
    (iBus を使用する場合は、あらかじめ、ibus-daemon -d 及び
     /usr/lib/ibus-*/ibus-engine-* & を手動で起動しておいてください。
     なお、iBus はFreeBSD 上ではテストしていません。)
  o ディスプレイが 8 bpp 以上の場合は、--rotate=right 又は --rotate=left オプシ
    ョンを付けてmlterm を起動するか、~/.mlterm/main に
    rotate_display = right 又は
    rotate_display = left
    と指定することにより、90度回転することができます。mlterm 起動後に
    $ mlcc rotate_display right 又は
    $ mlcc rotate_display left
    と実行する方法もあります($ mlcc rotate_display none で元に戻ります)。

* 使えない機能
  o Daemon mode
  o mlclient (mlclientxは使えます。)
  o ~/.mlterm/key の OPEN_SCREEN
  o geometry オプション
