USBをシリアルデバイスに接続すると、デバイスが「dialout」グループ(「root」で始まる)グループに切り替えるのに時間がかかります。これは、リセット後すぐにデバイスを読み取る権限を望む一部のクライアントソフトウェアに大きなダメージを与える可能性があります。
私は2つのUSBシリアルデバイスを試しましたが、どちらもatmega32u4とch340で同じように動作しました。
ls -l /dev/tty*
高速ループで印刷すると、次のことが起こります。
初めてデバイスを接続する場合:
> while ((1)); do ls -l /dev/ttyACM* 2> /dev/null; sleep 0.1; done;
# it does not print anything until I plug in the device
crw-rw-rw- 1 root dialout 166, 0 Aug 19 17:23 /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0 Aug 19 17:23 /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0 Aug 19 17:23 /dev/ttyACM0
大丈夫に見えますが、デバイスを抜いて再接続すると、これが起こります。
> while ((1)); do ls -l /dev/ttyACM* 2> /dev/null; sleep 0.1; done;
# Nothing is printed out until I plug the device in for a second time
crw------- 1 root root 166, 0 Aug 19 17:23 /dev/ttyACM0
crw------- 1 root root 166, 0 Aug 19 17:23 /dev/ttyACM0
crw------- 1 root root 166, 0 Aug 19 17:23 /dev/ttyACM0
crw------- 1 root root 166, 0 Aug 19 17:23 /dev/ttyACM0
crw------- 1 root root 166, 0 Aug 19 17:23 /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0 Aug 19 17:23 /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0 Aug 19 17:23 /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0 Aug 19 17:23 /dev/ttyACM0
初めてデバイスを接続した後、デバイスを接続しようとするたびに、デバイスが0.5秒間「ルート」グループに表示され、「ダイヤルアウト」グループに移動します。これはすぐに達成できますか?
最初のプラグインと後続のプラグインのdmesgメッセージは同じです。
これはカスタムudevルールなしで発生します。そしてudevルールでは、この特定のデバイスを「dialout」グループに配置する必要があります。初めて接続した後は常に0.5秒の遅延があります。
2018年8月にリリースされたDebian Unstableバージョンです。
udevadm monitor
表示される内容は次のとおりです。
sudo udevadm monitor & (while ((1)); do ls -l /dev/ttyACM*; ls -l /dev/ttyUSB*; sleep 0.1; done;) 2> /dev/null
[1] 18788
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[8916.515599] add /devices/pci0000:00/0000:00:14.0/usb1/1-1 (usb)
KERNEL[8916.516088] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0 (usb)
KERNEL[8916.516768] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/tty/ttyACM0 (tty)
KERNEL[8916.516835] bind /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0 (usb)
KERNEL[8916.516886] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1 (usb)
KERNEL[8916.516944] bind /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1 (usb)
KERNEL[8916.516999] bind /devices/pci0000:00/0000:00:14.0/usb1/1-1 (usb)
crw------- 1 root root 166, 0 Aug 19 17:54 /dev/ttyACM0
crw------- 1 root root 166, 0 Aug 19 17:54 /dev/ttyACM0
crw------- 1 root root 166, 0 Aug 19 17:54 /dev/ttyACM0
crw------- 1 root root 166, 0 Aug 19 17:54 /dev/ttyACM0
crw------- 1 root root 166, 0 Aug 19 17:54 /dev/ttyACM0
UDEV [8917.063021] add /devices/pci0000:00/0000:00:14.0/usb1/1-1 (usb)
UDEV [8917.064210] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0 (usb)
UDEV [8917.068240] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1 (usb)
UDEV [8917.068290] bind /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1 (usb)
UDEV [8917.068359] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/tty/ttyACM0 (tty)
UDEV [8917.080062] bind /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0 (usb)
UDEV [8917.080134] bind /devices/pci0000:00/0000:00:14.0/usb1/1-1 (usb)
crw-rw-rw- 1 root dialout 166, 0 Aug 19 17:54 /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0 Aug 19 17:54 /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0 Aug 19 17:54 /dev/ttyACM0