新しい基本ルールを作成しています。
/etc/udev/rules.d/10-myrule.rules
含む:
KERNEL!="sdb*", GOTO="auto_mount_end"
ACTION=="add", RUN+="/usr/bin/mount /dev/sdb1 /media"
LABEL="auto_mount_end"
保存して再起動し、SDカードを挿入しましたが(/dev/sdb1
見たと認識されていますdmesg
)、何も起こりませんでした。手動で行うとmount /dev/sdb1 /media
機能します。
udev
これらのルールをどのように除外/デバッグできますか?
注:私はArchLinuxを使用していますが、すべてのディストリビューションで同じでなければなりませんか?
ベストアンサー1
修正する
引用: udev_237 -手動udev (Ubuntu_18.04)
RUN{type}
- ︙
デフォルトのサンドボックスはsystemd-udevd.serviceに適用されるため、ネットワークにアクセスしたりファイルシステムをマウントまたはマウント解除したりするプログラムは、udevルール内で実行できません。
元の答えデバッグヒントは他のudevルールアプリケーションに有効です。
10-
Jasonwryanが述べたように、高い数字(90が良い)を使用してください。したがって、あなたのルールは他のルールによって上書きされません。実際のニーズに応じて、最小数のキーを使用してください。たとえば、
!=
&GOTO
/をLABEL
直接使用する代わりに==
ACTION=="add", KERNEL=="sdb*", RUN+="/usr/bin/mount /dev/sdb1 /media"
あなたの目標は、
sdb1
最小限のブラインドマッチングを使用してコマンドを修正することです。KERNEL=="sdb1"
シャドウデバッグルールを作成すると便利だと思います。常に同じファイルに残して、必要に応じて使用するため、シャドウと呼ばれます。
ACTION=="add", KERNEL=="sdb*", RUN+="/bin/sh -c 'echo == >> /home/user/Desktop/udev-env.txt; env >> /home/user/Desktop/udev-env.txt'" #ACTION=="add", KERNEL=="sdb*", RUN+="/usr/bin/mount /dev/sdb1 /media"
メモ:
udev-env.txt
作成されると、ルールがトリガーされます。==
対応する行一つ一致するノード。このファイルに書き込まれるENVは、ほぼ同じ時間に生成された2つ以上のノード間の混合である可能性があり、これはバッファリングのstdout
問題です。- このデバッグに示されている一部の環境変数は、この時点でudev処理の一致がまだ満たされていないため(前の規則に従って)、その条件で使用できない場合があります。バラよりhttps://www.suse.com/support/kb/doc/?id=000016106(コメントで@clonejoが言及しました)
udevadm monitor -u
、udevadm test ...
およびを使用してudevadm trigger ...
イベントを処理したルールを確認してください。スクリプト内では、
stdout
戻り値とメッセージを保存してデバッグログを生成し、失敗したコマンドをキャプチャできますstderr
。