Xサーバ1.7→1.8、HAL から udev

Ubuntu 9.10 では /etc/X11 ディレクトリから xorg.conf が消えてます。

以前はグラフィックドライバなどの関係でこのファイルの中身をいじっていたけれど、最近は何もせずとも Compiz が使えたりするので、これに関してはまったく気に留めていませんでした。

しかし、Wacom の新Bambooを動かそうとする過程で思い出したのは、この xorg.conf に Ubuntu 7.10 の頃は wacom の名前がズラズラと記載されてたこと。

一方で、現在 wacom ドライバに関して HAL だとか fdi とか udev ルールみたいなわけがわからない用語がビシバシ出てくる。

こりゃ、この辺りの仕組みをざっと簡単に押さえておいたほうがいいなってことで、まずは HAL について。

現在の karmic では xorg.conf  のサポートは継続しつつ、入力デバイスの設定は HAL の fdi ファイルの方でするのが基本らしい。

xorg.conf は HAL によるデバイス自動検知機能を無効にするために利用したりとか。

xorg.conf に記述した入力デバイスについては、ホットプラグ(プラグアンドプレイ)が効かないみたい。

https://wiki.ubuntu.com/X/Config/Input

なるほど。

HAL について wiki を参照してみると。

http://ja.wikipedia.org/wiki/HAL_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)

  • HAL を使うと、ハードウェアの種類毎の重要な情報が一貫した形式で利用可能となる。
  • 事実上、HAL はプラグアンドプレイを可能とする。
  • HALはすでに旧態化しており、現在は単にメンテナンスのみが行われている。HALの機能はDeviceKitやudev等に移行している。

Ubuntu 9.10 karmic のXサーバは 1.6 系で、ハードディスク等や電源周りのハードウェア管理に関しては、すでにそれぞれ DeviceKit-disks(Xサーバ 1.8 からは udisks という名称に) と DeviceKit-power(1.8 からは upower に)に移行済み。

訂正:Xサーバ 1.7 の Ubuntu lucid で、すでに udisks , upower に名称変更済みになっておりました。

Xサーバ 1.8 で入力デバイス関連を完全に udev に移行することで HAL の廃止が終了するみたいです。

Xサーバ 1.8 以降が導入されるのは Ubuntu 10.10から になると思うのでまだ先の話ですが。

追記: udisks や upower の件もそうなんですが、Ubuntu 10.04 lucid のXサーバ1.7にはXサーバ1.8の新機能がバックポートされまくりまして、HALに依存していた最後の部分である入力デバイス周りに関しても udev に移行完了しました。後述の xorg.conf.d もサポートされています。「Ubuntu lucid に xorg.conf.d/InputClass 入る」( Ubuntu lucid では /usr/lib/X11/xorg.conf.d )

で、さらに X の入力周りの代表的開発者の Peter Hutterer 氏の説明。


http://who-t.blogspot.com/2009/07/not-blaming-hal.html

「マウスが動かない」とか「ポインターがジャンプする」とか、様々な事を HAL のせいにするバグ報告をいまだ目にするが、いずれも HAL が悪いわけではない。

Xサーバから見れば、HAL は xorg.conf の単なる代替。

Xサーバにおいて、HAL が行っているシンプルな役割とは :

  1. すべての入力デバイスのリスト化( xorg.conf における InputDevice セクションに相当)。
  2. 各入力デバイスに対する適切なドライバの指定(各 InputDevice セクションにおける Driver “…” 行に相当)。
  3. キーボード・レイアウトのような、ユーザー定義の追加オプションの提供(Option “…” “…” 行に相当)。

2と3については、プログラムによる無作為な推定が介入せず、ローカルであらかじめ記述した設定の結果であることに留意。

したがって、問題の原因が HAL なのか不確かなときは、xorg.conf が存在する場合、それを編集することでその問題が修正されるかどうかを確認する必要がある。

それで問題が修正されないなら、ドライバまたはXサーバに関するバグを報告することが必要だ。


現在の Ubuntu 9.10 Xサーバ 1.6 は入力デバイスに関して HAL がメインだけれど、udev ルールを書いた設定ファイルを用意すると udev の方が有効になる状態っぽい。

Xサーバ 1.8 では、udev への完全移行にともなって設定方法も変わるとか。

Peter Hutterer 氏の最新の投稿は、その新しい設定方法を説明しながら既存の仕組みについても触れているので、ちょっと翻訳。

誰某のパッチによってどうしたとか、多少原文から省いてる部分あり。ちゃんと理解してなくて、誤訳してる部分もあるかもしれません。


http://who-t.blogspot.com/2010/01/new-configuration-world-order.html

3つの新機能:

  • udev バックエンドのサポート
  • 設定用の xorg.conf.d ディレクトリのサポート
  • xorg.conf に記述されたルールの照合のサポート

udev バックエンドのサポート

2006 年にホットプラグで接続した入力デバイスへの対応が追加されてから Xサーバ 1.7 に至るまで、これまでのバックエンドは入力デバイスの提供元として HAL と一緒に働いた。

今回 HAL は廃棄されて、少なくとも Linux においては udev に置き換えられる。

とはいえ、新しいバックエンドが HAL の代わりに udev に問い合わせする以外は、これまで通り以下の基本を踏襲。:

