Ubuntuでminicom起動すると/dev/ttyUSB0のパーミッションがないと言われる

kinneko@L2012:~$ minicom -D /dev/ttyUSB0
minicom: cannot open /dev/ttyUSB0: Permission denied

うざい。
Debianだと、こういうことはなかったような。

kinneko@L2012:~$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Jan 17 19:11 /dev/ttyUSB0

Ubuntuでは、シリアルはdialoutグループか。
歴史的にuucpとかになってるよりはいいな。

kinneko@L2012:~$ grep kinneko /etc/group
adm:x:4:kinneko
cdrom:x:24:kinneko
sudo:x:27:kinneko
dip:x:30:kinneko
plugdev:x:46:kinneko
kinneko:x:1000:
lpadmin:x:111:kinneko
sambashare:x:112:kinneko

入ってない。
同じことだけど、こっちのが簡単だね。

kinneko@L2012:~$ groups kinneko
kinneko adm cdrom sudo dip plugdev lpadmin sambashare

入ってない。
dialoutグループに追加しておく。

kinneko@L2012:~$ sudo adduser kinneko dialout
Adding user `kinneko' to group `dialout' ...
Adding user kinneko to group dialout
Done.

試す。

kinneko@L2012:~$ minicom -D /dev/ttyUSB0
minicom: cannot open /dev/ttyUSB0: Permission denied

まだダメっすか。

kinneko@L2012:~$ sudo chmod a+rw /dev/ttyUSB0
kinneko@L2012:~$ ls -l /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 0 Jan 17 19:11 /dev/ttyUSB0

これなら動く。
釈然としないな。
というか、udevがhotplugでデバイス作るので、これじゃ恒久対策じゃなくね?


抜く。

kinneko@L2012:~$ ls -l /dev/ttyUSB0
ls: cannot access /dev/ttyUSB0: No such file or directory

バイス消えた。
挿しこむ。

kinneko@L2012:~$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Jan 17 19:34 /dev/ttyUSB0

出た。
元に戻っている。


やっぱudevの設定書かないとダメか。

kinneko@L2012:~$ sudo udevadm info -a -n /dev/ttyUSB0

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/pci0000:00/0000:00:14.0/usb3/3-3/3-3:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="cp210x"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3:1.0':
    KERNELS=="3-3:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="cp210x"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{interface}=="CP2102 USB to UART Bridge Controller"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-3':
    KERNELS=="3-3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{urbnum}=="15"
    ATTRS{idVendor}=="10c4"
    ATTRS{idProduct}=="ea60"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="3"
    ATTRS{devnum}=="15"
    ATTRS{devpath}=="3"
    ATTRS{version}==" 1.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Silicon Labs"
    ATTRS{product}=="CP2102 USB to UART Bridge Controller"
    ATTRS{serial}=="0001"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3':
    KERNELS=="usb3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="345"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0302"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="3"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="4"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 3.2.0-58-generic xhci_hcd"
    ATTRS{product}=="xHCI Host Controller"
    ATTRS{serial}=="0000:00:14.0"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:14.0':
    KERNELS=="0000:00:14.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="xhci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x1e31"
    ATTRS{subsystem_vendor}=="0x8086"
    ATTRS{subsystem_device}=="0x7270"
    ATTRS{class}=="0x0c0330"
    ATTRS{irq}=="21"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,000000ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{numa_node}=="-1"
    ATTRS{dma_mask_bits}=="64"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

なげーよ。


ものはコレ。

kinneko@L2012:~$ lsusb
(snip)
Bus 003 Device 015: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x Composite Device

これにフックして、/etc/udev/rules.d/50-udev-default.rulesに、こんな風にルール書けばいいんだろうけど...

SUBSYSTEMS="usb", ATTRS{product}== "CP2102 USB to UART Bridge Controller", GROUP="users", MODE="0666"


ほかにもFTDIだったりすることもあるので、USBシリアル一括で定義できないもんかね...
デフォルトはどうなっているのかと思って探しても、/etc/udev/rules.dの下には、udev-default.rulesがないのよね。
Ubuntuは、標準はどこにあるんだろう?
探す。
あった。
/lib/udev/rules.d/50-udev-default.rules か。
中を見る。

# serial
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"

なるほど。
これにMODE="0666"を追記したらいいのかな?
/libの下に直接追記するのは行儀が悪いかな?
わたしは、めんどいから、直接変更でいいや。
几帳面とか、きれい好きな方は、/etc/udev/rules.d/50-udev-default.rules作ってね。

$ sudo vi /lib/udev/rules.d/50-udev-default.rules
# serial
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", MODE="0666"


抜き差ししてみる。

kinneko@L2012:~$ ls -l /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 0 Jan 17 20:04 /dev/ttyUSB0

minicomもちゃんと動く。


グループ追加がメンドクサイようなら、GROUP="users"にしておけばいい...
と思ったら、Ubuntuはuserグループもないのか... orz