2015年1月4日日曜日

RaspbmcをWiFi親機にしてAirPlayする

ケースに入れました。ちょっとクリーム色っぽい。

 前回、とりあえずRaspbmcをインストールし、AirPlayを試したもの動画が再生できず、音楽だけ流れるしょぼーんな結果に。今回は、AirPlayで動画再生にチャレンジします。ついでにRaspberry Piを親機化します。
とりあえず、想定した使い方は、実家とか親戚の家に遊びに行った時に、Raspberry PiをTVにつなげて、iPhoneの写真や動画をTVに映すことです。したがって、Raspberry Piは、WiFiの親機として動作し、そこにiPhoneで接続することを想定しています。
で、これをいろいろ試した時には、手元に有線の環境がなくテザリングでWiFi環境しかなかったので、Raspberry Piの有線の設定が適当です。本当は有線の設定をきちんとして、ブリッジの設定をしたいのですが、それは次回に持ち越しです。今回は単独でRaspberry PiでAirPlayをする環境を設定するまでです。

とりあえず、前回の続きRaspbmcの設定をする


  • RaspbmcのMenuでpasswardを設定する。
    • PROGRAMS->Raspbmc Settings->SystemConfiguration
      1. Enter Passwordに新しいパスワードを入力
      2. Confirm Passwordに上記と同じパスワードを入力
      3. Set Passwordを押下

