【2016年7月】
Raspberry pi シャットダウンUSBキー V2
このエピソードの続き。
Raspberry pi をお手軽にシャットダウンできるUSBキー V2 を作ってみた。
前版では、SDカードにファイルを書き込み、特定のファイルが存在しているか否かでシャットダウンを実行するように作成した。
しかし、SDカードを準備して、0バイトのファイルを1個だけ置くという、ひじょうに無駄の多い構成で、たとえば、SDカードの故障によってファイルが読み出せず、シャットダウンに移行できない状況も発生し得る。
もう少しシンプルな構成にできないだろうか。
前版では、「情報=ファイル」という頭があって、SDカードに情報を書き込んだのだけれど、SDカードに拘らず、USBデバイスの固有情報を利用して、特定のUSBデバイスが挿されたらシャットダウンをかける様にする事はできないだろうか。
SDカードを挿していないカードリーダーを Raspberry pi に挿し、接続されているUSBデバイスを一覧してみる。
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 004: ID 1267:0201 Logic3 / SpectraVideo plc A4Tech SWOP-3 Mouse
Bus 001 Device 005: ID 0566:3002 Monterey International Corp.
Bus 001 Device 012: ID 05e3:0751 Genesys Logic, Inc.
$
上記の例では、最後の「Bus 001 Device 012」がカードリーダーだ。
カードリーダーのみでもUSBデバイスとして認識された。
カードリーダーの詳細を表示してみる。
Bus 001 Device 012: ID 05e3:0751 Genesys Logic, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x05e3 Genesys Logic, Inc.
idProduct 0x0751
bcdDevice 14.03
iManufacturer 3
iProduct 4
iSerial 0
:
(省略)
:
$
取得したUSBデバイスの情報から、「idVendor」「idProduct」あたりが固有情報(に近い情報)として使えそうだ。
これらの情報を抽出し、特定の値であればシャットダウンを実行するようにする。
idVendor 0x05e3 Genesys Logic, Inc.
idProduct 0x0751
$
これならば、SDカードを準備する必要はない。
USBカードリーダー単体であれば、Amazonでは200円程度から、中国通販サイトなら20円程度からある。
また、中国通販サイトでSDカードを購入すると、多くの場合、カードリーダーもセットで送られてくるので、ずんべ の手元にも余ったものがけっこうあり、それらを活用できる。
必要な機材点数が減り、コストも削減できた。同時に故障率も減るものと考えていいだろう。
更に言うと、シャットダウン・キーとするUSBデバイスは、別にカードリーダーである必要もない。マウスでも、キーボードでも、USBデバイスなら何でもいい。
もちろん、シャットダウン用の「idVendor」「idProduct」と同一のUSBデバイスを挿してしまうとシャットダウンが始まってしまうわけだけれど、別に一般ピープルが使用するわけではなく、限定された環境で使うものなので、気にしない事にする。