PC-OP-RS1 on Linuxに関するメモ

●ここは?

 私、Yuaihoが物欲に負けて買った、BUFFALOのPC-OP-RS1・KURO-RS(以下Remoet Station)に関するLinux向き覚え書き・メモです。何故か買っちゃった人はご参照ください。

●環境について

以下の環境で記事を書いています。
サーバ端末:第14号機
OS:Linux(CentOS 5.1)

●チャンネル

 以下のようになっています。

ch 本体ポート 発光部分の印
1
A
黄色
2
A
黒色(無印)
3
B
黄色
4
B
黒色(無印)

 要するに黄色が奇数チャンネル、黒(無印)が偶数チャンネルですね。
 参考までにどうぞ。

●ドライバインストール

 インストールは、Remote Stationを接続した後、以下のコマンドで行えます。
 「root」アカウントでやらないと多分失敗します。接続しなくても出来るかも知れませんが、実験は面倒くさいのでしていません。

[user@host ~] # /sbin/modprobe ftdi_sio vendor=0x0411 product=0x00b3

 これで、以下二つのようになればOKです。

[user@host ~] # ls -l /dev | grep ttyUSB
crw-rw---- 1 root uucp 188, 0 Feb 28 16:34 ttyUSB?
※他にUSB-Serialデバイスが無い限り?=0です。
[user@host ~] # cat /proc/bus/usb/devices
T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0411 ProdID=00b3 Rev= 4.00
S: Manufacturer=BUFFALO
S: Product=BUFFALO RemoteStation PC-OP-RS1
S: SerialNumber=0000xxxx
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
※多少違ってても大体同じなら問題ありません。

起動時の自動認識

 一旦認識させてもサーバをシャットダウン・再起動すると、再び

[user@host ~] # /sbin/modprobe ftdi_sio vendor=0x0411 product=0x00b3

をしない限り、サーバは「PC-OP-RS1」を認識しません。つまり再起動すると再認識させないかぎり「/dev/ttyUSB?」が使えません。いちいち再起動の度にログインして、この作業をするのも面倒くさいので、起動時に自動的にやってもらいましょう。

 以下のコマンドを実行するか、

[user@host ~] # echo "/sbin/modprobe ftdi_sio vendor=0x0411 product=0x00b3" >> /etc/rc.d/rc.sysinit

viなりemacsで「/etc/rc.d/rc.sysinit
を開いて尻の方に、
/sbin/modprobe ftdi_sio vendor=0x0411 product=0x00b3
を付け加えます。

これで起動時に自動的に認識してくれます。

●/dev/ttyUSB0の所有者(パーミッション)

 そのオーナーとグループは私のシステムの場合、以下のようになっています。

[user@host ~] # ls -l /dev | grep ttyUSB
crw-rw---- 1 root uucp 188, 0 Feb 28 16:34 ttyUSB?
※他にUSB-Serialデバイスが無い限り?=0です。

 見てわかる通り、持ち主はroot、グループはuucpになっています。rootであればchmodやchown、chgrpが出来ますが、再起動などでデバイスを認識するたびに、変更を忘れるようです。
 面倒くさいのでuucpなんか使っている人は今日日いないと思うので、グループuucpに使いたい一般ユーザを加えます。phpからsuid無し、もしくはcgiを非SuExec環境で使う場合はユーザ:apache(もしくはhttpd)を、CGIをSuExec環境で使うなら、呼び出されうるユーザを加えます。

 「/etc/group」を直接編集するか、以下のコマンドで出来るはずです。

[user@host ~] # usermod -G uucp targetuser
※targetuserが加えたいユーザ名

 これで、一般ユーザもRemote Stationを扱えます。まぁ、宅鯖向け記事なので、rootも一般ユーザも貴方ですが・・・。rootでCGI回せませんしね。技術的には可能かも知れませんが怖いですし。

 「/etc/rc.d/rc.sysinit」で、chown等のコマンドを追加してもいいと思います・・・。

●rc_sendがコケる問題

 何故か私のシステムでは起動直後(ドライバ読み込み直後)に、こちらにあるrc_sendを使うと使うとRemote Stationがコケます。よってrc_send.cのソースコードをみて、以下のように対策しました。

★対策用スクリプト

→必要なもの

・Perl実行環境
・Device::SerialPortモジュール
Device::SerialPortモジュールが無い場合は以下のようにしてCPANを起動し、

[user@host ~] # cpan

を起動し、install Device::SerialPortと打つとインストールされます。初めてCPANを起動すると色々聞いてきますが、わからない場合は全部Enterを押せばOKです。cpan公式鯖が落ちてると、設定に失敗します。

cpan> install Device::SerialPort

→スクリプト本体

以下がスクリプト本体です。これを「/sbin/rsinit」とか適当な名前で保存して、実行権限を与えて、前述した 「/etc/rc.d/rc.sysinit」の尻に、「/sbin/rsinit」と加えておきます。

 これで、勝手に初期化してくれます。やってることは/dev/ttyUSB?に0(数字)を一文字送ってるだけです。
$g_deviceは環境に合わせてください。

●参考にしたサイト

PC-OP-RS1 PukiWiki
赤外線リモコンを Linux からコントロール

特にrsinitは下のサイトを参考(というかほぼ切り取り)して作りました。

TopHome