halによるXのキーボード設定
/usr/local/etc/hal/fdi/policy/10-x11-kbd.fdi を次の内容で作成.
<?xml version="1.0" encoding="ISO-8859-1"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.keyboard"> <match key="info.udi" string="/org/freedesktop/Hal/devices/atkbd_0"> <merge key="input.x11_options.XkbRules" type="string">xorg</merge> <merge key="input.x11_options.XkbModel" type="string">jp106</merge> <merge key="input.x11_options.XkbLayout" type="string">jp</merge> <merge key="input.x11_options.XkbOptions" type="string">ctrl:nocaps</merge> </match> <match key="info.udi" string="/org/freedesktop/Hal/devices/kbd_2"> <merge key="input.x11_options.XkbRules" type="string">xorg</merge> <merge key="input.x11_options.XkbModel" type="string">pc101</merge> <merge key="input.x11_options.XkbLayout" type="string">us</merge> <!-- <merge key="input.x11_options.AlwaysCore" type="string">yes</merge> --> </match> </match> </device> </deviceinfo>
上のmatchの塊は, 本体のキーボードの分で, 下のmatchの塊は外付けしたときの分のつもりだけど, 外付けのは最近付けておらず, 適当に書いたのでたぶんinfo.udiの値が違う.
上のファイルを作ったら, haldをリスタートして読み込ませる. lshal(1)のたくさんの出力のうち,
udi = '/org/freedesktop/Hal/devices/atkbd_0' freebsd.device_file = '/dev/atkbd0' (string) freebsd.driver = 'atkbd' (string) freebsd.unit = 0 (0x0) (int) info.capabilities = {'input', 'input.keyboard'} (string list) info.category = 'input.keyboard' (string) info.parent = '/org/freedesktop/Hal/devices/atkbdc_0' (string) info.product = 'AT Keyboard' (string) info.subsystem = 'platform' (string) info.udi = '/org/freedesktop/Hal/devices/atkbd_0' (string) input.device = '' (string) input.x11_driver = 'kbd' (string) input.x11_options.XkbLayout = 'jp' (string) input.x11_options.XkbModel = 'jp106' (string) input.x11_options.XkbOptions = 'ctrl:nocaps' (string) input.x11_options.XkbRules = 'xorg' (string) platform.id = 'atkbd.0' (string)
というようinput.x11_optionsが付いているかどうかで, halにうまく設定が渡ってるか分かる. うまくいってなかったら, fdiファイルの書き方がおかしい.
# /usr/local/sbin/hald --daemon=no --verbose=yes
として出力を見ると, 文法エラーとかは見付かる.
X.orgにhalの設定が反映されているかどうかをチェック. Xorg.0.logを見て,
(II) Loading /usr/local/lib/xorg/modules/input//kbd_drv.so (II) Module kbd: vendor="X.Org Foundation" compiled for 1.5.3, module version = 1.3.2 Module class: X.Org XInput Driver ABI class: X.Org XInput driver, version 2.1 (**) AT Keyboard: always reports core events (**) Option "Protocol" "standard" (**) AT Keyboard: Protocol: standard (**) Option "AutoRepeat" "500 30" (**) Option "XkbRules" "xorg" (**) AT Keyboard: XkbRules: "xorg" (**) Option "XkbModel" "jp106" (**) AT Keyboard: XkbModel: "jp106" (**) Option "XkbLayout" "jp" (**) AT Keyboard: XkbLayout: "jp" (**) Option "XkbOptions" "ctrl:nocaps" (**) AT Keyboard: XkbOptions: "ctrl:nocaps" (**) Option "CustomKeycodes" "off" (**) AT Keyboard: CustomKeycodes disabled (II) XINPUT: Adding extended input device "AT Keyboard" (type: KEYBOARD)
とかなんとかなってればたぶんOK. 特に指定していないOptionも見られるが, XkbdOptionsでctrl:nocapsになってるのはたぶんデフォルトではないだろうと思うので, 反映されてるのだろう.