Plamo Linux 日記

Plamo Linux に関係することだけではなく,最近は一般的なコンピュータやガジェット関係についても記載してます.

Debian Jessie に Kodi 入れて IO-DATA の GV-MC7/RCKIT でリモコン操作できるようにしてみた

少し前に家庭内サーバーを Windows から Debian に入れ替えたついでに,何となく Kodi を入れてメディアプレーヤーにしようかと,ちょこっと作業してみました.以前まではメディアプレーヤーには PS3 をメインに使っていたけど,どうせサーバーは 24 時間電源つけっぱなしなのでこっちを使った方が便利かなぁと.Kodi が立ち上がっているだけならそれほど消費電力も変わらないだろうしね.

いつものことながら,自分への備忘録を兼ねての blog 記事です.はい.あれこれ不足している記述もあるかもしれませんがご了承願います.

参考までに,使っているマシン (M/B) は ASRock N3700M です.Debian のバージョンは Jessie (8.5) を使っています.

使っている Debian の状態ですが,サーバー機ということで X も入れずに使っていた状態でしたが,いろいろと試行錯誤や動作確認をする上で最初に X を入れておいた方が便利かなということで,とりあえず xorg, twm, xterm あたりをインストール.startx で必要最上限で立ち上がって twm を使って xterm などが実行できることだけ確認.

次,リモコン周り.キーボードやマウス,スマホでの操作ではなくて,物理リモコンが使いたかったのでリモコンのセットアップ.

手元で余っていたリモコンに IO-DATA 製の GV-MC7/RCKIT があったのでこれを利用しました.

http://gihyo.jp/admin/serial/01/ubuntu-recipe/0214 の記事を参考にセットアップ.どうもありがとうございます.ただし,この記事のままだと手元の環境は駄目でした.記事中の mode2 までの確認までは同じ手順で大丈夫でしょう.

手順としては

# apt-get install lirc lirc-x

したあと,ローレベルの動作確認.その後,lirc の設定は下記の行います./etc/lirc/hardware.conf 中は下記ファイル.

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS=""

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false

#Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER=""
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_dev mceusb"

# Default configuration files for your hardware if any
LIRCD_CONF="/etc/lirc/lircd.conf"
LIRCMD_CONF=""

/etc/lirc/lirc.conf は http://image.gihyo.co.jp/assets/files/admin/serial/01/ubuntu-recipe/0214/gvmc7_rckit.conf にある gvmc7_rckit.conf を使って上書きしました.ただし,ファイル中の

name  I-O_DATA_GV-MC7_RCKIT

の記述を

name        mceusb

に書き換えてあります.何でそんなことしているのかって言うと,後々必要になると思われる Kodi の設定ファイルを書き換えたくなかった or 新しく作成したくなかったからです.このリモコン用にキー設定ファイルを用意するのではなく,既存の mceusb の設定をそのまま使いたかったという訳ですね.

で,

# service lirc start
# irw

でリモコンのボタンを押してみて,受信できていることを確認.これでリモコン側の準備オッケー.

次,Kodi のインストール.

http://kodi.wiki/view/HOW-TO:Install_Kodi_for_Linux あたりを参考にして入れました.

/etc/apt/sources.list.d 以下に backports.list というファイルを作成して

deb http://http.debian.net/debian jessie-backports main

と記述.で,記事中 の通り jessie-backports から

# apt-get install kodi

で Kodi をインストール.あと,linux-image-4.6.0-0.bpo.1-amd64 と xserver-xorg-intel も必要みたいだったので

# apt-get -t jessie-backports install xserver-xorg-intel linux-image-4.6.0-0.bpo.1-amd64

でインストール.

コンソール上から適当なユーザーでログインをして X を立ち上げて xterm 上から

# kodi

で Kodi を起動して動作確認.一応,この状態でリモコンも使えるようになっているはずです.過去に必要だった MCEremote plugin などのインストールは現在は必要ありません.

最後に少しだけ設定変更.

