ラベル Raspbmc の投稿を表示しています。 すべての投稿を表示
ラベル Raspbmc の投稿を表示しています。 すべての投稿を表示

2015年2月14日土曜日

Raspberry PiでVNCしてみる


最近、うちの息子が勉強中に家のMacでBGMを流しっぱなしにする。個人的には勉強中にBGMをかけたりするのは嫌なのだが、うちの奥さんと息子はBGMをかけとく派なので。まあ、勉強するのに必要と言われると、反対しにくい。しかし、息子のアカウントでBGMかけっぱなしにされると、パソコンが使えん。
ということで、Raspberry PiでYou Tubeかけとけばいいんじゃないかと思い立つ。
Raspbery Piと家のAudioを接続し、音楽流せばいいんだけど、画面が表示できないと操作できない。かといって、わざわざキーボードやらディスプレイをつなげるのも面倒。
そこで、Raspbmcは、最初からVNCserverをサポートしているので、これを使えば、ディスプレイを使わなくてもMacから操作できると思い立つ。ちなみにRaspbmcはhttpでつなげると、リモート・コントロールできるのだが、アドオンとかのYoutubeとかの操作はできないので、VNCserverが必要です。
RaspbmcのメニューからProgram->Raspbmc Settings -> System ConfigurationにFTPやSMBAのON/OFFに並んでVNC ServerがあるのでこれをONにすればOKです。

あとは、Raspbery PiにVNC Viewerで接続すれば、パソコンから操作できます。
注1: VNCのポートは5900になるようです。
注2: Macの標準で持っているVNC Viewer(Finderのサーバー接続でできるやつ)では接続できません。Real VNCなら問題なく動作します。こちらからダウンロード。

とりあえず、目的は果たせたのだが、Raspberry Piのオーディオの音質あんまり良くない。衝動買いで安いDACをポチりそうだ。。。。。。数時間後にポチった。
で、AmazonでMUSE Audio USB-DAC ヘッドフォンアンプ Burr Brown PCM2704を買った。さてどんな音だろうか、届くのが楽しみだ。

2015年2月12日木曜日

無線が最高速でないので、無線のドライバーをソースからビルドしてみようと思いつく。
とはいえ、Rasbery Pi上でコンパイルするのは時間もかかるので、今後を考えてクロスコンパイル環境を作ることにする。
おうちのMac OS Xなら、そのままクロスコンパイルの環境を作ることもできるのだが、色々とめんどくさい。ここは、公式のHPにもあるようにLinuxで環境を作ることにする。ちなみに、Mac OS X上のVirtual Box上でUbuntuを動かし、そこにクロスコンパイル環境を作ることにした。

コンパイル環境は、公式ページに記載されている。Virtual Boxを使ったUbuntu環境の作り方も丁寧に説明されている。
Ubuntuは普段は会社ではServerばかりいじっているのですが、日本語版のデスクトップを落としてきました。Virtual Box用の仮想イメージがあったので、それをそのまま使うことにします。ダウンロードしたzipを解凍して、Virtual Boxでダウンロードしたイメージを指定して起動します。起動後は、普通のUbuntuのセットアップです。インストールした直後に、もろもろアップデートしておきます。Virtual Boxのネットワークの設定をブリッジモードにすればUbuntuからさっくりつながります。

ここからは、ubuntu上の作業。ちなみにUbuntuのバージョンはUbuntu 14.04.1 LTS(64Bit)です。
Webに幾つかUbuntuのクロスコンパイル環境を作る方法があったのですが、Ubuntu 32bit前提のページが混在しており、結局以下の様な方法になりました。 

もろもろ必要なパッケージをインストール


$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get clean
$ sudo apt-get install build-essential libncurses5-dev

クロスコンパイラーはgitにもあるのですが、Ubuntuの64bitでは動作しないようなので、apt-getでとってきます。


$ sudo apt-get install gcc-arm-linux-gnueabi make ncurses-dev

クロスコンパイラーは、/usr/binに配置されるようです。


