【Raspberry Pi】PulseAudioでオーディオ出力を転送

現状、ラズパイ、小型PCといくつか持ってますが、流石にその都度スピーカーを買うのもアレなので、出力を一箇所に集中するべく、PulseAudioでの音の出力転送をします。

【参考サイト】
bluewidz.blogspot.com

今回はラズパイ3(クライアント側)→ラズパイ2(サーバ側。こちらにスピーカーを装着)

1.ラズパイ2(サーバ側)のセッティング

PulseAudioが入っていない場合もあるので、この場合はインストールから始める。

$ sudo apt update
$ sudo apt install pulseaudio

セッティングファイルをコピーしてホームディレクトリ配下に配置。
ホームディレクトリにPulsaAudioディレクトリが元々ある場合は不要だけど、無い場合は作成する。

$ mkdir ~/.config/pulse
$ cp /etc/pulse/default.pa ~/.config/pulse

コピーしたセッティングファイルは以下のように設定変更する。

$ vi ~/.config/pulse/default.pa

#load-module module-native-protocol-tcp

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.11.0/24

コメントアウトを解除して、authから先を記述。転送対象のローカルネットワークを指定

PulseAudioを再起動。ラズパイ2を再起動してもいい。

$ pulseaudio --kill
$ pulseaudio --start

2.ラズパイ3(クライアント側)のセッティング

以下のコマンドで1.で設定したサーバのIPアドレス環境変数に登録すればいい。

$ export PULSE_SERVER=192.168.1.81

しかし、これだけだと再起動したときにもしかしたら消えるかもなので、
ちゃんと設定しておく。

$ cp /etc/pulse/client.conf ~/.config/pulse
$ vi ~/.config/pulse/client.conf

;default-server =

default-server = 192.168.11.81
コメントアウトを外して、ラズパイ2のIPアドレスを設定

あとはラズパイ3でaplayなどで再生したファイルの音がラズパイ2で流れるのを確認すればOK。

【Ubuntu18.04】【LIVA Z】systemdの自動起動設定

追記

↓でグダグダ書いたけど、サーバ起動時のiptablesの自動設定はiptables-persistentをインストールするだけで解決しました・・・。
まぁsystemdの勉強ができたということで・・・。

$ sudo apt install iptables-persistent


・設定保存
sudo /etc/init.d/netfilter-persistent save

・設定読み込み
sudo /etc/init.d/netfilter-persistent reload

以下は無視してください。

ーーーーーーーーーーーーーーーーーーーー

記載が前後するけど、systemdにて自動起動する設定。
engetu21.hatenablog.com

今回はiptablesの構築ファイル。
※こちらの詳細は別途記載予定。

サーバ起動時に自動で起動したい場合、Ubuntu18.04ではsystemdを利用するらしい。
昔はinit.dに設定していたけど、時代は変わったということらしい・・・。
engetu21.hatenablog.com

1.Unitファイルの作成

iptablesの設定を記載したシェルファイルはどこに置いてもいいけど、それを起動するためにsystemdに読み込ませる設定ファイルが必要になる。
設定ファイルはUnit設定ファイルと呼ばれ、例えば、以下のように作成して、/etc/systemd/system配下に格納しておけばいいらしい。
詳細は以下のブログで。
qiita.com

$ sudo vi /etc/systemd/system/iptables.service

[Unit]
Description = iptables deamon
After=network.target

[Service]
ExecStart = /home/hogehoge/iptables.sh
Restart = always
Type = oneshot

[Install]
WantedBy = multi-user.target


※適用
$ sudo systemctl daemon-reload

自動起動の設定
$ sudo systemctl enable iptables deamon

iptables.shを置く場所は自由。ExecStartでその場所を指定してあげればいい。
起動時のみ設定したいようなファイルは、Typeの指定をoneshotにしておけばいいらしい。(今回のiptables.shのような、一回設定しとけばいいや、ってものはType = simpleに設定すると妙な挙動になるので注意)
また、Afterにnetwork.targetを指定することでネットワークが立ち上がってから動作するように指定できる。