日本語化は SYSTEM > Settings > Appearance > Skin の Fonts を「Arial based」に.で,その後,SYSTEM > Settings > Appearance > International の Language を「Japanese」にすれば日本語表記になります.フォント変更を先にやらないと,フォントが化け化けになってメニューが分け分からない状態になるので注意しましょう.使われているのが中華フォントなのでちょっと見た目がイマイチですが,使われているフォントを変更したい場合には,検索サイトから適当に検索してみるとフォントを入れ替える方法を書いたホームページが見つかると思いますので参考にしてみてください.私自身は別に何とも思わないの中華フォントのまま使っていますけどね.

また,ASRock N3700M では システム > 設定 > ビデオ > アクセラレーション の「ハードウエアアクセラレータを許可 - VDPAU」「ハードウエアアクセラレータを許可 -VAAPI」を off にしないとまともにビデオデコードできませんでした.あとは HDMI からオーディオ出力しているので システム > 設定 > システム > オーディオハードウエア の「オーディオ出力デバイス」を HDMI あたりに.

と,ここまではよかったんだけど,リモコンの戻るボタンなどいくつかのボタンが Kodi 上で効かないですね....うーむ.やっぱり仕方ないから Kodi 側のリモコン設定をいじってあげないと駄目なのかな?システム側のファイルを直接いじるのであれば,/usr/share/kodi/system/Lircmap.xml を適当に変更すれば良いかと思います.システム側のファイルを変更するのではなく,ユーザー側で変更するなら,Kodi を実行するユーザーのホームディレクトリにある ~/.kodi/userdata 以下にシステムの /usr/share/kodi/system/Lircmap.xml ファイルをコピーして適当に編集すれば良いかと思います.

kodi でのデバッグは システム > 設定 > システム > ログ の「デバッグ出力を有効にする」を on にすれば ~/.kodi/temp/kodi.log にデバッグ用のログが細かく出力されるようになりますので,その中を見ながら確認すれば良いでしょう.リモコンコード出力が Kodi 側に渡っているかの確認とか,どういったリモコンコードになっているかもこのログで分かります.

とここまで書いたところで,Lircmap.xml 中を見ると mceusb でのキー定義で「戻る」は「KEY_BACK」に割り当てられているようですね.ということなので,リモコン側の定義を mceusb 定義に合わせて「KEY_BACKSPACE」を「KEY_BACK」に書き換えました.その他の食い違っているボタンの定義箇所も数はそんなに多くなさそうなので,Kodi ではなくリモコン側で修正する方が簡単かなと思い gvmc7_rckit.conf のキー定義名を書き換えたところうまくいくようになりました.

一応,気づいた範囲で修正を行った gvmc7_rckit.conf を参考までにここに置いておきます.ざっと使っている感じは問題なさそうですが,さらに抜けているところなどがあれば各自で適宜修正してください._o_

最後に,マシンを立ち上げたときに systemd 経由で Kodi が自動で立ち上がるように設定を変更.

http://kodi.wiki/view/HOW-TO:Autostart_XBMC_for_Linux の記事そのままで問題なさそうです.私自身は記事中の systemd の場合を使いました.

# adduser --disabled-password --disabled-login --gecos "" kodi
# usermod -a -G cdrom,audio,video,plugdev,users,dialout,dip,input kodi

で kodi ユーザーを追加して /etc/systemd/system/kodi.service ファイルを下記内容で作成.

[Unit]
Description = Kodi Media Center

# if you don't need the MySQL DB backend, this should be sufficient
After = systemd-user-sessions.service network.target sound.target

# if you need the MySQL DB backend, use this block instead of the previous
# After = systemd-user-sessions.service network.target sound.target mysql.service
# Wants = mysql.service

[Service]
User = kodi
Group = kodi
Type = simple
#PAMName = login # you might want to try this one, did not work on all systems
ExecStart = /usr/bin/xinit /usr/bin/dbus-launch --exit-with-session /usr/bin/kodi-standalone -- :0 -nolisten tcp vt7
Restart = on-abort
RestartSec = 5

