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


0 件のコメント:

コメントを投稿