起動時にXサーバは有効なバックエンドに入力デバイスのリストを問い合わせて、その結果に応じてデバイスを初期化する。
稼働中に新しいデバイスが追加された場合、サーバに知らされてサーバはそのデバイスを追加する。
HAL と udev は互いに排他関係にあって、一方を有効化すると、他方が無効化される。

現在 udev は初期状態で無効にされているが、Xサーバ 1.8 ではデフォルトとなることを期待している。

未だにユーザーは HAL と evdev ドライバを混同しているが、互いにほとんど関連がない。

evdev ドライバと関連がないことは、udev バックエンドにも言える。

xorg.conf.d のサポート

ここ数年に渡り、xorg.conf のサポートは、重なり合う2つのゴールに向かって進んできた。

1つは xorg.conf を部分的にサポートしつつ、残り部分をサーバが担うようにすること。

もう1つは xorg.conf の必要性を完全に取り払うこと。

大抵のインストールでは、サーバが適切な初期設定値を持っているので、設定ファイルなしでもサーバは実用になる。

設定ファイルが必要な数少ないケースにおいても、セクションを1つ書き足たすだけで十分な場合がほとんどだ。

ところがそれでも、xorg.conf はファイル1つで構成されているので、プログラム的にそれを編集するのが容易ではないという課題が残る。

そこで、ディレクトリをベースにした設定のサポートが今回追加されたわけだが、これも先ほどのように基本はシンプル。:

xorg.conf ファイルが存在する場合はそれも加えつつ、/etc/xorg.conf.d/**.conf ファイルが読み込まれ解析される。

それはちょうど xorg.conf にセクションを追加した場合と同じような振る舞い。

したがって設定はこんな構成になる。:

:: whot@barra:~> ls -R /etc/xorg*

/etc/xorg.conf

/etc/xorg.conf.d:
10-synaptics.conf 97-wacom.conf 99-evdev.conf

xorg.conf.d よりも先に xorg.conf が解析されることには留意してほしい。

したがって xorg.conf は xorg.conf.d に対する優先権を持つ。

これにより、ディストリビューションは独自の特殊調整を xorg.conf.d ディレクトリに投入できるとともに、ユーザー個人の設定は古き良き xorg.conf に持たせることができる。

セクション単位ベースの xorg.conf をよりよくサポートするために、AutoServerLayout という新しいタグが導入された。

従来方式では、入力デバイスが有効になるには、それらが ServerLayout セクションから参照される必要がある。

AutoServerLayout を使用すると、入力デバイスはどのレイアウトに存在していてもよい。

したがって、入力に関する設定は以下のような感じになるだろう。:

Section “InputDevice”
Identifier “touchpad”
Driver “synaptics”
Option “AutoServerLayout” “on”
EndSection

上の例では、どのレイアウトが開始されたとしても、タッチパッドが常に入力デバイスのリストに含まれることになる。

InputClass の照合

ホットプラグのサポートとともに、多くの設定が HAL の fdi ファイルにさまよい込むことになってしまった。
これは決して最善の解決ではなかったのだったが、その時はそれが唯一利用可能なものであった。
udev にともない、この fdi ファイルは取り払われ、HAL 専用の設定を udev 専用の設定に移植することをユーザーに要求する代わりに、fdi 設定と同様の機能が xorg.conf(または xorg.conf.d)の一部として可能になった。

InputClasse は InputDevice に似ているが、複数のデバイスに適用することができる(1つのデバイスに複数のクラスを適用することも可能)。
これは以下のような照合条件をともなった照合ルールにしたがって働く。:

MatchProduct, MatchVendor, MatchDevicePath, MatchIsKeyboard, MatchIsPointer, MatchIsJoystick, MatchIsTablet, MatchIsTouchpad, MatchIsTouchscreen

各名称がその働きを表している。

最初の3つが従属文字列の照合条件で、その他は2進数 2値の照合条件。

input class はすべての照合ルールが適合した場合デバイスに割り当てられる。

例えば以下のセクションは、すべてのタッチパッドに対して synaptics ドライバを割り当てる。:

Section “InputClass”
Identifier “synaptics-catchall”
Driver “synaptics”
MatchIsTouchpad “on”
EndSection

または、あらゆるデバイスに適合する catchall evdev ルール。

Section “InputClass”
Identifier “evdev-catchall”
Driver “evdev”
EndSection

さらに、以下は特定のオプションを設定するより複雑な例。:

Section “InputClass”
Identifier “vendor-quirk”
MatchVendor “SomeVendor”
MatchDevicePath “/dev/magicdevice”
MatchIsTouchpad “on”
Option “Quirk” “on”
EndSection

Input classe は累積的で、与えられたオプションがまだ設定されていない場合にだけ適用される。

したがって、最初の Driver 照合が適用されることになり、evdev catchall は照合される一番最後のファイルに存在する必要がある。

これは最初少し奇妙だろうが、ユーザー定義の xorg.conf が優先権を持つことを保証してくれる。

1.8 がリリースされる前にもう少し照合条件が増えるかもしれないが、上に列挙した条件で普通の場合十分だろう。


ま、普通はこういう設定ファイルをいじる必要はないでしょうけど。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。