[Install]
WantedBy = multi-user.target

その後,

# systemctl start kodi
# systemctl stop kodi

で動作確認して問題なさそうなら

# systemctl enable kodi

で登録かな.

流れはこんな感じですが,いろいろと試行錯誤しながら作業していたので,上記記述で抜けているところなどあれば申し訳ありません.足りないパッケージなどあったりするかも.その場合にはエラーメッセージを参考に必要なパッケージを追加するなり,各種引用した記事中などを読んで対策方法を探してみてください.

あっ,いろいろと調べながら作業していたのですが,適当なキーワードでネット検索すると,私が昔に Raspberry Pi 2 の OpenELEC で GV-MC7/RCKIT を使おうとしていた時の記事がぼろぼろと引っかかるようです,ラズパイの OepnELEC の場合は OS が Debian ベースではなく,独自のもののようなのでちょっと手順は異なるかなとは思いますが,所詮 linux ベースなので lirc 周りに同様の設定を行えば GV-MC7/RCKIT を使えるようになるかなとは思います.確認はしてないですけど....

手元にはさらに,使っていない Xbox360 用の赤外線リモコンも転がっているので,こっちも同様の手順で時間のあるとき&気が向いたときに動作するようにしておこうかなと思っています.Kodi の昔の名前の XBMC は xbox media center の略なので,Kodi 側には当然リモコンコード定義がはいってますからね.lirc の定義はこのあたりなどに転がってますね.今だと,Xbox 360 用リモコンだと需要ないみたいでかなり安価に入手できますので,予備を購入するのもよさそうですからね.中華製の MCE リモコンよりも作りはかなりしっかりしてますし.受光部は IO-DATA のもので流用できそうな雰囲気.

なんかこのあたりをいろいろといじっていると,Windows と違って Linux だと自分でリモコンコードの定義さえ書いてしまえばどんなリモコンもつかえるってちょっと楽しいですね.

そういえば,昔,リモコンのハードウエアを作っていたこともありました.赤外線リモコンの送受信用の半導体回路ね.受信側はリモコン受信するとコードをデコードしてコードを FIFO レジスタに積んで CPU 割り込み発生させるって回路だったかな.送信機側はコードを FIFO レジスタセットしてスタートたたけば自動で送出する回路かな.作っていたのは家電用途だったので,送信側はメーカーコードつけたり,受信側はメーカーコードではじいたりって機能をつけた気がするけど,PC 用のリモコンって受信側がどの受信機であっても受け取れるみたいだから,メーカーコードってついていないのかな?当然,搬送波の波長は同じじゃないと駄目なんだけど.ちょこっと探すと http://elm-chan.org/docs/ir_format.html あたりに簡単な説明がありますね.この文中のメーカー識別コードってやつがメーカーごとに異なるんだっけ.学習リモコンはここを切り替えればいろんなメーカの制御が出来るんだよね.もっと細かい規定がたくさんあるので,興味のある人は調べてみてください.割とおもしろいかもね.

今だとハードで作らなくても,ラズパイなどで PIO をコントロールするプログラミングをして,IR 送信・受信部品とかをその PIO ポートにつけて動かしてみたりしてみると入門レベル〜中級レベルで簡単に学習リモコンが作れそうですね.

ん?ホームページを探してみると,ラズパイでそこまで低レベルなプログラミングしている例はすくないのかな?なんか普通に lirc ライブラリ使ってプログラミングしている例がほとんどなんだけど.それだと上の方に書いた GV-MC7/RCKIT の定義ファイルをいじくるのとあんまりやってること変わらないよね.:-)

まぁ,確かに PIO をこねくり回すプログラム書き始めると lirc ライブラリと同じようなものを作るって話になってしまうんだけどね.

最後は話がずれてしまいました.

以上,参考まで.

Microsoft マイクロソフト Xbox 360用 DVDメディアリモコン-538161
OEM
OEM
I-O DATA Windows Media Center専用リモコン GV-MC7/RCKIT
アイ・オー・データ
アイ・オー・データ