もっと確実にネットワーク後に起動させたい場合は以下のブログのようにしてあげるといいらしいですよ。
kernhack.hatenablog.com

【Ubuntu18.04】【LIVA Z】systemctlの自動起動をOFF(disable)するとエラー

最近のUbuntuは自動実行をsystemdで管理してるらしい。で、systemdというかsystemctlで作成したshellファイルを自動起動に登録したのはいいけど、再起動したらdisableでエラーを吐いた。
ちなみに作ったのはiptablesの構築ファイル。

$ sudo systemctl disable iptables.service
[ 3234.919067 ] systemd-gpt-auto-generator[16015] : Failed to dissect: Input/output error

理由が全然わからん・・・。
で、ググってみると、以下のブログで詳しく書かれてました。
mitsu-ksgr.hatenablog.com

LIVA ZはeMMCだし、systemdのバージョンは237だし、これですかね。

$ systemd-cat --version
systemd 237

ブートローダの設定を変えればいいとのことなので、
昨日書いたGRUBの設定↓をさらに変える。
engetu21.hatenablog.com

$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="systemd.unit=multi-user.target quiet nosplash"

GRUB_CMDLINE_LINUX_DEFAULT="systemd.unit=multi-user.target quiet nosplash systemd.gpt_auto=0"

変更を適用する。

$ sudo update-grub
$ sudo shutdown -r now

【Ubuntu18.04】【LIVA Z】ネットワーク設定で固定IP化(CUI)

書いてなかったけど、LIVA Z(N3350)買いました!
今のところはルータにする予定。あとDocker入れていろいろ試したい。
www.links.co.jp


で、Ubuntu18.04ではネットワーク設定方法が変わったらしく、/etc/network/interfacesは使われないらしい。
どうやらUbuntu17?以降はnetplanというので管理しているらしく、Desktop版の場合はnetplan01-network-manager-all.yamlというyamlファイルで設定されているとのこと。
と言っても実際の記載としてはNetworkManagerを定義しており、そちらで管理されているっぽい。
このyamlファイルは拡張子を変えて、コピーしておいてyamlファイルを作っておく。
※拡張子が変わっていれば読み込まれないらしい
※Server版は50-cloud-init.yamlというファイル名で管理されているらしい

$ sudo mv /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.old
$ sudo cp -a  /etc/netplan/01-network-manager-all.old /etc/netplan/01-network.yaml
$ sudo vi /etc/netplan/01-network.yaml

# Let NetworkManager manage all devices on this system
network:
     version: 2
     ethernets:
       enp3s0:
         dhcp4: no
         addresses: [192.168.11.40/24]
         gateway4: 192.168.11.38
         nameservers:
           addresses: [8.8.8.8,8.8.4.4]
           search: []
         optional: true


$ sudo netplan --debug generate
DEBUG:command generate: running ['/lib/netplan/generate']
** (generate:3132): DEBUG: 20:09:58.577: Processing input file //etc/netplan/01-network-manager-all.yaml..
** (generate:3132): DEBUG: 20:09:58.578: starting new processing pass
** (generate:3132): DEBUG: 20:09:58.578: enp3s0: setting default backend to 1
** (generate:3132): DEBUG: 20:09:58.578: Generating output files..
** (generate:3132): DEBUG: 20:09:58.578: NetworkManager: definition enp3s0 is not for us (backend 1)

$ sudo netplan apply
※問題がなければ何も表示されずに即時適用される

なお、NetworkManagerは以下のコマンドで自動起動を無効にできる。


$ sudo systemctl disable network-manager
$ echo "manual" | sudo tee /etc/init/network-manager.override

また、IPv6は今の所使う予定がないので、無効化しておく。

$ cat /proc/net/if_inet6
XXXXXXXXXXXXXXXXXXXXXX 02 40 20 80 enp1s0
00000000000000000000000000000001 01 80 10 80 lo
XXXXXXXXXXXXXXXXXXXXXX 02 40 00 00 enp1s0

