AirPlay on Raspberry Pi

把塵封已久的 Raspberry Pi 拿出來玩

為了使 raspberry pi 連 wifi 我買了 EDIMAX EW-7811Un 無線網卡.

首先, 先把 raspberry pi 的作業系統安裝好. 我是下載 RASPBIAN JESSIE LITE 比較不佔空間. 且我也沒有需要圖形介面.

安裝的過程如下 我是使用 mac 安裝的 :
1. 先找出 sd 卡是哪個 device

$ df -h
Filesystem                          Size   Used  Avail Capacity   iused    ifree %iused  Mounted on
/dev/disk1                         476Gi  392Gi   83Gi    83% 102853623 21872743   82%   /
devfs                              328Ki  328Ki    0Bi   100%      1136        0  100%   /dev
map -hosts                           0Bi    0Bi    0Bi   100%         0        0  100%   /net
map auto_home                        0Bi    0Bi    0Bi   100%         0        0  100%   /home
localhost:/qt1kkfrBO5E8sqY4_yZeD7  476Gi  476Gi    0Bi   100%         0        0  100%   /Volumes/MobileBackups
/dev/disk2s1                        30Gi  2.8Mi   30Gi     1%        88   973592    0%   /Volumes/SD CARD

/dev/disk2 這就是 sd 卡

2. 卸載 disk2

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

3. 把下載回來的檔案安裝到 sd 卡

$ sudo dd bs=1m if=~/Downloads/2016-03-18-raspbian-jessie-lite.img  of=/dev/rdisk2
Password:
1298+0 records in
1298+0 records out
1361051648 bytes transferred in 232.762720 secs (5847378 bytes/sec)

4. 把 sd 卡插入 raspberry pi 開機 預設的帳密如下

User: pi
Password: raspberry

5. 登入 raspberry pi 用 raspi-config 做一些設定 例如 “Expand Filesystem”, “Change User Password”

$ sudo raspi-config

在這個工具內可以順便指定 audio 輸出的介面 “Advanced Options” -> “Audio” -> “Force 3.5mm (‘headphone’) jack” 如果有 “Expend Filesystem” 會要求重新開機

6. 登入 raspberry pi 後測試一下聲音

$ speaker-test -t sine

如果沒辦法聽到聲音 編輯 alsa.conf

$ sudo vi /usr/share/alsa/alsa.conf

把 pcm.front cards.pcm.front 改成 pcm.front cards.pcm.default

7. 設定 wifi 輸入你指定的 ssid & password

$ sudo vi /etc/network/interfaces
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
    wpa-ssid "YOUR SSID"
    wpa-psk "YOUR SSID PASSWORD"

重新啟動網路

$ sudo service networking reload

順利的話應該會看到下列的結果

wlan0     Link encap:Ethernet  HWaddr 74:da:38:5a:ba:bf
          inet addr:192.168.1.106  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::76da:38ff:fe6a:cacf/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:318794 errors:0 dropped:20870 overruns:0 frame:0
          TX packets:2351 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:301272721 (287.3 MiB)  TX bytes:577754 (564.2 KiB)

基本上設定到這裡就差不多準備切入正題了

8. 先對系統更新一下

$ sudo apt-get update

2019/10/21 補充說明:後來又更容易了用下面指令就可以安裝好

$ sudo apt-get install shairport-sync
$ sudo systemctl enable shairport-sync
$ sudo service shairport-sync start

詳細步驟請參考:9to5toys 也可以參考 :RPiPlay

9. 然後分別安裝下列套件

$ sudo apt-get install libao-dev libssl-dev git avahi-utils libwww-perl
$ sudo apt-get install libcrypt-openssl-rsa-perl libio-socket-inet6-perl libmodule-build-perl

10. 變成 root 再來準備安裝 shairport 我是懶得一直打 sudo 才變成 root

$ sudo -s

11. 裝之前, 先安裝 perl 的 Session Description Protocol 模組

$ cd /usr/local/src
$ git clone https://github.com/njh/perl-net-sdp.git
$ cd perl-net-sdp
$ perl Build.PL
$ ./Build
$ ./Build test
$ ./Build install

12. 正式安裝 shairport

$ cd /usr/local/src
$ git clone https://github.com/abrasive/shairport.git
$ cd shairport
$ make
$ make install
$ systemctl enable avahi-daemon

13. 設定 shairport 開機自動啟動

$ vi /etc/systemd/system/shairport.service
[Unit]
Description=Shairport AirTunes receiver
After=sound.target
Requires=avahi-daemon.service
After=avahi-daemon.service

[Service]
EnvironmentFile=/etc/conf.d/shairport
ExecStart=/usr/local/bin/shairport $SHAIRPORT_ARGS -w
Restart=always

[Install]
WantedBy=multi-user.target 

14. 由於 /etc/conf.d/shairport 還沒建立所以要自行建立及設定參數

$ mkdir /etc/conf.d/
$ vi /etc/conf.d/shairport
# ShairportSync Daemon options
SHAIRPORT_ARGS="-a YOUR AIRPLAY NAME"

15. 啟動 shairport 服務測試

$ service shairport start

16. 確定沒問題後就設定為開機啟動

$ systemctl enable shairport