この文書は、DecibelsのUDEV Primerを著者David Babcock(Alias Decibels)の許可を得て、
五十嵐 正尚([email protected])が翻訳し、GentooJPで公開しているものです。
日本語翻訳版 最終更新日 2006-01-30
さらなる進歩により、今では純粋udevシステムを稼動することができます。 一部のデバイスがまだsysfsに対応していないので、該当するデバイスについては回避策をとらなければなりません。 純粋udevシステムを稼動できない場合の対処法として、現在2つの選択肢があります。 udevのみのシステムを稼動した上で回避策を施すか、もしくは/dev以下のデバイスファイルを生成するためにdevices.tar.bz2ファイルを使うデフォルトのGentooセットアップを使用するかのどちらかです。 これら選択肢に関する詳細は、セットアップしながら説明します。 kernel-2.6.13の時点でdevfsの使用はもう選択できません。 でもgentooのtarアーカイブファイル(devices.tar.bz2)はまだ利用可能です。 ブートローダの設定をさわる必要がなく、すなわち意図せずブート時にdevfsをロードして有効にしてしまうことがないので、新しいカーネルは、以前よりとても簡単になっています。
UDEVをインストール済みで既に動作しているなら、この文書の終わりにリンクしてあるDSDのudevルールの書き方ガイドを参照してください。
メールでの回答: まず始めにちょっとした予備情報があります。devfsでの2.6カーネルはどうなっていますか?という質問に対して、直接本人から以下のように返答がありました。
devfsはudev、この手引書の最近の更新内容:
1) 現在sysfsはGPLのコードからしか利用できないので、Nvidia社製ドライバに関する情報を更新しました。
サポート外のカードを使っている場合はデバイスノードを手動で作成しなければなりません。
新しいドライバではNvidia社はその面倒をみているようですが、古いドライバでは面倒をみてくれません。
詳しくはNvidia社製ドライバと問題のあるデバイスセクションを参照してください。
2)
問題があるデバイスを持っている方なら誰でも、明快な調整方法や回避方法を教えてください。喜んでこの手引書に追加します。
目次 x86用udevの最新の安定版は045で、非安定版は056です。
間単に言えばUDEVはsysfsと/sbin/hotplugを使用するユーザスペースでのDEVFSの置き換えです。 そのときどきのシステム構成を基に動的に/dev以下を生成したり削除したりします。システムで発生する/sbin/hotplugイベントを監視し、sysfs経由でそれらのイベントに関する情報を取得するという仕組みです。
デバイスがカーネルに追加されるかカーネルから削除されるときはいつでも、カーネルが/sbin/hotplugを呼び出すため、udevは完全にユーザスペースで動作します。 全ての名前付け制御とパミッション制御は、ユーザスペースでなされます。
さらに詳しい情報を見るためのリンク。
http://ftp.kernel.org/pub/linux/utils/kernel/hotplug/udev-FAQで、おそらく最初の質問は、次の質問でしょう。udevを使いはじめるには、まずどのようにすればいいの?
全然難しくはありません。ですがカーネルのコンパイルを一度もしたことがない場合を除きます。それはこのチュートリアルの範囲外です。
前述したように2.6カーネルをインストールおよび設定する必要があります。 次の例は2.6.14カーネル用です。古いカーネルには、同じセクションの次の記述を参照してください。
kernel-2.6.13時点で、devfsの選択はもうオプションにはありません。 オプションとしてdevfsが必要なら、以下を参照し2.6.13より低いバージョンを選択してください。
#initrdでの注意: initrdを使いたいなら、(私は使いませんが、) (訳注:デバイスノードが含まれる)tarアーカイブファイルを使用するか、 devfsサポートを備えたカーネルをコンパイルするか、 'devfs not mounting on /dev(訳注: devfsは/devをマウントできません)'に関するエラーを受け取るかのどれかをしなればならないようです。
genkernelでの注意: genkernelを使っているなら、udevを使って動作するようになったのはバージョン3.0.2fからのようです。--udevオプションを付加してgenkernelでコンパイルしてください。例: genkernel --save-config --menuconfig --udev all
補足: LILOまたはGRUBブートローダを設定する場合、gentoo=nodevfsの代わりにudevを使う必要があります。 udevオプションは手動でコンパイルされたカーネル(2.6.13より前)で使われます。 そうしないと、せっかくがんばってもudevを使いません。 例が見たいならブートローダのセクションを参照してください。 (訳注: udevを使用するなら、)カーネルとブートローダのオプションを除いて、この手引書の他の部分には従ってください。
注意:起動時の自動マウントが機能するようにdevfsを有効にしてはいけません!!。
そんなことは聞いたことがないかもしれませんが、少なくともbaselayout-1.8.6.13-r1の時点ではブートローダの'nomount'オプションを無視します。
/etc/conf.d/rcに何を設定しようともdevfsをロードしようとします。
'checking root filesystem(訳注: ルートファイルシステムをチェックします。)'が失敗し、起動しないでしょう。ファイルシステムが正常であってもです。
(訳注: これをしてしまうと、)どこか別のところからchrootし、起動時にdevfsを自動でマウントするオプションを取り除き、カーネルを再コンパイルする必要があります。
'make menuconfig'を実行する前に、'make mrproper'さえもしなければならないでしょう。
'make mrproper'を実行する前に、どこか影響しないところに
.configを確実にコピーするか、削除してください。
注意: devfsを有効にしない限りdevfsの'Automatically mount at boot(訳注: 起動時自動マウント)'のオプションは表示されません。
ということは、あえて有効にしない限り有効にされることはありません!
設定の中には直接.config自体を見れば存在するけど、menuconfigでは出現しないオプションがいくつかあります。 よって.config自体を確認しようと思うなら、以下はそうなっているべきものなので参考にしてください。 一部のカーネルではCONFIG_HOTPLUGは、General Setupのところなど以下のものとは別の場所にあるかもしれません。 (ヒント情報).configファイル内で探しているものをgrepをして、その後それを設定するためにmenuconfigに戻ってみてください。
以下はmm-sources-2.6.3-rc1-mm1の例です。
# Bus options (PCI, PCMCIA, EISA, MCA, ISA)希望するなら、今でもカーネルにDEVFS (CONFING_DEVFS_FS)をコンパイルできますが、その場合は上記の警告を見てください。 もしそうするなら、後で説明するLILOおよびGRUBのためのいくつかのブートオプションがあります。そこでdevfsとudev間での切り替え方法を説明しています。 ですが、devfsは最低限のものしか残されていないことを覚えておいてください。 さらにdevfsに切り替えてリブートすると、udev用に変更したものは保存されないことにも注意してください。 udevでデバイスの状態を保存する唯一の方法は、Gentooのデフォルトのudevインストールに含まれる/lib/udev-state/devices.tar.bz2を使うことです。 純粋udevシステムを運用する(すなわちdevices.tar.bz2を使用しない)なら、変更は全く保存されず、動的なデバイス生成となります。 udevで管理されるデバイスに対して変更を加えたいなら、/etc/udev/rules.d/10-local.rulesファイルに追加してみてください。 10-local.rulesを作成しなければならない場合、同じ場所にある50-udev.rulesを編集しないようにしてください。50-udev.rulesは、デフォルトのルールファイルです。 ユーザが作成する/してもよい10-local.rulesファイルに対し独自ルールを追加してください。 ただ、ほとんどのシステムでは何もしないでもうまく開始するので、独自のルールを追加する必要はないでしょう。それでも必要ならここで説明しているようにしてください。
bootランレベルに追加した後、defaultランレベルからhotplugを削除するためにrc-update del hotplug defaultを実行すれば、bootランレベルだけに残ります。
この時点で、udevとsysfsとhotplugを実際にインストールし終わって、準備が整ったと思うかもしれません。 ごめんなさい、まだです。 sysfsがマウントされ、/devがtmpfsにマウントされて(カーネルでtmpfsを有効にしていない場合はramfs)hotplugが開始されるまで、実際にはまだ何も機能していません。 デバイスの削除か追加をすると/sysに変化があるのがわかるでしょうけど、システムはその情報を使って何も行っていません。
/devの状態を保存する行為は、なんだかUDEVの理想に反している感じじゃないですか? udevは、必要なときにだけ、必要なデバイスをシステムに作成する動的ファイルシステムのはずです。 例えばスキャナが接続されていない場合、そのスキャナのデバイスファイルは必要ないので作成されていません。 接続したらudevはそのスキャナのデバイスファイルを作成します。 でも/devの状態が保存されるなら、次に復元されるときには、接続されていなくても存在することになるでしょう。 これをする理由は、当初は必要とされる基本的なデバイスしかudevによって作成されなかったからです。 ブロック(ハードドライブ)デバイス、端末デバイス、...など、今ではUDEVは大幅に進歩し、必要とする機能のほとんどを備えています。 それゆえに、現在udevのみのシステムを稼動することが可能です。 まだ少し問題がありますが、それらの問題に対する回避策があります。
将来的には、さらにudevのみでうまくやれるようになったときに、Gentooはおそらくdevices.tar.bz2を削除するでしょう。そうなる日は近いようです。
etc-updateを実行して更新する必要がある新規設定ファイルを、適切な位置に間違いなく置いてください。そうしないと、/lib/udev-state/devices/devices.tar.bz2にその時点の/devフォルダを保存しないでしょう。 仮にデフォルトのdevices.tar.bz2を使用するつもりはなく、かつudevのみのシステムを稼動したいなら、udevを使用するための適切な位置におく必要なスクリプトはないでしょう。
注意: baselayout-1.8.6.13-r1以上のバージョンを使用しているなら、/etc/init.d/halt.shもしくは/sbin/rcを編集する必要はありません。古いbaselayout(1.8.6.13-r1よりも前のバージョン)に対しては、次のセクションを参照してください。
より新しいbaselayout ( >=1.11.13-r1 )注意:baselayout-1.11.13-r1以降を使用する場合、ブートローダ設定(すなわちカーネル引数)にgentoo=noudevやgentoo=nodevfsを加える必要はありません。 udevが有効なシステムで/etc/conf.d/rcにautoかudevが設定されていたら、gentoo=nodevfsを使用しなくてもudevを使用してして起動します。 より早い段階で検出が必要なデバイスがあり、それ無しでは動作しない場合、ブートローダの設定にgentoo=nodevfsを書き戻して試してください。 /sbin/rcは、まだそれを認識します。 さらに(2.6.13から)2.6.14のようなより新しいカーネルを使用すると、もうdevfsはカーネルのオプションにはありません。ですので、それらのカーネルを使用する場合、nodevfsは的外れになります。
たくさんの試行錯誤を経て、これらのオプションをどのように設定できるかを以下に記述します。 (注意: ブートローダの設定では'devfs=nomount'を使用しないでください。 /sbin/rcはそのオプションを無視します。 /sbin/rcは'gentoo=nodevfs'もしくは'gentoo=noudev'を期待します。)
/etc/conf.d/rcのオプションが変更になったため、以下の記述はbeselayout-1.8.6.13-r1から1.11.13-r1の前までだけに関係します。 ですので、該当しない場合は読み飛ばしてかまいません。 さらに2.6.14のようなより新しいカーネルを使用する場合、devfsはもうカーネルのオプションではありません。
以下はデフォルトの設定です。devfsかudevのどちらででも起動できます。 ブートローダに同一カーネル(訳注: 同一バイナリ)、またはそれぞれ別のカーネルで使い分けるように設定するなら、LILOまたはGRUBに対して適切なオプションを指定してください。(gentoo=noudevかgentoo=nodevfsのどちらか)
devfsまたは(tarアーカイブファイルを使用した)udevのどちらも使用する場合
RC_DEVICE_TARBALL="yes"以下はtarアーカイブ(devices.tar.bz2)を使用しない設定です。 この設定でも、希望するならdevfsで起動することが可能です。 ブートローダに同一カーネル(訳注: 同一バイナリ)またはそれぞれ別のカーネルで使い分けるように設定するなら、LILOまたはGRUBに対して適切なオプションを指定してください。(gentoo=noudevかgentoo=nodevfsのどちらか)
devfsまたは(tarアーカイブファイルを使用しない(純粋))udevのどちらも使用する場合
RC_DEVICE_TARBALL="no"以下はtarアーカイブファイル(devices.tar.bz2)を使用する、もしくはtarアーカイブファイルを使用しない設定です。どちらもdevfsでは起動できません!
(tarアーカイブファイルを使用した)udevを使用し、devfsは使用しない場合
RC_DEVICE_TARBALL="yes"もしくは
(tarアーカイブファイルを使用しない(純粋))udevを使用し、devfsは使用しない場合
RC_DEVICE_TARBALL="no"このたくさんの変数が導入されてからというもの、devfsが完全に過去のものになるのが待ち遠しいです。そうすればもうオプションもなくなるしね!
/etc/init.d/halt.sh
このファイルの青い##の箇所を(rootユーザで)コメントアウトすると、シャットダウン時におけるdevices.tar.bz2ファイルへの/dev状態の保存をしなくなります。
/dev状態を保存するスクリプトであるこの箇所は、halt.shの先頭付近にあります。
/sbin/rc
このファイルでは青い##の箇所を一行だけ(rootユーザで)コメントアウトします。ここでは起動時において/sbin/rcがdevices.tar.bz2ファイルから/dev以下を作成しないようにします。
これは、/devフォルダに/dev/consoleと/dev/nullを静的に作成します。
カーネルにDEVFSサポートを含めてコンパイルしなかったもしくは>=kernel-2.6.13(devfsがもうオプションにない)を使用しているなら、準備は万端です。 ブートローダに追加する必要があるものは何もありません。 カーネルにDEVFSサポートを含めてコンパイルしたなら(起動時に自動でロードされるようにdevfsをコンパイルしましたか? もしそうなら、前に戻ってそのオプションを含めずにカーネルを再度コンパイルしてください。これが最後の警告です!) 2つほど意思決定をすることが必要です。 udev機能を組み込んであったとしても、カーネルにdevfsサポートがコンパイルされている場合、Gentooは起動時にdevfsをロードしようとします。したがって、ここに少し選択肢があります。
選択肢1: devfsをロードせず、udevを使う場合。これを追加する必要があります --> gentoo=nodevfs
選択肢2: udevをロードせず、devfsを使う場合。これを追加する必要があります。 --> gentoo=noudev
選択肢3: udevかdevfsのどちらか一方で同一カーネルに対して起動できるように、GRUBまたはLILOに上記二つの選択肢を持たす場合。LILOまたはGRUBに二つの起動選択設定を追加する必要があります。そのうち一つは一つ目のオプション指定、もう片方は二つ目のオプション指定とする必要があります。
genkernel 選択肢1:devfsをロードせず、udevを使う場合。これを追加する必要があります。 -->> udev
genkernel 選択肢2:udevをロードせず、devfsを使う場合。これを追加する必要があります。 -->> devfs
以下はLILOの例です。
選択肢1: devfsをロードせず、udevを使う場合。
# Udev system mm1 2.6.3 kernel選択肢2: udevをロードせず、devfsを使う場合。
# Devfs system mm1 2.6.3 kernel選択肢3: 起動時にどちらを使用するか選択する場合。
# Udev system mm1 2.6.3 kernelgenkernel 選択肢1: devfsをロードせず、udevを使用する場合。
# Udev system kernel-2.6.10genkernel 選択肢2: udevをロードせず、devfsを使用する場合。
# Devfs system kernel-2.6.10以下はGRUBの例です。ブートローダが違うだけで、ほとんど同じです。
選択肢1: devfsをロードせず、udevを使う場合。
title=Gentoo UDEVGRUBのもう一つの例です。
title=Gentoo MainカーネルにDEVFSをコンパイルしていなくて、後で使いたくなったら、DEVFSサポートを含めてカーネルを再度コンパイルしてください。そして、ここの記述を参照してブートローダの設定を編集し、上記のように適切な変更を行って、どちらか一方か、両方を使用してください。同時にudevとdevfsを使用することだけはできません。 ごめんなさい、お一人様一点限りとなっております。 再度強調しておきます。 起動時に自動でdevfsをロードするようにカーネルをコンパイルしてはいけません!!! (ほんとうに、ほんとうに、これが最後の警告ですよ!!) >=kernel-2.6.13のカーネル使用しているなら、DEVFSはもう使用できるオプションではありません。
常に最初は/var/log/error_log_filesを調べてください。 解決の糸口があるかもしれません。
devices.tar.bz2を次のように編集してください。 Gentooのデフォルトでのudevインストールを使うことにして、必要だけどもudevによって作成されないデバイスだけをdevices.tar.bz2に含めるように、簡単な変更を加えている人がいます。consoleやnullのような、そして/または他のデバイスのために、このようにしたいなら、arkを使うという簡単な方法があります。 他のGUIツールやコマンドラインツールでの方法もあります。 私は、単にdevices.tar.bz2をホームディレクトリ上の一時フォルダに移動し、その中を見て、consoleとnull以外のすべてを選択して、削除しました。 そしたら、削除に失敗したと言われましたが、実際は削除されていました。 そしてdevices.tar.bz2を作り直しました。 残っているファイルを再度確認すると、それら二つのデバイスだけがありました。 こうすることで、以前のdevices.tar.bz2と置き換えることができます。 とにかくこのやり方をするなら、tarアーカイブファイルを使用しないようにスクリプトを設定していないことを確認してください。 この方法でtarアーカイブファイルを使う場合、RC_DEVICE_TARBALL="yes"のままにしておくべきでしょう。
Nvidia社製ドライバ:
現在sysfsはGPLのコードによってのみ使用できます。
ですのでudevはnvidiaのデバイスノードを作成しません。
Nvidia社はデバイスノード生成の面倒をみなければなりません。
nvidia-glxがXの起動時にデバイスノードを作成します。
残念ながらNvidia社は昔のカードでのこの問題を修正していません。
よって、RivaTNTのような古いカードを使っているなら、自分でデバイスノードを作成しなければなりません。
使用中のカードがサポート外(古い)なら、/usr/share/doc/nvidia-kernel-<version>/README.gzのAppendix Aも参照してください。
古いカード向けの最終バージョンはnvidia-kernel-1.0.7174とnvidia-glx-1.0.7174-r5です。
ところで、/etc/modules.autoload.d/カーネルにnvidiaモジュールを記述するのが標準的なやり方です。
よって起動時に他のモジュールと共にnvidiaモジュールが自動でロードされるように追加したか確認してください。
Nvidia社がこれを修正するまで、/devにnvidia#とnvidiactlデバイスを自分で作成しなければなりません。私が使用している一つの方法は、/etc/conf.d/local.startファイルに以下のような記述を追加することです。
デバイスの数がどれだけ必要かが定かでないかもしれません。 私は二つだけを作成しましたが、問題は起きませんでした。 ノード名に合わせてマイナー番号を変更しただけです。 古いカードを使用していてNvidia社が/devにnvidiaデバイスノードを作成しはじめると、起動時に「デバイスが既に存在している」というエラーになるでしょう。 そのときは(訳注: local.startやlinks.confに)追加した行を削除してかまいません。
Nvidia社製/Alsaデバイス:udev-021以後は、/sbin/udevstartというバイナリファイルが新しく追加されました。 udev-023-r1をemergeするまで、この新しいバイナリが付属したバージョンを使ったことがありませんでした。 ですが使用してみると、nvidiaデバイスがなくてデバイス一つだけ(dev/snd/controlC0)が作成されるという問題に遭遇しました。 ですので、バージョン021およびそれ以上のものをインストールして、再起動して座っているとXではなくコマンドラインのログインになった場合、ルートユーザで/sbin/udevstartを実行してください。 これでデバイスが作成されます。その後、一般ユーザに戻ってstartxを実行してください。 これはnvidiaとalsaパッケージの問題で、udevに関する問題ではないという情報を得ています。
mixer/midi/dspデバイス: /dev/mixerか/dev/midiか/dev/dspが作成されないということを、私も含めて何人かが報告しています。 これはudevの問題ではありません。 モジュールとしてカーネルをコンパイルしたらなら、/etc/modules.autoload.d/kernel-2.6に加えてロードなければなりません。 したがって、それらのデバイスが作成されていないなら、以下のようにsnd_pcm_oss & snd_seq_ossをkernel-2.6ファイルに追加してください。 snd_pcm_ossは、snd_mixer_ossをロードします。
snd_mixer_oss alias is /dev/mixerPPPデバイス: 依然としてsysfsに対応される必要があるデバイスの一つであることが分かっています。
したがって、いずれにしてもそれを生成するためのudevルールを書くことはできません。
/dev/pppが必要なら、それを自分で作成しなければならないでしょう。
nvidiaデバイスでしたようにlocal.startに追加できます。
必要なデバイス(udevでは作成されない)だけを含むようにtarアーカイブファイルを調整した人もいます。
/etc/conf.d/local.startに追加したいなら、以下の行を追加してください。
マウスデバイス: マウスがudevを使って動作しないことが判明した方々へ。それは実際にはudevの問題ではなく、今までに設定していた方法の問題です。 udev(現時点での)は、マウスが使用可能なデバイスの位置が4つあります。
/dev/input/miceしたがって、どれ(mouse#、mice、psaux)を使用するにしても、/etc/X11/XF86Config-4もしくはXF86Configもしくはxorg.confがマウスデバイスの適切な位置を使用していることを確認してください。/etc/udev/rules.d/10-local.rulesでシンボリックリンクを作成することができますが、XF86Config-4もしくはXF86Configファイルを編集する方が賢明です。
もしくは
Mounting /dev for udev ...最後にフォーラム上で見たことのある他の問題のいくつかを記述します。
udev手引書のイタリア語翻訳(Enrico Morelliに感謝) イタリア語UDEV手引書
udev手引書の日本語翻訳(五十嵐 正尚に感謝) 日本語UDEV手引書
udev手引書の日本語翻訳(五十嵐 正尚に感謝) 日本語UDEV手引書 miscデバイス
udev手引書のドイツ語翻訳(Alexander Mingesに感謝) ドイツ語UDEV手引書
udevルールの書き方に関するDSDのガイド: udevルールの書き方(日本語訳)。
GentooフォーラムでのUDEVに関する主要な一連の投稿: Gentooフォーラムでのスレッド。
udevルールの書き方からの抜粋 UDEVルールの書き方に関するDSDのガイドを使うと、どれだけ簡単であるかを知りたかったので、もっとも最近にudevで動作したデバイス、私のMicrotek製スキャナを取り上げてやってみました。 その結果、非常に簡単であるということがわかりました。
私は/devにあるすべてのデバイスのsysfs情報を表示するためのpythonスクリプトを書きました。 新しいバージョンには、特定のデバイスの情報を/sysから検索する機能を追加しました。 ここからダウンロードしてください: udevread-0.3.tar。 展開して次のように実行してください。 /devにあるすべてのデバイスの情報の表示するpython udevread.py --allか、python udevread.py --dev device_pathのようにして使用します。 例えばpython udevread.py --dev input/miceのような感じです。 おそらく端末をフルスクリーンで開いた方がよいでしょう。 どのような出力結果になるか見てみるには、こちらを参照してください。 udevread.pyの出力結果
注意:/sysでのクラスを探さなければならなかったのが、今ではデバイスパスを引数にしてudevinfoを実行して情報を取得できます。 これで時間の節約ができます。 現在、udevinfoに比べてudevread.pyは少し劣ってしまっているようですが、まだいくつか優れているところもあります。 更新されたudevinfoの情報を参照するにはDSDのudevルール書き方ガイドのリンク先を調べてください。
udevread.pyを使用しない場合: 私は最初から/devでの私のスキャナのデバイスは/dev/sg0であることは知っていました。
デバイス接続時のhotplugデバッグ情報があるなら、tail -f /var/log/syslogも使えます。そうすると次のようなものが表示されます。
Feb 25 09:16:17 decibels default.hotplug[18643]: arguments (scsi_generic) env (OLDPWD=/ DEVPATH=/class/scsi_generic/sg0 ...
そして、DSDの情報を使って、不変の識別情報として最適なものを選択しました。
bash-2.05b# find | grep sg0この結果を基に以下を実行します。
bash-2.05b# udevinfo -a -p /sys/class/scsi_generic/sg0 udevread.pyを使う場合: 私は最初から/devでの私のスキャナのデバイスは/dev/sg0であることは知っていました。
デバイス接続時のhotplugデバッグ情報があるなら、tail -f /var/log/syslogも使えます。そうすると次のようなものが表示されます。
Feb 25 09:16:17 decibels default.hotplug[18643]: arguments (scsi_generic) env (OLDPWD=/ DEVPATH=/class/scsi_generic/sg0 ...
結果は似ていますが、udevread.pyは/sysでのパスを探して指定する必要がありません。 さらに、若干多くの情報を提供します。udevinfoで同じものを取得するためには2回使わなければならないでしょう。また、/devにあるすべてのデバイスノードについて同じ出力結果を表示する、--allオプションを使うことができます。
ルールの作成: それでは、私のスキャナ/dev/sg0を/dev/scannerとしても参照するためのルールを作成するのに、DSDのガイドは役に立つかを見てみましょう。
どこにルールを追加すればいいでしょうか? /etc/udev/udev-rules、/etc/udev/rules.d/50-udev.rulesがあります。 50-udev.rulesは、デフォルト設定であり、DSDはこのファイルを編集することは推奨していません。 /etc/udev/udev.rulesは、現在廃止されており使用されておりません。 よって、udevのバージョンを新しいものに更新したなら、削除してもかまいません。 DSDは、ローカルルールには/etc/udev/rules.dに10-local.rulesという新規ファイルを作成するようにと書いています。 したがって、/etc/udev/rules.dに10-local.rulesという新規ファイルを作成して、以下のものを追加してください。 (モデル名の最後にある空白を付ける必要がないことを確認しました。)
# Microtek Scanner私のXSaneのバックエンドは/etc/sane.dフォルダにあるmicrotek2.confであることを知っていました。 XSaneはscsiデバイスを期待します。それで/dev/scannerを追加しました。 そして、二つのスキャナプログラムを起動しました。現在、両方のプログラムに対し、/dev/sg0か/dev/scannerかのどちらを使うか選択ができます。つまり/dev/scannerも完全に動作しています。
これをすることになんのメリットがあるのか? と思うかもしれませんね。 たしかにこのケースでは、ほとんどありません。主に練習のためです。 ですが、/dev/scannerが/dev/sg0へのシンボリックリンクであることに意味があります。 だけど、このケース以外に、複数のデバイスを所持していて、どれがどのデバイスファイルに対応するかを説明したいかもしれません。 しかし場合によっては、シンボリックはとても役に立つことがあります。 (訳注: だから、シンボリックリンクの説明をします。) 例として以下を見てください。 詳しくはDSDのudevルールの書き方ガイドを参照してください。
DVD: 次に私が抱えていた問題は、CD書き込み/DVD読み込み対応のコンボドライブを使って、DVDやVCDなど...を再生することに関することでした。 DSDは、udevルールの書き方ガイドで、これに関する役に立つ情報を記述しています。 udevは、デフォルトでちゃんと/dev/cdroms/cdrom0シンボリックリンクを作成しますが、おそらく/dev/dvd(私の場合では)は作成しれません。 ですので、dvdまたはvcdなど...を再生できませんでした。 さらに私はscsiエミュレーションを使用しておらず、代わりにhdc=ide-cdを使っています。 そんなわけで、udevルールの書き方ガイドを参照して、/etc/udev/rules.d/10-local.rulesに以下のものを追加しました。
# cdrom/dvd devicesこれは追加で/dev/hdcへの/dev/dvdシンボリックリンクを作成します(再起動は必要なく、ルートでコマンドラインからudevstartを実行するだけでよいということを覚えておいてください)。 よって現在は、2つの/dev/hdcへのシンボリックリンクがあります。
カメラ: デバイスを必要とするカメラと必要のないカメラがあります。 scsiデバイスの一つ(すなわち、/dev/sd#もしくは、/dev/sg#)を使用するカメラなら、DSDのudevルール書き方ガイドを参照してください。 そういう特別なデバイスを必要としないカメラは、いくつかのセットアップだけが必要です。 私のカメラであるKodak DX3215は、gphoto2が必要で、GUIのgtkamかdigikamが使えます。 /sysフォルダに現れるのですが、ルールを作成できるデバイスとしては/sys/classに出現しません。 とにかくどんな試みも無残に失敗し、試行中には決して/devに新しいデバイスが作成されることはありませんでした。 それがUSBバス上にあるように認識されたことを除いて、/sysにはどんなデバイスへの参照も見つかりませんでした。 唯一の問題は、パミッション関係だったので、gtkamとdigikamの両方が、それを解決するのに/etc/hotplug/usb.usermapに少しの作業を必要とします。 そして、どのスクリプトを/etc/hotplug/usbcamとして利用したいかを選んで、usbcamファイルを実行可能にしてください(訳注: xビットを立ててください)。 gtkamは問題なく動作しますが、rootユーザでやっているにもかかわらず、Could not list folders in '/'.(訳注: '/'にあるフォルダを参照できませんでした。)のエラーになります。digikamでは、そのエラーになりません。
Thanks for visiting Decibels Help.