$ sudo vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

※設定の適用
$ sudo sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

$ cat /proc/net/if_inet6
※設定が反映されていれば何も表示されない

【Ubuntu18.04】【LIVA Z】CUIでの起動方法

Ubuntu18.04では昔ながらのGRUBへの設定に「text」が効かないので、以下の設定で変更する。

$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet nosplash"

GRUB_CMDLINE_LINUX_DEFAULT="systemd.unit=multi-user.target quiet nosplash"

変更を適用する。

$ sudo update-grub
$ sudo shutdown -r now

【Raspberry Pi】Vimでマウス範囲指定時のうざいビジュアルモードを抑止する

Raspberry PiでRaspbianを入れると普通にviが使えますが、vimのほうが使いやすいので私はvimを入れます(大体そうだと思うけど)。
engetu21.hatenablog.com

が、vimを入れた後、別マシンのSSH画面からvimで編集してる際、マウスで選択範囲をすると「ビジュアルモード」になります。これがとてもうざい。
ビジュアルモードだと指定した範囲をCtrl+Shift+Cなどで文章コピーできない状態になります。

解決策としては、vimの設定ファイル(.vimrc)をユーザディレクトリ直下において、「set mouse=」としておけばいいです。

sudo vi時に関しては/root直下に.vimrcを置く

$ sudo vi /root/.vimrc

または

$ sudo su -
# vi /root/.vimrc

set mouse=
※↑を一行目に書くだけ

/etc/vim/vimrcに設定入れてもできるようだけど、反映されないこともあるらしい?まぁその場合はユーザごとに設定すればいいかと。

【Raspberry Pi】今更だけど初期インストール方法をちゃんと書く@ラズパイ3

わけあってクリーンインストールする必要があったため、設定方法を記載しておきます。
ラズパイ自体は、ラズパイ1〜3まで4年ぐらい使ってるけど、初期インストールは他者様のページを見ながらやってました。
昔と設定方法も少し変わってるので、流石に自分なりの方法を残しておきたい。
なお、GUI機能とか余計なソフトはいらないので、インストールOSはRaspbian Liteです。

1.NOOBSをSDカードに入れる

NOOBSはインストール時にGUIで自動インストールしてくれるソフト
www.raspberrypi.org
でダウンロードします。

SDに入れるのは「NOOBS LITE」。
これは最小インストーラ構成のみが入っているもので、普通の「NOOBS」はRaspbianも含めたインストーラですが、今回入れるRaspbian Liteは、「NOOBS LITE」でも「NOOBS」でもネットワーク越しでインストールファイルを落としてくるためどちらでもいい。ので、サイズの小さい「NOOBS LITE」を落とします。
※2018/9/29時点での「NOOBS LITE」はv2.8

落としたZIPファイルは解凍しておきます。

2.SDカードのバックアップ

念の為に以前のラズパイ環境を残します。
SDカードはリーダに突っ込んでLinux上で実施。SDカードは/dev/sdhで認識されていたので、それを対象にLinux上でSDカード丸ごとで。
32GBカードなので、gzでサイズ圧縮も実施。

sudo dd if=/dev/sdh bs=16M conv=noerror,sync | gzip -c > /mnt/3TB//raspi3-backup.img.gz

3.SDカードのフォーマット

Linuxでもできますが、Windowsで信頼と安心のSDメモリカードフォーマッターを使います。
www.sdcard.org

クイックフォーマットを選べばあっという間に終わる。

4.SDカードにNOOBS LITEを設置。

解凍しておいたNOOBS LITEのファイルをフォーマットしたSDカードに丸ごと入れます。これは普通にファイルをコピペするだけ。

5.SDカードをラズパイ3に入れて起動

NOOBS LITEはGUIで動くため、Raspbian Liteにチェックと入れて、インストールボタンを押下。
※写真撮り忘れ

後は自動でインストールが始まるので、終わるまで待つ。
f:id:engetu21:20180929192531j:plain

OKを押すと再起動し、CUI画面で起動します。

