本サイトはプロモーションを含みます。

LinuxでUSBシリアルケーブルを使う

このページはこんな方におすすめです
  • LinuxでUSBシリアルケーブルを使う方法について知りたい
  • USBシリアルケーブルは認識したがパーミッションの問題で悩んでいる

今回の例でインストールしているUbuntuのバージョンは14.04 LTSですが、Ubuntu 17や18、20でもやり方に変わりありません。USBシリアルケーブルは、infrapod.netでお勧めしているiBUFFALO製品 を利用しています。

LinuxでUSBシリアルケーブルを使う方法

デバイスが認識されている事を確認する

USBシリアルケーブルをLinuxマシンにUSB接続したらdmesgコマンドを実行してください。一番最後の行で「ttyUSB0」としてデバイスファイルが認識された事がわかります

usb 5-2: new full-speed USB device number 2 using uhci_hcd
usb 5-2: New USB device found, idVendor=0403, idProduct=6001
usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 5-2: Product: USB HS SERIAL CONVERTER
usb 5-2: Manufacturer: FTDI
usb 5-2: SerialNumber: ABCDE74
usbcore: registered new interface driver usbserial
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial support registered for generic
usbcore: registered new interface driver ftdi_sio
usbserial: USB Serial support registered for FTDI USB Serial Device
ftdi_sio 5-2:1.0: FTDI USB Serial Device converter detected
usb 5-2: Detected FT232BM
usb 5-2: Number of endpoints 2
usb 5-2: Endpoint 1 MaxPacketSize 64
usb 5-2: Endpoint 2 MaxPacketSize 64
usb 5-2: Setting MaxPacketSize 64
usb 5-2: FTDI USB Serial Device converter now attached to ttyUSB0
注意
「ttyUSB**」という表示がdmesgコマンドで確認できない場合は正しく認識されていないので、Linuxに対応しているUSBシリアルケーブルであるか確かめてください。

シリアルコンソールで通信する

わたしは昔からUnix系OSでシリアルコンソール接続する場合はcuコマンドを使っています。cuコマンドを使ってCiscoルーターへ接続するためには次のようにします。

$ cu -l ttyUSB0
cu: open (/dev/ttyUSB0): Permission denied
cu: ttyUSB0: Line in use
$

パーミッションで弾かれてしまいました。パーミッションを調べてみましょう。

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0  2月  6 16:08 /dev/ttyUSB0

一般ユーザーにも読み書きの権限をつけてやります。

$ sudo chmod o+wr /dev/ttyUSB0
$ ls -l /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 0  2月  6 16:08 /dev/ttyUSB0

それではもう一度接続してみます。

$ cu -l ttyUSB0
Connected.

Router>show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

Router>

今度は接続できましたね。面倒なので恒久的にパーミッションを設定しましょう。デフォルト設定は次のファイルに記載されています。

/lib/udev/rules.d/50-udev-default.rules

これを直接いじるのは不作法なので、次のファイルを編集(なければ新規作成)します。

/etc/udev/rules.d/50-udev-default.rules

今回は/dev/ttyUSB**のパーミッションと所有者を変更したいので、次の1行を追加しました。GROUPとMODEは環境に合わせて変更してください。わたしは使用している端末のユーザー名とグループ名が「foo」なので次のように設定しています。

KERNEL=="ttyUSB[0-9]*", GROUP="foo", MODE="0666"

この設定を行うと、パーミッションと所有グループが設定したものになります。

$ ls -l /dev/ttyUSB0
crw-rw-rw- 1 root foo188, 0  2月 11 14:14 /dev/ttyUSB0

cuコマンドで接続するときは「-l」オプションでデバイスファイルを指定します。デバイスファイルは先ほどdmesgコマンドで確認した「ttyUSB0」です。

MEMO
別のスマートなやり方は、dialoutというグループに自分を追加する事です。

接続を切る方法

コンソール接続を切るためには「~.」を入力します。~(チルダ)の後に.(ピリオド)です。

Router>
Router>~.

Disconnected.
$

ログをとりたい

cuコマンドはログを取得する機能はないので、scriptコマンドで端末の入出力をすべて保存してください。

まとめ

LinuxでUSBシリアルケーブルを利用する際に発生するトラブルは主に「ドライバがない」「パーミッションではじかれる」の2点です。

これらのトラブルは実績のあるUSBシリアルケーブルを利用する事と、パーミッションを設定する方法を知る事です。

  • USBシリアルケーブルはWindowsでもMacでもLinuxでも使えるiBUFFALO製品がおすすめ。
  • パーミッションの問題が発生したら/dev/ttyUSBのパーミッションを変えるかdialoutグループに参加する

4 COMMENTS

drone

起動時に、sudo 等でroot権限でArduinoIDEを動かしましょうという記事が多い中、きちんと権限を付与する方法を教えていただきまして感謝です。スッキリスマートにエレガントに使用することができました。ありがとうございます。

返信する
shj

この記事が参考になってなによりです。droneさんのサイトを拝見しました。
大して深く考えず自分の環境に合わせて「GROUP=shj」という設定を記載していたので、反省して記事を修正しました。

返信する
drone

大変遅くなりましたが、本当にありがとうございました。グループ権限の件も疑問が解けてすっきりしております。多分ご使用の環境のグループ(署名みてあとで気づきました)だとは思ったのですが、オープンソース系のアルアルで「実はそのようなグループが必要だった。」とか「呪文的に入れるのが慣例」かもなぁと思い、そのままとして降りました。ありがとうございました。

返信する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)