私の/dev
フォルダ、次のファイルをユーザーが読み取りおよび書き込みできるようにしたいと思います。
/dev/ttyUSB0
/dev/gpib0
chgrp
を使用せずにこれを行うにはどうすればよいですか?編集できます/etc/udev/rules.d
構文はわかりません。
サブシステムttyに分類されるデバイスの場合、次のようにグループを設定できます。
SUBSYSTEM=="tty", GROUP="dialout"
一般的なプログラミングと同様に、==
は等価性のテストであり、=
は代入です。したがって、上記のステートメントは、「if SUBSYSTEM=="tty"
次にGROUP="dialout"
を割り当てる」に変換されます。ステートメントには、ANDで結合された複数のテスト、および複数の割り当てが含まれる場合があります。
読み取り、書き込み、実行の権限を変更したい場合は、GROUPの代わりにMODEを割り当てます。ここで、MODEは通常のUnix 8進数表記に従います。 MODE="0660"
は、所有者とグループに読み取り/書き込み権限を与えます。 man udev
にすべての詳細があります。
このようなルールの例は/lib/udev/rules.d/91-permissions.rules
にあります。
ルールを決定したら、ルールを追加するだけです。 debian派生システムで、/etc/udev/rules.d
ディレクトリに移動し、ファイルを作成します。ファイルはソート順に実行されます。したがって、ルールファイルを最後に読み取るようにして、以前のファイルを上書きするには、99-instruments.rules
のような名前を試してください。次に、ルールをそのファイルに1行に1つずつ入力します。 (必要に応じて、シェルと同様に、行の最後にバックスラッシュを置くことで行を拡張できます。)
したがって、ttyデバイスのグループと権限を変更する場合、ファイル/etc/udev/rules.d/99-instruments.rules
は次の1行で構成できます。
SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"
新しいファイル自体に通常の権限があることを確認するには:
Sudo chown root:root /etc/udev/rules.d/99-instruments.rules
Sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules
ファイルを作成すると、udevdがそれを自動的に読み取る場合があります。そうでない場合は、次のコマンドでファイルを強制的に再読み取りできます。
udevadm control --reload-rules
どのデバイスがどのルールに応答するかを細かく制御したい場合は、/ sys /を調べることで、udevがデバイスをどのように認識するかについて詳しく知ることができます。現時点では、ttyUSBまたはHPIBを備えたマシンにアクセスできないので、ディスクsdaの例を作ってみましょう。実行:
udevadm info --attribute-walk --path=/sys/block/sda
これにより、次のような多くの情報が得られます。
. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .
これらの行はすべて、ルールでif
句として使用するのに適した形式です。したがって、たとえば、取り外し不可とマークされているすべてのブロックデバイスの所有権を変更するには、次のルールを使用します。
SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024
udevadm
からの情報を使用して、対象のデバイスを具体的に対象とするルールを作成できます。
ジョンのルールよりも少し制限を強くすることをお勧めします。たとえば、/etc/udev/rules.d/99-tty-dialout.rules
などのファイルを作成します。
SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"
udevadm
を使用して、デバイスのSUBSYSTEM==
およびKERNEL==
の値を判別できます。例えば:
$ udevadm info -a -n /dev/tty0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/virtual/tty/tty0':
KERNEL=="tty0"
SUBSYSTEM=="tty"
DRIVER==""
ATTR{active}=="tty1"