6.ログインとパスワード変更とか

とりあえずログイン。
初期ユーザと初期パスワードは以下の通り。

login:pi
Password:raspberry

ログインが完了したら以下のコマンドでコンフィグモードに。

$ sudo raspi-config

・ホスト名の変更
「2 Network Options」→「N1 Hostname」を選択
f:id:engetu21:20180929194529j:plain
名前はとりあえず『raspi3』とします。
f:id:engetu21:20180929194601j:plain

・ロケーション設定を変更
「4 Localisation Options」→「I1 Change Locale」でロケーションを変更。
「ja_JP.UTF-8 UTF-8」を見つけて、スペースを押下。OKを押す。
f:id:engetu21:20180929200041j:plain

・Timezone設定を変更
「4 Localisation Options」→「I2 Cange Timezone」でTimezoneを変更。
「Asia」→「Tokyo」を選択(tキーを入力すると頭文字がtの項目に飛ぶ)。OKを押す。
f:id:engetu21:20180929200355j:plain

・キーボード設定の変更
※基本的にSSH接続するからやらなくてもOK。
「4 Localisation Options」→「I3 Change Keyboard Layout」を選択。
「Generic 105-key (intl) PC」→「Other」→「Japanese」→「The default for the Keyboard layout」→「No Compose key」と設定していく。
f:id:engetu21:20180930070124j:plain
f:id:engetu21:20180930070204j:plain
f:id:engetu21:20180930070226j:plain
f:id:engetu21:20180930070304j:plain
f:id:engetu21:20180930070332j:plain

SSHサーバの有効化
「5 Interfacing Options」を選択し、「P2 SSH」を選択
f:id:engetu21:20180930064715j:plain
f:id:engetu21:20180930064742j:plain

・パスワードの変更
「1 Change User Password」 →新規パスワードを設定
f:id:engetu21:20180929194203j:plain

※キーボード設定を変更していない場合等、キーボードの記号と
 入力した記号に差異がある可能性もあるため、変更前に入力確認する等の注意が必要です。

設定が終わってfinishを押下すると、再起動を促されますので、再起動しましょう。

7.ネットワークの設定(固定ローカルIP設定)

ifconfigでネットワーク設定を確認します。
eth0が有線、wlan0が無線。
DHCPでIPはすでに割り当てられているけど、SSH接続は基本的にIP固定でアクセスしたいので、無線は無効化しつつ、有線に固定IPを割り当てます。

以下のファイルを変更する。

$ sudo vi /etc/dhcpcd.conf

※以下設定値はコメントアウトを外して設定。
interface eth0
static ip_address=192.168.11.83/24
#static ip6_address=XXXXXXXXX #使わないのでコメントアウトのまま
static routers=192.169.11.38 #デフォルトゲートウェイ
static domain_name_servers=xxx.xxx.xxx.xxx #googleDNSを使うなら8.8.8.8

無線の無効化は2つ方法があるらしいです。
qiita.com

ブラックリストに入れるのはアレなので、ブート時に動かない1つ目を採用。
ついでにBluetoothも使わないので無効化。

$ sudo vi /boot/config.txt

#wifi bluetooth off
dtoverlay=pi3-disable-wifi
dtoverlay=pi3-disable-bt

※2020/8/24追記
ラズパイ4でも同様の設定で無効化できました。

ここで一旦再起動する。

$ sudo shutdown -r now

ネットワーク設定が変更されていることを確認(この時点で別PCからSSHが可能)

$ ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.11.83 netmask 255.255.255.0 broadcast 192.168.11.255
※以下略

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
※以下略

8.パッケージとOSの更新

次のコマンドを実行します。

$ sudo apt update # パッケージリストの更新
$ sudo apt upgrade # パッケージの更新
$ sudo apt dist-upgrade # OSのアップグレード

9.ファームウェアの更新

次のコマンドを実行します。

$ sudo apt install rpi-update # インストール
$ sudo rpi-update # 更新実行
$ sudo shutdown -r now # 反映のための再起動


以上!