SSHでRaspberry Piに接続して色々設定を変更する

  • 先の設定をした後にsshを使って接続する。
    • 無線で接続すると無線の設定を変更した途端に接続が切れてしまうので、有線で接続したほうが良い
    • 家のLANに有線で接続するときには、DHCPでIPがふられるので、そのIPに接続する。直接接続するときには、固定IPを振っておいたほうがよい。有線のネットワークの設定は、PROGRAMS->Raspbmc Settings にあります。
    • Macの場合には、ターミナルを立ち上げて
      ssh pi@192.168.x.x
      というように接続すればOKです。
      アカウント名はpi、パスワードはRaspbmcのMenuで設定したパスワードになります。
    • 以降の作業は、SSH上で行います。
  • 最初にログインしたときに言語とタイムゾーンの設定を求められます。
    • 言語は、ja_IP.UTF-8あたりとNoneを選択
    • タイムゾーンは、GMT+9を選択
  • とりあえず、2014/12/31現在の最新のRaspbmcでは、AirPlayはできるものの、動画がうまく再生できません。パッケージを新しくすると動画が再生できます。

    sudo apt-get update
    sudo apt-get upgrade
  • Raspberry Piを親機化するのに必要なパッケージをインストールします。

    sudo apt-get install hostapd dnsmasq
  • hostapd の設定をします。これを適切に設定しないと、せっかくWiFiアダプターが動作してもiPhoneがRaspberry Piをアクセスポイントとして認識してくれません。

    cd /usr/share/doc/hostapd/examples/
    sudo gunzip hostapd.conf.gz
    sudo cp hostapd.conf /etc/hostapd.conf
    sudo vi /etc/hostapd.conf
    • とりあえずのhostapd.confの内容は以下の様な感じです。
      アクセスポイントとしてきちんと設定するには、ブリッジの設定が必要ですが、今回は設定していません。とりあえず親機として動作してiPhoneが接続できるようにする設定です。
      ちなみにiPhone5だからかもしれませんが、wpa_pairwiseとrsn_pairwiseの値はTKIPじゃないとうまく接続できませんでした。 ssidとwpa_passphraseは、適当に設定して下さい。
      logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2 dump_file=/tmp/hostapd.dump ctrl_interface=/var/run/hostapd ctrl_interface_group=0 ssid=MyXXXXXX country_code=JP hw_mode=g channel=1 beacon_int=100 dtim_period=2 max_num_sta=255 rts_threshold=2347 fragm_threshold=2346 macaddr_acl=0 auth_algs=3 ignore_broadcast_ssid=0 wmm_enabled=1 wmm_ac_bk_cwmin=4 wmm_ac_bk_cwmax=10 wmm_ac_bk_aifs=7 wmm_ac_bk_txop_limit=0 wmm_ac_bk_acm=0 wmm_ac_be_aifs=3 wmm_ac_be_cwmin=4 wmm_ac_be_cwmax=10 wmm_ac_be_txop_limit=0 wmm_ac_be_acm=0 wmm_ac_vi_aifs=2 wmm_ac_vi_cwmin=3 wmm_ac_vi_cwmax=4 wmm_ac_vi_txop_limit=94 wmm_ac_vi_acm=0 wmm_ac_vo_aifs=2 wmm_ac_vo_cwmin=2 wmm_ac_vo_cwmax=3 wmm_ac_vo_txop_limit=47 wmm_ac_vo_acm=0 eapol_key_index_workaround=0 eap_server=0 own_ip_addr=127.0.0.1 wpa=2 wpa_passphrase=XXXXXXXXXXXX wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=TKIP wpa_group_rekey=600 wps_state=0

  • Raspbmcのちょっとやらしいとこですが、NetworkManagerが導入されているので通常のLinux Serverの設定をしても、NetworkManagerが上書きしてしまいます(イラ
    そこで、NetworkManagerの管理対象から、wifiアダプターを外します。これをすることで、wifiアダプターの親機化をすることができますが以降RaspbmcのMenu画面からwifiアダプターの設定ができなくなるので注意
    • まず、管理対象から外すwifiアダプターのMACアドレスを確認します。

      ifconfig wlan0

      以下のように表示されるので、MACアドレスをメモっておきます。
      wlan0     Link encap:Ethernet  HWaddr 34:95:XX:XX:XX:XX
    • NetworkManagerの対象からwlan0を外すため、設定ファイルを編集します。
      設定ファイルに[keyfile]以下を追加します。MACアドレスにwlan0のMACアドレスを指定します。
      保存したとたんに無線の設定が変わります。無線でSSHしてるといきなり切れるので注意。

      sudo vi /etc/NetworkManager/NetworkManager.conf

      [main]
      plugins=ifupdown,keyfile

      no-auto-default=B8:27:EB:XX:XX:XX,

      [ifupdown]
      managed=false

      [keyfile]
      unmanaged-devices=mac:34:95:XX:XX:XX:XX
  • 親機として動くからには、継った子機にIPアドレスを払い出ししなければいけません。設定をしてDHCPが通るようにします。DHCP用にnetfilterを設定します。iptables -A INPUT -s 0.0.0.0 -i $IFACE -j ACCEPT を追加

    sudo vi /etc/network/if-up.d/secure-rmc

        :(途中省略:ファイルの最後の方)
    logger -t iptables "Configuring ip tables for interface $IFACE"
    if [ "$IFACE" != "lo" ]; then
        NETMASK=$(get_subnet $IFACE)
        if [ ${#NETMASK} -eq 0 ]; then
            logger -t secure-rmc "netmask not found"
            exit 1
        fi
        iptables -A INPUT -s $NETMASK -i $IFACE -j ACCEPT
        # for DHCP
        iptables -A INPUT -s 0.0.0.0 -i $IFACE -j ACCEPT

        iptables -A INPUT -i $IFACE -j DROP
    fi
    • wlan0を自動で立ち上げて、その際にhostapdを立ち上げるようにします。
      ipアドレスの設定は、適当に。

      sudo vi /etc/network/interfaces

      allow-hotplug wlan0
      iface wlan0 inet static
          address 192.168.2.1
          netmask 255.255.255.0
          broadcast 192.168.0.255
          network 192.168.2.0
          post-up /usr/sbin/hostapd -B /etc/hostapd.conf
          post-up iptables -t nat -A POSTROUTING -o eth0 -s 192.168.2.0/24 -j MASQUERADE
          pre-down kill `pidof hostapd`
          pre-down iptables -t nat -D POSTROUTING -o eth0 -s 192.168.2.0/24 -j MASQUERADE
  • DHCPの設定をします。ここは子機に割り振るIPアドレスの設定に合わせて適宜変更します。interfaceの行を有効にして、wlan0を指定します。147行目のdhcp-rangeのコメントを外し、割り振るIPアドレスを設定します。

    sudo vi /etc/dnsmasq.conf
       :(省略)
    interface=wlan0
       :(省略)
    dhcp-range=192.168.2.50,192.168.2.150,255.255.255.0,12h
  • AirPlayの際にIPv6が邪魔するので無効化(くわしくはこちら
    /etc/sysctl.d/ipv6.conf を作成する。

    sudo vi /etc/sysctl.d/ipv6.conf

    net.ipv6.conf.all.disable_ipv6 = 1
  • 想定する使用方法だと、キーボードやマウスを付けないので、正常にシャットダウンできないケースも考えられる。ヒジョーに親切なことにRaspbmcは正常にシャットダウンしないと警告ダイアログが出る(リセットさんのようだ)。ところがキーボードやマウスがないと、このダイアログを消す方法がないので、邪魔になる。Raspbmcの設定でも消せそうなメニューがあったが、面倒なのでプログラムを修正。該当箇所をコメントアウトする。

    sudo vi /opt/xbmc-bcm/xbmc-bin/share/xbmc/addons/script.raspbmc.settings/autostart.py

        
        import xbmcgui
        dialog = xbmcgui.Dialog()
    #    if DISTRO == "Raspbmc" and os.path.isfile("/home/pi/.bootstatus") and c>
    #         dialog.ok("Raspbmc did not shut down properly", "Raspbmc should>
    #         dialog.ok("Raspbmc did not shut down properly", "If your device>

        if DISTRO == "Raspbmc":
             os.system('sudo /sbin/initctl emit --no-wait start-wd')
  • GPUの設定を変更する。RAMサイズが512MBなのでGPUに256MBくらい割り当てる。動画再生のためには、GPUのメモリーが必要。gpu_memの値は、gpu_mem_512の値で上書きされるようですが、念のため両方変更。

    sudo vi /boot/config.txt

    arm_freq=850
    core_freq=375
    force_turbo=1
    gpu_mem=256
    gpu_mem_512=256
    gpu_mem_256=112
    disable_overscan=1
    start_file=start_x.elf
    fixup_file=fixup_x.dat
    hdmi_ignore_cec_init=1

  • ここまで設定したら、sudo shutdown -r now で再起動して、動作を確認しましょう。wifiでRaspberry Piに接続して、AirPlayで出力先に指定すれば、ばっちり動画と音楽が再生できます。

ちょっと注意

 iPhoneにxbmcRemoteというアプリをインストールすると、iPhoneからRaspbmcを操作できます。キーボードやマウスがなくてもRaspbmcを操作できるのでお勧めです。ただし、これを使ってRaspbmcにつなげるとAirPlayで接続した時にスピーカーとして認識されてしまい、動画が再生できない?ようです。まあ、AirPlayの時にxbmcRemoteを落とせばいいだけですが。うーん、xbmcRemoteは関係なかったよう。無線の速度が遅いのが原因か。。。無線が最高速出ていないので、このへんも見直さないと。

参考HP


2014年12月14日日曜日

とりあえずRaspbmcをインストールしてみよう

Amazonさんからの荷物も届き、あとはケースが届けばOKです。
とりあえず、ケースはなくとも動作に必要なものはこれで揃ったので、早速試してみることにしましょう。
王道では、NOOBSとよばれるディストリビューションを公式サイトからダウンロードしてSDカードに焼けばOKです。が、そこはそれ、とりあえずやってみたいことを優先し、ここはひとつ「Raspbmc」から始めましょう。NOOBS使ってもRaspbmcはインストールできるのですが、ここは直接最新版をインストールしてみたいと思います。

RaspbmcはDebianベースのディストリビューションで、XBMCとよばれるマルチメディアプレイヤーが最初から含まれているのが特徴です。XBMCがiPhoneからのAir Playに対応しているので、これを試してみるのが主な目的です。
我が家のPCはMac OS X(10.9.5)なので、ターミナルを使えばさくさくインストールできるはず。


  1. ターミナルを立ち上げる。
  2. とりあえず作業用ディレクトリを作成
    $ mkdir raspbmc
  3. 作業用ディレクトリに移動
    $ cd raspbmc
  4. インストール用のファイルをリポジトリから入手
    $ curl -O http://svn.stmlabs.com/svn/raspbmc/release/installers/python/install.py
  5. ファイルに実行権を付与
    $ chmod +x install.py
  6. ファイルを実行。管理者のパスワードを聞かれるので入力する。
    $ sudo python install.py
  7. 「Please ensure you've inserted your SD card, and press Enter to continue.」と表示されるので、インストールするSDを差し込んで、デスクトップにアイコンが表示されたらEnterキーを押す。
  8. HDDのリストが表示される。通常 disk1はPCのHDDで、disk2がSDのはず。sizeをよく確認し、インストールしたいSDの名前(IDENTIFIER)を入力する。渡しの場合には、「disk2」と入力しました。
  9. ライセンスの同意を求められるので「y」と入力
  10. 最新ソフトがダウンロードされ、SDに焼かれる。
  11. 「Would you like to setup your post-installation settings [ADVANCED]? [y/N] 」と聞かれる。NでOKの場合には14へ。yの場合には以下の12、13に進む。
  12. 「Would you like to install Raspbmc to a USB stick or an NFS share?」と聞かれる。今のところUSBやらNFSを使う予定はないのでNにする。
  13. 「Would you like to configure networking manually? 」と聞かれた。ネットワークの設定を自分でやりたい場合は、以下の様な感じで質問に答える。とりあえずは、有線で接続してDHCPでやるのが一番確実なので、Nでよい。yで答えた場合以下の様な設定項目が出る。
    • 「Please choose the network type you would like to configure:」
      ここで有線か無線のどちらかを設定できる。
      ※この段階ではどちらか一方しか設定できない。無事にインストールが完了すれば、メニュー画面から変更できる。
    • 1なら有線
      • IP Address
      • Subnet Mask
      • DNS Server
      • Default Gateway
    • 2なら無線
      • Use DHCP ?
      • Enable ad-hoc networking?
      • Enable 5Ghz only? 
      • Please enter SSID 
      • Please enter encryption type
      • Please enter encryption key
  14. 上記の設定が終わると無事にインストール完了
    そのままSDカードは抜いて構わない。
  15. ボードにLANケーブル、HDMI、キーボード、マウスを接続し、microSDを挿入して電源を接続する。
  16. レインボーな画面がしてしばらくするとOSの起動画面が表示される。
    初回でネットワークの接続を確認し、自動でアップデートが開始される。
    ダウンロードはかなり時間が掛かる。
    ダウンロード後も何回か再起動を繰り返して、アップデートする。
    ちなみに40分位かかりました。
    ※ダウンロード中にUSBのデバイス見つけたとかOSが色々なメッセージを表示して、ダウンロード画面が崩れて読めなくなる。何となく数字が更新されていれば、ダウンロードは淡々と続いているので、無視する。
  17. 起動音が鳴って、設定画面が出る。
    • 言語の選択:とりあえずEnglishを選択
    • メニューから、SYSTEM->Settings->Services->AirPlayで
      Allow XBMC to receive AirPlay content で ONにする。
    • PROGRAMS -> Raspbmc Settings
      • Network Configuration
        ネットワーク設定(Wifiの設定)
      • System Configuration
        パスワードの再設定
ここまでで、iphoneから音楽を再生し、Air Playを選択すると、HDMIで接続した画面から音楽が流れました。
でも、ミュージックビデオを再生するとエラーが出て再生できない。
RaspbmcのメニューからならYoutubeとか動画の再生もできているので、Air Playの問題のようだ。
しかも、無線はうまく接続できず、有線のみで接続している。
うーん、ちょっと調べてみないと。



2014年12月13日土曜日

Raspberry Piが届いた

 以前から興味があったRaspberry Piを衝動買いしました。
 とりあえず0から揃えるため、色々と購入。
 購入したのは以下の様な機材です。購入金額は2014/12/12時点のものです。


RS オンラインで購入
 専用ケース:Raspberry Pi B+ Case, White       ¥980
 RASPBERRY PI B+                  ¥3,940
 HDMIケーブル(1m)                 ¥942
                       小計  ¥5,862
                      配送料   ¥450
                      消費税   ¥505
                       合計  ¥6,817

Amazon.co.jpで購入
 Transcend microSDHCカード 16GB Class10 2枚     ¥1,040
 PLANEX (2ポート合計2000mA)USB充電器
 PL-WUCHG03-W                        ¥588
 iBUFFALO USBキーボード ホワイト BSKBU11WH          ¥645
 iBUFFALO 光学式有線マウス USB Mサイズ BOMUMLGA   ¥384
 Logitec 無線LANアダプタ 11n LAN-W300NU2SWE     ¥1,180
 USB2.0 TO TTL 6ピン シリアル・コンバータ UART
 モジュール CP2102 STC 6ピンケーブル              ¥289
                          配送料     ¥150
                           合計  ¥4,276

ダイソーで購入
MicroUSB-USBケーブル                  ¥108

合計:¥11,201

何か色々買ったら1万円超えている。。。。。

  • microSDカードを2枚買ったのは、用途で異なるOSを使う予定なので。
  • 無線LAN用にWifiアダプタを購入。これは必須。
    もっと小さな機種もあったが、熱とかに弱いようで評判が良くない。
    動画とか再生したいので連続運用に耐えられない機種は避けたい。
    あと、動画の再生とかに使うなら速いほうが良いということで、この機種を選定
    2.4GHzで300Mbps。5GHzを選択しないあたりが貧乏症。電子レンジ使ってなきゃ大丈夫?
  • おうちのパソコンがMacなので、実は我が家には有線のキーボードやマウスがない。
    無くてもTelnetなら困らないのだが、やっぱりあったほうがいいのでキーボードとマウスを購入。
    これは安さで選ぶ。とはいえBuffalo。
  • HDMIのケーブルが適当なのが家にないので同時に購入
    後でダイソーで¥400で売っているのを見つけた。。。。
  • 無線アダプタをつけると消費電力が約900mAになるようなので余裕を持って2Aのアダプタを購入
  • ケースやキーボード、充電器など、何となくこだわって白で統一
  • シリアルケーブルだけは、中国から発送なので、1か月後に届くみたいです。
    安いから文句は言いません。
    Etherがあっても、ついついシリアルが欲しくなるのですよ。

さて、色々注文しましたが、まだボードとHDMIケーブルしか届いてません。注文して2日で届くと思わなかった。後はAmazon待ちです。楽しみです。