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