2009年12月アーカイブ
Seichan です.FreeBSD をクライアントとして使用する,其ノ三.
今回も X.org (X Window System) でマウスについて.
ホイールマウスを使用している場合,HAL のデフォルトの状態で,ホイールマウス等が利用できるので特にやる事はありません.
IBM のキーボードのようなトラックポイントタイプのいわゆる3ボタンチックなマウスの場合は,真ん中ボタンでのスクロールがデフォルトの状態では出来ません.
これではせっかくの IBM キーボードの良さが失われてしまいますので,これを何とかしましょう.
hal が使用するデフォルトのポリシーファイルは /usr/local/share/hal/fdi/policy に収められていますので,このファイルをコピーして編集するのが良いです.
[root@ayanami:~] > cp /usr/local/share/hal/fdi/policy/10osvendor/10-mouse-sysmouse.fdi /usr/local/etc/hal/fdi/policy
10-mouse-sysmouse.fdi は,マウス関連の設定ファイルになっています.このファイルを編集して IBM キーボードのマウス部分を設定しちゃいます.
面倒なので,編集前と編集後のファイルを以下に張り付けます.
-- 編集前
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.mouse">
<append key="info.addons" type="strlist">hald-addon-mouse-sysmouse</append>
</match>
</device>
</deviceinfo>
-- 編集後
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="info.udi" contains="/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0">
<merge key="input.x11_options.EmulateWheel" type="string">true</merge>
<merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
<merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
<merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
</match>
</device>
</deviceinfo>
Seichan が使っているのは,IBM トラベルキーボード で,USB接続のキーボードになっています.また,どうしてもマウスが使いたい場面があるので,全てのデバイスで上記設定が反映されると,今度はホイールマウスが有効に働かなくなります.
その為,まずは特定のデバイスだけにマッチさせる様に match タグでデバイスを指定しています.この場合,info.udi の文字列が /org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0 の場合に上記設定を反映させる形となります.
特定のデバイスを探す場合,lshal コマンドを実行する事で,現在 hald が認識しているデバイスの一覧が列挙されます.一覧の中には,info.vendor のベンダ名や info.product のプロダクト名が表示されます.それらいずれかにマッチさせる事でデバイスの特定が出来るのならば,match タグ内で指定する事で特定デバイスの設定に反映が可能です.
で,設定が完了したら,hald をリスタートする事で設定が反映されます.
[root@ayanami:~] > /usr/local/etc/rc.d/hald restart
正しく設定が行われているかを確認するには,X Window 上で直接試す以外にも,lshal コマンドで確認する事が出来ます.例えば,今回の様なマウスの設定の場合 /org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0 の中に以下の様に設定状態が表示されます.
-- lshal の該当部分抜粋
udi = '/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0'
freebsd.device_file = '/dev/ums0' (string)
freebsd.driver = 'ums' (string)
info.parent = '/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial' (string)
info.product = 'Composite TouchPad / TrackPoint' (string)
info.udi = '/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0' (string)
info.vendor = 'Synaptics Inc.' (string)
input.device = '/dev/sysmouse' (string)
input.x11_driver = 'mouse' (string)
input.x11_options.Emulate3Buttons = 'true' (string)
input.x11_options.EmulateWheel = 'true' (string)
input.x11_options.EmulateWheelButton = '2' (string)
input.x11_options.XAxisMapping = '6 7' (string)
input.x11_options.YAxisMapping = '4 5' (string)
input.x11_options.ZAxisMapping = '4 5' (string)
と言う事で,IBM キーボードのマウスも,ちゃんとスクロールボタンを有効に出来るのでした.
ちなみに,HAL/DBUS を使わない環境において xorg.conf の Mouse セクションに記述する事でも,当然同様の効果が得られます.
今回も X.org (X Window System) でマウスについて.
ホイールマウスを使用している場合,HAL のデフォルトの状態で,ホイールマウス等が利用できるので特にやる事はありません.
IBM のキーボードのようなトラックポイントタイプのいわゆる3ボタンチックなマウスの場合は,真ん中ボタンでのスクロールがデフォルトの状態では出来ません.
これではせっかくの IBM キーボードの良さが失われてしまいますので,これを何とかしましょう.
hal が使用するデフォルトのポリシーファイルは /usr/local/share/hal/fdi/policy に収められていますので,このファイルをコピーして編集するのが良いです.
[root@ayanami:~] > cp /usr/local/share/hal/fdi/policy/10osvendor/10-mouse-sysmouse.fdi /usr/local/etc/hal/fdi/policy
10-mouse-sysmouse.fdi は,マウス関連の設定ファイルになっています.このファイルを編集して IBM キーボードのマウス部分を設定しちゃいます.
面倒なので,編集前と編集後のファイルを以下に張り付けます.
-- 編集前
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.mouse">
<append key="info.addons" type="strlist">hald-addon-mouse-sysmouse</append>
</match>
</device>
</deviceinfo>
-- 編集後
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="info.udi" contains="/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0">
<merge key="input.x11_options.EmulateWheel" type="string">true</merge>
<merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
<merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
<merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
</match>
</device>
</deviceinfo>
Seichan が使っているのは,IBM トラベルキーボード で,USB接続のキーボードになっています.また,どうしてもマウスが使いたい場面があるので,全てのデバイスで上記設定が反映されると,今度はホイールマウスが有効に働かなくなります.
その為,まずは特定のデバイスだけにマッチさせる様に match タグでデバイスを指定しています.この場合,info.udi の文字列が /org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0 の場合に上記設定を反映させる形となります.
特定のデバイスを探す場合,lshal コマンドを実行する事で,現在 hald が認識しているデバイスの一覧が列挙されます.一覧の中には,info.vendor のベンダ名や info.product のプロダクト名が表示されます.それらいずれかにマッチさせる事でデバイスの特定が出来るのならば,match タグ内で指定する事で特定デバイスの設定に反映が可能です.
で,設定が完了したら,hald をリスタートする事で設定が反映されます.
[root@ayanami:~] > /usr/local/etc/rc.d/hald restart
正しく設定が行われているかを確認するには,X Window 上で直接試す以外にも,lshal コマンドで確認する事が出来ます.例えば,今回の様なマウスの設定の場合 /org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0 の中に以下の様に設定状態が表示されます.
-- lshal の該当部分抜粋
udi = '/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0'
freebsd.device_file = '/dev/ums0' (string)
freebsd.driver = 'ums' (string)
info.parent = '/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial' (string)
info.product = 'Composite TouchPad / TrackPoint' (string)
info.udi = '/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if0' (string)
info.vendor = 'Synaptics Inc.' (string)
input.device = '/dev/sysmouse' (string)
input.x11_driver = 'mouse' (string)
input.x11_options.Emulate3Buttons = 'true' (string)
input.x11_options.EmulateWheel = 'true' (string)
input.x11_options.EmulateWheelButton = '2' (string)
input.x11_options.XAxisMapping = '6 7' (string)
input.x11_options.YAxisMapping = '4 5' (string)
input.x11_options.ZAxisMapping = '4 5' (string)
と言う事で,IBM キーボードのマウスも,ちゃんとスクロールボタンを有効に出来るのでした.
ちなみに,HAL/DBUS を使わない環境において xorg.conf の Mouse セクションに記述する事でも,当然同様の効果が得られます.
Seichan です.FreeBSD をクライアントとして利用する,其ノ二.
今回は X.org (X Window System) です.
基本的には,x11/xorg を入れて終了です.その後の設定について.
最近の X.org は,キーボード/マウスに HAL を使いますので,dbus 及び hal を有効にします.
# 今までの様に xorg.conf に書いて使う方法もありますが,Gnome や KDE 等を使う場合は dbus/hal の方が良いと思います
[root@ayanami:~] > echo 'dbus_enable="YES"' >> /etc/rc.conf
[root@ayanami:~] > echo 'hald_enable="YES"' >> /etc/rc.conf
[root@ayanami:~] > /usr/local/etc/rc.d/dbus start
[root@ayanami:~] > /usr/local/etc/rc.d/hald start
以上で取り合えず使えるようになっています.xorg.conf の Keyboard/Mouse セクションは不要です.
X Window を起動するとキーボード,マウスが利用できる状態になっています.
ただ,問題があり,キーボードマップが英語キーボードになってしまいます.英語キーボードを使用している場合はそのままで良いのですが,日本語キーボードを使用している場合は不便ですので,さっくりと修正しましょう.
xterm 等のターミナルまたは,X Window を落としてコンソールから (または SSH 等でリモート接続して) 以下作業を実施しましょう.
hal が使用するデフォルトのポリシーファイルは /usr/local/share/hal/fdi/policy に収められていますので,このファイルをコピーして編集するのが良いです.
[root@ayanami:~] > cp /usr/local/share/hal/fdi/policy/10osvendor/10-x11-input.fdi /usr/local/etc/hal/fdi/policy
10-x11-input.fdi は,X Window を使用する際のキーボードの設定ファイルになっています.このファイルに,xorg.conf で設定した事のあるいつもの設定を追加させる事で日本語対応となります.
面倒なので,編集後のファイルを以下に張り付けます.追加した部分は太字で表しており,3行の追加で済んでいます.
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.keyboard">
<!-- If we're using Linux, we use evdev by default (falling back to
keyboard otherwise). -->
<merge key="input.x11_driver" type="string">kbd</merge>
<merge key="input.x11_options.XkbRules" type="string">xorg</merge>
<merge key="input.x11_options.XkbLayout" type="string">jp</merge>
<merge key="input.x11_options.XkbModel" type="string">jp106</merge>
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
string="Linux">
<merge key="input.x11_driver" type="string">evdev</merge>
</match>
</match>
</device>
</deviceinfo>
その後,hal をリスタートし,X Window もリスタートする事で新しい設定が反映され,日本語キーマップとして利用が可能です.
[root@ayanami:~] > /usr/local/etc/rc.d/hald restart
hal はなれるまではすごい面倒ですが,うまく使うことで例えば,USB キーボードと PS/2 キーボードのキーマップが違っていてもそれぞれにマッチしたキーマップ (日本語キーボードには,日本語マップ) を当てることが可能になります.
キーボードだとあまり面白みはありませんが,マウスだと様々なタイプのマウスが接続される可能性があるので,そういったデバイスには適している環境だと思います.
と言う事で,次はマウスじゃ
今回は X.org (X Window System) です.
基本的には,x11/xorg を入れて終了です.その後の設定について.
最近の X.org は,キーボード/マウスに HAL を使いますので,dbus 及び hal を有効にします.
# 今までの様に xorg.conf に書いて使う方法もありますが,Gnome や KDE 等を使う場合は dbus/hal の方が良いと思います
[root@ayanami:~] > echo 'dbus_enable="YES"' >> /etc/rc.conf
[root@ayanami:~] > echo 'hald_enable="YES"' >> /etc/rc.conf
[root@ayanami:~] > /usr/local/etc/rc.d/dbus start
[root@ayanami:~] > /usr/local/etc/rc.d/hald start
以上で取り合えず使えるようになっています.xorg.conf の Keyboard/Mouse セクションは不要です.
X Window を起動するとキーボード,マウスが利用できる状態になっています.
ただ,問題があり,キーボードマップが英語キーボードになってしまいます.英語キーボードを使用している場合はそのままで良いのですが,日本語キーボードを使用している場合は不便ですので,さっくりと修正しましょう.
xterm 等のターミナルまたは,X Window を落としてコンソールから (または SSH 等でリモート接続して) 以下作業を実施しましょう.
hal が使用するデフォルトのポリシーファイルは /usr/local/share/hal/fdi/policy に収められていますので,このファイルをコピーして編集するのが良いです.
[root@ayanami:~] > cp /usr/local/share/hal/fdi/policy/10osvendor/10-x11-input.fdi /usr/local/etc/hal/fdi/policy
10-x11-input.fdi は,X Window を使用する際のキーボードの設定ファイルになっています.このファイルに,xorg.conf で設定した事のあるいつもの設定を追加させる事で日本語対応となります.
面倒なので,編集後のファイルを以下に張り付けます.追加した部分は太字で表しており,3行の追加で済んでいます.
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.keyboard">
<!-- If we're using Linux, we use evdev by default (falling back to
keyboard otherwise). -->
<merge key="input.x11_driver" type="string">kbd</merge>
<merge key="input.x11_options.XkbRules" type="string">xorg</merge>
<merge key="input.x11_options.XkbLayout" type="string">jp</merge>
<merge key="input.x11_options.XkbModel" type="string">jp106</merge>
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
string="Linux">
<merge key="input.x11_driver" type="string">evdev</merge>
</match>
</match>
</device>
</deviceinfo>
その後,hal をリスタートし,X Window もリスタートする事で新しい設定が反映され,日本語キーマップとして利用が可能です.
[root@ayanami:~] > /usr/local/etc/rc.d/hald restart
hal はなれるまではすごい面倒ですが,うまく使うことで例えば,USB キーボードと PS/2 キーボードのキーマップが違っていてもそれぞれにマッチしたキーマップ (日本語キーボードには,日本語マップ) を当てることが可能になります.
キーボードだとあまり面白みはありませんが,マウスだと様々なタイプのマウスが接続される可能性があるので,そういったデバイスには適している環境だと思います.
と言う事で,次はマウスじゃ
Seichan です.FreeBSD をクライアントとして利用する為の覚え書き其ノ一.
まずはやっぱり音でしょう.と言う事でサウンド関連.
FreeBSD は割と多くのオーディオチップをサポートしており,ローダブルモジュールになっているので,まずは pciconf でデバイスを確認しつつ kldload でロードしてみるのが手っ取り早いです.
[seichan@ayanami:~] > pciconf -lv | grep -B3 -C3 multimedia
hdac0@pci0:0:27:0: class=0x040300 card=0x02111028 chip=0x293e8086 rev=0x02 hdr=0x00
vendor = 'Intel Corporation'
device = '82801IB/IR/IH (ICH9 Family) HD Audio Controller'
class = multimedia
subclass = HDA
pcib2@pci0:0:28:0: class=0x060400 card=0x02111028 chip=0x29408086 rev=0x02 hdr=0x01
vendor = 'Intel Corporation'
手元の環境だと,Intel の HD Audio なチップがのっています.
サウンド関連の kernel module をロードしてみる.sound.ko はサウンド関連で必須なモジュールです.
その後,それぞれチップにあったモジュールをロードします.
[root@ayanami:~] > kldload sound
[root@ayanami:~] > kldload snd_hda
無事チップにあったモジュールがロード出来ると,次のような出力がコンソールに出ます.dmesg コマンドや,/var/log/messages ファイルも合わせて確認して下さい.
hdac0: HDA Codec #0: Analog Devices AD1984
pcm0: <HDA Analog Devices AD1984 PCM #0 Analog> at cad 0 nid 1 on hdac0
pcm1: <HDA Analog Devices AD1984 PCM #1 Analog> at cad 0 nid 1 on hdac0
この PC の場合,前面,背面の両方にオーディオジャックがある為か 2つの pcm デバイスが現れます.
また,pcm0 が背面,pcm1 が前面にアサインされている様です.
合わせて,/dev 以下に dsp デバイスが生えているか確認して下さい.
[seichan@ayanami:~] > ls /dev/dsp*
/dev/dsp0.0 /dev/dsp0.1 /dev/dsp1.0 /dev/dsp1.1 /dev/dsp1.2
デバイスが上記の様に生成された事を確認したら,/boot/loader.conf に反映させます.
[root@ayanami:~] > echo 'sound_load="YES"' >> /boot/loader.conf
[root@ayanami:~] > echo 'snd_hda_load="YES"' >> /boot/loader.conf
この状態で,xmms 等のアプリケーションから音を鳴らす事が出来ます.上記の様に2つ以上のデバイスが生えている場合,どのデバイスを使っているか.を確認して下さい.
例えば,xmms の場合,サウンドデバイスを指定する事が出来ます.この PC の場合前面のジャックにスピーカを接続していて,pcm1 を利用する形となっている為,出力デバイスは /dev/dsp1.0 になりました.
もし,アプリケーション側で出力デバイスを指定出来ない場合,次の様に sysctl を設定する事でデフォルトデバイスを変更する事が可能です.動作としては devfs によって /dev/dsp のリンク先を /dev/dsp.n にアサインする動作となります.まず,現在の設定値の確認です.
[seichan@ayanami:~] > sysctl hw.snd.default_unit
hw.snd.default_unit: 0
default_unit が 0 の場合,pcm0 (/dev/dsp0.0) を使う事になります.他のデバイスをデフォルトとしたい場合は次の様に sysctl でデバイス番号を渡します
[root@ayanami:~] > sysctl hw.snd.default_unit=1
hw.snd.default_unit: 0 -> 1
これで改めてサウンド出力を確認して下さい.問題なく音が出るようになったら,/etc/sysctl.conf に変更を反映してしまいましょう.
[root@ayanami:~] > echo 'sysctl hw.snd.default_unit=' >> /etc/sysctl.conf
以上で,再起動後もサウンドデバイスが利用でき,且つデフォルトデバイスが変更された状態で利用が可能になります.
その他,sysctl で色々と変更出来ます.詳細は man sound(4) を参照すると良いでしょう.
取り合えず,今回はこんな感じで.
まずはやっぱり音でしょう.と言う事でサウンド関連.
FreeBSD は割と多くのオーディオチップをサポートしており,ローダブルモジュールになっているので,まずは pciconf でデバイスを確認しつつ kldload でロードしてみるのが手っ取り早いです.
[seichan@ayanami:~] > pciconf -lv | grep -B3 -C3 multimedia
hdac0@pci0:0:27:0: class=0x040300 card=0x02111028 chip=0x293e8086 rev=0x02 hdr=0x00
vendor = 'Intel Corporation'
device = '82801IB/IR/IH (ICH9 Family) HD Audio Controller'
class = multimedia
subclass = HDA
pcib2@pci0:0:28:0: class=0x060400 card=0x02111028 chip=0x29408086 rev=0x02 hdr=0x01
vendor = 'Intel Corporation'
手元の環境だと,Intel の HD Audio なチップがのっています.
サウンド関連の kernel module をロードしてみる.sound.ko はサウンド関連で必須なモジュールです.
その後,それぞれチップにあったモジュールをロードします.
[root@ayanami:~] > kldload sound
[root@ayanami:~] > kldload snd_hda
無事チップにあったモジュールがロード出来ると,次のような出力がコンソールに出ます.dmesg コマンドや,/var/log/messages ファイルも合わせて確認して下さい.
hdac0: HDA Codec #0: Analog Devices AD1984
pcm0: <HDA Analog Devices AD1984 PCM #0 Analog> at cad 0 nid 1 on hdac0
pcm1: <HDA Analog Devices AD1984 PCM #1 Analog> at cad 0 nid 1 on hdac0
この PC の場合,前面,背面の両方にオーディオジャックがある為か 2つの pcm デバイスが現れます.
また,pcm0 が背面,pcm1 が前面にアサインされている様です.
合わせて,/dev 以下に dsp デバイスが生えているか確認して下さい.
[seichan@ayanami:~] > ls /dev/dsp*
/dev/dsp0.0 /dev/dsp0.1 /dev/dsp1.0 /dev/dsp1.1 /dev/dsp1.2
デバイスが上記の様に生成された事を確認したら,/boot/loader.conf に反映させます.
[root@ayanami:~] > echo 'sound_load="YES"' >> /boot/loader.conf
[root@ayanami:~] > echo 'snd_hda_load="YES"' >> /boot/loader.conf
この状態で,xmms 等のアプリケーションから音を鳴らす事が出来ます.上記の様に2つ以上のデバイスが生えている場合,どのデバイスを使っているか.を確認して下さい.
例えば,xmms の場合,サウンドデバイスを指定する事が出来ます.この PC の場合前面のジャックにスピーカを接続していて,pcm1 を利用する形となっている為,出力デバイスは /dev/dsp1.0 になりました.
もし,アプリケーション側で出力デバイスを指定出来ない場合,次の様に sysctl を設定する事でデフォルトデバイスを変更する事が可能です.動作としては devfs によって /dev/dsp のリンク先を /dev/dsp.n にアサインする動作となります.まず,現在の設定値の確認です.
[seichan@ayanami:~] > sysctl hw.snd.default_unit
hw.snd.default_unit: 0
default_unit が 0 の場合,pcm0 (/dev/dsp0.0) を使う事になります.他のデバイスをデフォルトとしたい場合は次の様に sysctl でデバイス番号を渡します
[root@ayanami:~] > sysctl hw.snd.default_unit=1
hw.snd.default_unit: 0 -> 1
これで改めてサウンド出力を確認して下さい.問題なく音が出るようになったら,/etc/sysctl.conf に変更を反映してしまいましょう.
[root@ayanami:~] > echo 'sysctl hw.snd.default_unit=' >> /etc/sysctl.conf
以上で,再起動後もサウンドデバイスが利用でき,且つデフォルトデバイスが変更された状態で利用が可能になります.
その他,sysctl で色々と変更出来ます.詳細は man sound(4) を参照すると良いでしょう.
取り合えず,今回はこんな感じで.
