スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

UbuntuでRS-232Cを利用したシリアルポート通信

シリアルポート端末(gtkterm)を使ってみる!




2016/5/20 追記

Ubuntu16.04で、下記方法の2で確認しました。また、その際のコマンドを訂正しています。
(1は試していませんが、可能と思われます。)




Ubuntuソフトウェアセンターをさまよっていたら、ふと面白いものを見つけました。
RS-232Cシリアルポートを利用した通信が可能なターミナルソフト(シリアルコンソール)です。
これの設定でちょっと苦戦したのでメモ。


目的はUbuntuからシリアルポートを経由して外部装置と通信(コンソール接続)するのが目的です。
Ubuntuを操作する事が目的ではありません。

このソフトは、Windowsで言うとPuttyやTeraTermのようなものです。最近では使われないと思いますが、ネットワーク機器設定やらその他開発をされているような人は利用すると思います。私はルータ、スイッチの設定のため利用が必要なためどうしてもWindowsが必要となることから、何とかならないかと思って過去に調べたことがあります。その時はアプリのようなものはなく「screen」コマンドのようなものを利用して行うといったものだったと記憶してます。その時はできたのですが普段使わないのでやり方を忘れた(笑)。
今回見つけたのは、ソフトウェアなので簡単♪




「シリアルポート端末」もしくは「gtkterm」で検索してください。
早速インストールして起動。

■環境
 ・Ubuntu12.04
 ・USBシリアル:USB-CVRS9(サンワサプライ製)

メニューの「Configuration > Port 」から、ポートの指定でシリアルポート(今回はUSBシリアルポートなので)"ttyUSB0"を選択。
※ 接続したUSBシリアルがどう認識されているかは"dmesg"で確認できます。
$ dmesg | tail
[423416.978909] usb 1-1.1: new full-speed USB device number 6 using ehci_hcd
[423417.072692] pl2303 1-1.1:1.0: pl2303 converter detected
[423417.074451] usb 1-1.1: pl2303 converter now attached to ttyUSB0


※その他、転送速度や、パリティなどは接続機器に合わせて指定します。
gtktermインタフェース指定

で、OKを押すと、

Cannot open /dev/ttyUSB0: 許可がありません


怒られました・・・。
terminalから
$sudo gtkterm
として起動するとうまく行きますので、権限の問題のようです。

デバイスを確認します。
$ ll /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 11月 9 17:14 /dev/ttyUSB0

となっており、このデバイスの所有者はrootで所属グループはdialoutとなっておりその他はアクセスできないのが原因のようです。



解決方法
1.ユーザ(自分)を dialoutグループに所属させる
 利用ユーザをdialoutグループに所属させることで実現可能です。
 $sudo addgroup hogehoge dialout2016/5/20 コマンド訂正
 $sudo gpasswd -a hogehoge dialout
2.USBシリアルポートの権限を拡大する
 自動で認識する際に、"その他"のユーザも読み込み・書きこみ権限を与えてあげます。
 私はこの方法で行いました。


-以下、2の方法の手順-
Ubuntu12.04では、デバイスを接続するとudevによってデバイスファイルが適切に/dev配下に配置されるとのことです。(微妙に正確ではないかも)
まずは、USBシリアルポートを接続した際にudevがどういうイベントを検知するのかを調べます。
$sudo udevadm monitor
この状態でUSBシリアルケーブルを接続すると
KERNEL - the kernel uevent
KERNEL[81897.906304] add /devices/pci0000:00/0000:00:1d.0/usb6/6-1 (usb)
KERNEL[81897.909256] add /devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0 (usb)
KERNEL[81897.920212] add /devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0/ttyUSB0 (usb-serial)
KERNEL[81897.920297] add /devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0/ttyUSB0/tty/ttyUSB0 (tty)
UDEV [81897.930378] add /devices/pci0000:00/0000:00:1d.0/usb6/6-1 (usb)
UDEV [81897.934428] add /devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0 (usb)
UDEV [81897.935944] add /devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0/ttyUSB0 (usb-serial)
UDEV [81897.943302] add /devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0/ttyUSB0/tty/ttyUSB0 (tty)

このような表示がされます。
udevで認識したデバイスは、udevのルールファイルで定義された内容に従いデバイスファイルが追加されるようです。ルールファイルは
/lib/udev/rules.d
/etc/udev/rules.d

に有ります。 前者は標準で持っているもので、ユーザが定義する場合は後者に配置するようです。
/lib/udev/rules.d/50-udev-default.rules
にデフォルト定義?があるのでこれを参考にしてファイルを作ります。
今回は/etc/udev/rules.d/70-usbserial.rulesという名前で作成しました。
※同じディレクトリにあった"70-persistent-net.rules"をコピーして作りました。
内容はこんなかんじです。
# This file maintains persistent names for USB-Serial I/F devices.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-cd-aliases-generator.rules
# file; however you are also free to add your own entries provided you
# add the ENV{GENERATED}=1 flag to your own rules as well.
KERNEL=="ttyUSB*", MODE="0666"

必要なのは最後の行です。#から始まる行はコメントです。
ファイル名は必ず「.rules」という形で終わる必要があります。でないと、適用されません。
また、最初の数字は低い方ファイルから評価され、マッチするのがあるとそこでその動作を実施するようですので、場合によっては調整する必要があると思います。
ファイルの作成・配置が終わったらudevを再起動します。
$sudo service udev restart


で、USBシリアルケーブルを接続し、再度権限を確認します。
$ll /dev/ttyUSB*
crw-rw-rw- 1 root dialout 188, 0 11月 9 17:14 /dev/ttyUSB0


となり、アクセス権が付加されました。
この状態で、GtkTermをユーザ権限で起動し(terminal、GUIどちらでも)インタフェースを指定すると問題なくアクセス出来ました!
こりゃ楽でいい。
ちなみにポートを指定して起動するには

$ gtkterm -p /dev/ttyUSB0

で出来ます。

GUIでアプリを起動した際にも初期接続ポートを指定するには
/usr/share/applications/gtkterm.desktop
ファイルを開き実行オプションを追加します。(赤字)
[Desktop Entry]
Encoding=UTF-8
Name=Serial port terminal
Name[fr]=Terminal pour port série
Name[it]=Terminale per porta seriale
Comment=Communicate with the serial port
Comment[fr]=Communique avec le port série
Comment[it]=Comunica con la porta seriale
Exec=gtkterm -p /dev/ttyUSB0
Icon=gtkterm.xpm
Terminal=false
Type=Application
Categories=GTK;Utility;

のように編集して上げれば、UnityなどからGUIで起動した際に/dev/ttyUSB0に接続しに行きます。
マクロ機能なんかもあるようですが、まだ調べていません。


実行画面(CiscoCatalyst3700に接続した例)
gtkterm画面





スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

Author:Opecha-DaDa
ニッチな技術メモ的なブログになりつつありますが、だからこそあなたのお役に立てる内容があれば幸いです。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。