Hatena::ブログ(Diary)

kinneko@転職先募集中の日記

検索エンジンから来た方へ: 申し訳ないですが、日記なので日々積み重なっています。
目的の情報にたどり着くには、右の検索窓から日記内を再検索してください。
北陸エリア内(もしくはエリア外でも)で転職先を探しています。
(マジです。ネタではありません。ホントですって...)
詳細履歴書をご希望の方はメールでご連絡下さいませ。(kinneko at gmail.com)
chromeで見ると、死ぬほど出るGoogleの広告がブロックできないので、
firefoxでABPを入れるとすっきり見られます。

2014-01-18

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

otsukaotsuka 2014/01/17 22:23 adduserの後、一旦ログアウトした後なら、crw-rw---- でも大丈夫ということはないですか。

kinnekokinneko 2014/01/17 22:36 twitterでもinitgroups(3)する前だからじゃね?と、@znz さんに指摘されました〜。
いやぁ、グループって即時反映というか、実行時再参照じゃなかったでしたっけ?
なんぜ、shadow入る前の知識なんで... orz

みえこみえこ 2014/03/01 20:16 参考になりました。ありがとうございます。

kinnekokinneko 2014/03/02 00:27 あらら、参考にならないと思うよ。
たぶん、adduserして、ログアウトして入り直すか、再起動したら反映される。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kinneko/20140118/p2
リンク元