7.3 udevルールについて

udevでは、デバイスの識別方法およびデバイス名の作成方法を決定するルール・ファイルが使用されます。 udevデーモン(udevd)によって、システム起動時にルール・ファイルが読み取られ、ルールがメモリーに格納されます。 カーネルが新しいデバイス、または既存のデバイスがオフラインになったのを検出すると、カーネルによってイベント・アクション(uevent)通知がudevdに送信され、udevdでは、デバイスを識別するために、/sysのデバイス属性に対してインメモリー・ルールが照合されます。 デバイス・イベント処理の一部として、ルールでは、デバイスを構成するために実行する必要がある追加のプログラムを指定できます。 ファイル拡張子が.rulesのルール・ファイルは、次のディレクトリに格納されます。

/lib/udev/rules.d

デフォルト・ルール・ファイルが格納されます。 これらのファイルは編集しないでください。

/etc/udev/rules.d/*.rules

カスタマイズ・ルール・ファイルが格納されます。 これらのファイルは変更できます。

/dev/.udev/rules.d/*.rules

一時ルール・ファイルが格納されます。 これらのファイルは編集しないでください。

udevdでは、ルール・ファイルが格納されているディレクトリに関係なく、ルール・ファイルが字句順に処理されます。 /etc/udev/rules.d内のルール・ファイルによって、/lib/udev/rules.d内の同じ名前のファイルがオーバーライドされます。

次のルールはファイル/lib/udev/rules.d/50-udev- default.rulesから抽出したもので、udevルールの構文を示しています。

# do not edit this file, it will be overwritten on update

SUBSYSTEM=="block", SYMLINK{unique}+="block/%M:%m"
SUBSYSTEM!="block", SYMLINK{unique}+="char/%M:%m"

KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660"
KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660"
...
# mem
KERNEL=="null|zero|full|random|urandom", MODE="0666"
KERNEL=="mem|kmem|port|nvram",  GROUP="kmem", MODE="0640"
...
# block
SUBSYSTEM=="block", GROUP="disk"
...
# network
KERNEL=="tun",                  MODE="0666"
KERNEL=="rfkill",               MODE="0644"

# CPU
KERNEL=="cpu[0-9]*",            MODE="0444"
...
# do not delete static device nodes
ACTION=="remove", NAME=="", TEST=="/lib/udev/devices/%k", \
    OPTIONS+="ignore_remove"
ACTION=="remove", NAME=="?*", TEST=="/lib/udev/devices/$name", \
    OPTIONS+="ignore_remove"

コメント行は#の文字で始まります。 他のすべての空白以外の行でルールが定義され、これは、1つ以上のカンマ区切りのキーと値のペアのリストです。 ルールでは、値がキーに割り当てられるか、またはその現在値と指定した値とを比較することによってキーに対する一致の検出が試行されます。 次の表に、使用可能な割当および比較演算子を示します。

演算子

説明

=

キーに値を割り当て、以前の値を上書きします。

+=

キーの現在の値リストに値を追加することによって、値を割り当てます。

:=

キーに値を割り当てます。 この値は以降のいずれのルールによっても変更できません。

==

キーの現在の値が指定した値と等しいかどうか照合します。

!=

キーの現在の値が指定した値と等しいかどうか照合します。

次のシェル形式のパターン一致文字を値で使用できます。

文字

説明

?

1文字に一致します。

*

ゼロを含めて、任意の数の文字に一致します。

[]

カッコ内に指定された任意の1文字または文字範囲の文字に一致します。 たとえば、tty[sS][0-9]ttys7またはttyS7に一致します。

次の表に、ルールでよく使用される一致キーを示します。

一致キー

説明

ACTION

イベントを発生させたアクションの名前を照合します。 たとえば、ACTION="add"またはACTION="remove"です。

ENV{key}

デバイス・プロパティkeyに対する値を照合します。 たとえば、ENV{DEVTYPE}=="disk"です。

KERNEL

イベントによって影響を受けるデバイスの名前を照合します。 たとえば、ディスク・メディアの場合はKERNEL=="dm-*"です。

NAME

デバイス・ファイルまたはネットワーク・インタフェースの名前を照合します。 たとえば、1つ以上の文字で構成される任意の名前の場合はNAME="?*"です。

SUBSYSTEM

イベントによって影響を受けるデバイスのサブシステムを照合します。 たとえば、SUBSYSTEM=="tty"です。

TEST

指定したファイルまたはパスが存在するかどうかをテストします。 たとえば、TEST=="/lib/udev/devices/$name"であり、$nameは現在照合しているデバイス・ファイルの名前です。

その他の一致キーには、ATTR{filename}ATTRS{filename}DEVPATHDRIVERDRIVERSKERNELSPROGRAMRESULTSUBSYSTEMSおよびSYMLINKがあります。

次の表に、ルールでよく使用される割当キーを示します。

割当キー

説明

ENV{key}

デバイス・プロパティkeyに対する値を指定します。 たとえば、GROUP="disk"です。

GROUP

デバイス・ファイルのグループを指定します。 たとえば、GROUP="disk"です。

IMPORT{type}

typeに応じて、デバイス・プロパティの変数のセットを指定します。

cmdline

ブートkernelコマンドラインから単一のプロパティをインポートします。 単純なフラグの場合、udevdではプロパティの値が1に設定されます。 たとえば、IMPORT{cmdline}="nodmraid"です。

db

指定した値をデバイス・データベースの索引として解釈し、単一のプロパティをインポートしますが、この値は以前のイベントですでに設定されている必要があります。 たとえば、IMPORT{db}="DM_UDEV_LOW_PRIORITY_FLAG"です。

file

指定した値をテキスト・ファイルの名前として解釈し、その内容をインポートしますが、この値は環境キー形式である必要があります。 たとえば、IMPORT{file}="keyfile"です。

parent

指定した値をキー名のフィルタとして解釈し、親デバイスに対するデータベース・エントリから格納済のキーをインポートします。 たとえば、IMPORT{parent}="ID_*"です。

program

指定した値を外部プログラムとして実行し、その結果をインポートしますが、この値は環境キー形式である必要があります。 たとえば、IMPORT{program}="usb_id --export %p"です。

MODE

デバイス・ファイルの権限を指定します。 たとえば、MODE="0640"です。

NAME

デバイス・ファイルの名前を指定します。 たとえば、NAME="eth0"です。

OPTIONS

ルールおよびデバイスのオプションを指定します。 たとえば、OPTIONS+="ignore_remove"であり、これは、デバイスが削除された場合でもデバイス・ファイルが削除されないことを意味します。

OWNER

デバイス・ファイルの所有者を指定します。 たとえば、GROUP="root"です。

RUN

デバイス・ファイルの作成後に実行するコマンドを指定します。 たとえば、RUN+="/usr/bin/eject $kernel"であり、$kernelはデバイスのカーネル名です。

SYMLINK

デバイス・ファイルへのシンボリック・リンクの名前を指定します。 たとえば、SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"であり、$env{}は指定したデバイス・プロパティに置換されます。

その他の割当キーには、ATTR{key}GOTOLABELRUNおよびWAIT_FORがあります。

次の表に、GROUPMODENAMEOWNERPROGRAMRUNおよびSYMLINKキーとともによく使用される文字列置換を示します。

文字列置換

説明

$attr{file}または

%s{file}

/sysの下にあるファイルからデバイス属性の値を指定します。 たとえば、ENV{MATCHADDR}="$attr{address}"です。

$devpathまたは

%p

/sysの下にあるsysfsファイル・システムのデバイスのデバイス・パス。 たとえば、RUN+="keyboard-force-release.sh $devpath common-volume-keys"です。

$env{key}または

%E{key}

デバイス・プロパティの値を指定します。 たとえば、SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n"です。

$kernelまたは

%k

デバイスのカーネル名。

$majorまたは

%M

デバイスのメジャー番号を指定します。 たとえば、IMPORT{program}="udisks-dm-export %M %m"です。

$minorまたは

%m

デバイスのマイナー番号を指定します。 たとえば、RUN+="$env{LVM_SBIN_PATH}/lvm pvscan --cache --major $major --minor $minor"です。

$name

現在のデバイスのデバイス・ファイルを指定します。 たとえば、TEST=="/lib/udev/devices/$name"です。

udevでは、デバイスに対する他の全ルールの処理終了後である、そのプログラムの実行直前に、RUNに対して指定した文字列が展開されます。 その他のキーについては、ルールの処理中に文字列が展開されます。

詳細は、udev(7)マニュアル・ページを参照してください。