私の/dev
フォルダーでは、次のファイルをユーザーが読み取りおよび書き込み可能にしたいと考えています。
/dev/ttyUSB0
/dev/gpib0
使用せずにこれを行うにはどうすればよいchgrp
ですか?編集はできます/etc/udev/rules.d
が、構文がわかりません。
私の/dev
フォルダーでは、次のファイルをユーザーが読み取りおよび書き込み可能にしたいと考えています。
/dev/ttyUSB0
/dev/gpib0
使用せずにこれを行うにはどうすればよいchgrp
ですか?編集はできます/etc/udev/rules.d
が、構文がわかりません。
回答:
サブシステムttyに分類されるデバイスの場合、次のようにグループを設定できます。
SUBSYSTEM=="tty", GROUP="dialout"
==
は、一般的なプログラミングと同様に、が=
代入である場合の同等性のテストです。したがって、上記のステートメントは「if SUBSYSTEM=="tty"
then assign 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
、ルールでas 句を使用するのに適した形式です。したがって、たとえば、取り外し不可とマークされているすべてのブロックデバイスの所有権を変更するには、次のルールを使用します。
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"