$ ls /usr/bin/arm*
/usr/bin/arm-linux-gnueabi-addr2line       /usr/bin/arm-linux-gnueabi-gcov-4.7
/usr/bin/arm-linux-gnueabi-ar              /usr/bin/arm-linux-gnueabi-gprof
/usr/bin/arm-linux-gnueabi-as              /usr/bin/arm-linux-gnueabi-ld
/usr/bin/arm-linux-gnueabi-c++filt         /usr/bin/arm-linux-gnueabi-ld.bfd
/usr/bin/arm-linux-gnueabi-cpp             /usr/bin/arm-linux-gnueabi-ld.gold
/usr/bin/arm-linux-gnueabi-cpp-4.7         /usr/bin/arm-linux-gnueabi-nm
/usr/bin/arm-linux-gnueabi-dwp             /usr/bin/arm-linux-gnueabi-objcopy
/usr/bin/arm-linux-gnueabi-elfedit         /usr/bin/arm-linux-gnueabi-objdump
/usr/bin/arm-linux-gnueabi-gcc             /usr/bin/arm-linux-gnueabi-ranlib
/usr/bin/arm-linux-gnueabi-gcc-4.7         /usr/bin/arm-linux-gnueabi-readelf
/usr/bin/arm-linux-gnueabi-gcc-ar-4.7      /usr/bin/arm-linux-gnueabi-size
/usr/bin/arm-linux-gnueabi-gcc-nm-4.7      /usr/bin/arm-linux-gnueabi-strings
/usr/bin/arm-linux-gnueabi-gcc-ranlib-4.7  /usr/bin/arm-linux-gnueabi-strip
/usr/bin/arm-linux-gnueabi-gcov            /usr/bin/arm2hpdl

作業ディレクトリを作成し、そこにカーネルソースを持ってくる。


$ mkdir raspi
$ cd raspi
$ git clone https://github.com/raspberrypi/linux.git

ここで、カーネルのconfigをするのですが、0からやるのは大変です。いくつかの方法がありますが、一番良いのは、すでに使っているRaspberry Piのconfigファイルを持ってくることです。Raspberry Piをネットワークにつなげ、アクセスできるようにします。先ほどつくったraspiディレクトリにカーネルソースのあるlinuxディレクトリがあるはずなので、そこにRaspberry Piから持ってきたconfigをぶっこみます。


$ cd ./linux
$ scp  pi@(Raspberry PiのIPアドレス):/proc/config.gz ./
$ zcat config.gz > .config

クロスコンパイラーを使用するので、CCPREFIXを指定しておきます。


$ export CCPREFIX=/usr/bin/arm-linux-gnueabi-

設定ファイルを読み込んで編集します。色々聞かれるけど、全部デフォになるようReturn。。。と思ったらARM_PATCH_PHYS_VIRTがnになり面倒。。。vi で.configを開いてARM_PATCH_PHYS_VIRT=yにしてから設定ファイルの編集をします。


$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} oldconfig

設定ファイルができたら、makeです。コンパイル速度を上げるためjオプションを付けます。jオプションはコア数×2にすると良いようです。Virtual Boxのコア数が2になってたので、j4を指定します。


$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} -j4

エラー無しでカーネルできればOK。次はモジュール用のディレクトリを作って、モジュールもコンパイル。


$ mkdir mod
$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} modules -j4
$ make ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=./mod modules_install -j4

余計なファイルは削除



$ sudo rm -rf ./mod/lib/modules/3.18.6+/build
$ sudo rm -rf ./mod/lib/modules/3.18.6+/source

出来上がったモジュールとカーネルをRaspberry Piにぶっこむ。


$ scp -rp ./tmp/lib ./arch/arm/boot/zImage pi@(Raspberry PiのIPアドレス):~/
$ ssh pi@(Raspberry PiのIPアドレス)
Raspberry Piで、以下を実行して、再起動。
pi@xxx $ sudo cp -rp ./lib /
pi@xxx $ sudo chown  root:root ./zImage 
pi@xxx $ sudo cp -rp ./zImage /boot/kernel.img
pi@xxx $ sudo reboot


これで無事、最新のカーネルになりました。

で、結果として無線は最高速でつながったのか?。。。。ダメでした。。。。
こうなりゃhostapdもコンパイルしてやる。。。あれ、エラーが出てコンパイルできない。
sysinfo.h の頭に以下をつけてコンパイルエラーを回避

#ifndef __kernel_long_t
typedef long __kernel_long_t;
typedef unsigned long __kernel_ulong_t;
#endif

よし、と思ってhostapdを起動するもエラー。。あ、.configでCONFIG_IEEE80211N=yにしてなかった。。。再コンパイルして無事起動を確認。よし、これで11nでつながる。。。つながらなかった。
どうやら、11nへの壁は厚いようです。


今回参考にさせていただいたHP:
 もぐてっく これでダメなら諦めた方が良い程度にRasberry Piのカーネルクロスコンパイル手順をまとめてみた。

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の問題のようだ。
しかも、無線はうまく接続できず、有線のみで接続している。
うーん、ちょっと調べてみないと。