2017/11/15(水) [n年前の日記]
#1 [raspberrypi][love2d] piloveを試用
Raspberry Pi上で love2d を動かすことに特化した、pilove というSDカードイメージがあるようで。
_PiLove - LOVE on RaspberryPI
もし、コレを使って音が鳴れば、少なくとも Raspberry Pi Zero W + love2d で音が鳴る状態にすることは不可能ではない、てなことぐらいは分かるかもしれないなと思えてきたので試用してみようかなと。
_PiLove - LOVE on RaspberryPI
もし、コレを使って音が鳴れば、少なくとも Raspberry Pi Zero W + love2d で音が鳴る状態にすることは不可能ではない、てなことぐらいは分かるかもしれないなと思えてきたので試用してみようかなと。
◎ インストール方法。 :
公式サイト上には、pilove 0.3 のリンクしかないけれど、
_Index of /downloads
には 0.4 が置いてあったので、pilove 0.4 (pilove-0.4.img.gz)をDL。変更履歴は、
_pilove/changelog.txt
に書いてある。
解凍すると、中には .img ファイルが入ってた。
Windows10 x64 + _Win32 Disk Imager 1.0.0 を使って、.imgファイルを microSDに書き込む。今回は、Team製 8GB の microSDHC に書き込んでみた。
Raspberry Pi Zero W に microSDHC を差して起動。デフォルトユーザ名は sysop。パスワードは posys。
解凍すると、中には .img ファイルが入ってた。
Windows10 x64 + _Win32 Disk Imager 1.0.0 を使って、.imgファイルを microSDに書き込む。今回は、Team製 8GB の microSDHC に書き込んでみた。
Raspberry Pi Zero W に microSDHC を差して起動。デフォルトユーザ名は sysop。パスワードは posys。
◎ love2dの動作確認。 :
/usr/local/games/love-0.10.2/src/love を実行。
パーミッションが違うと怒られた。覗いてみたら、所有者について sysop と root が混在してる。とりあえず変更してみる。
一々場所を指定して起動するのは面倒臭いので alias に登録。~/.bashrc に追記しておく。
あるいは、該当の場所まで PATH を通すとか。
一応、何も指定しないで love を実行したら、例の画面は表示された。
パーミッションが違うと怒られた。覗いてみたら、所有者について sysop と root が混在してる。とりあえず変更してみる。
cd /usr/local/games/love-0.10.2/src sudo chown sysop:sysop * sudo chown sysop:sysop ./.*
一々場所を指定して起動するのは面倒臭いので alias に登録。~/.bashrc に追記しておく。
nano ~/.bashrc
alias love='/usr/local/games/love-0.10.2/src/love'
あるいは、該当の場所まで PATH を通すとか。
export PATH=$PATH:/usr/local/games/love-0.10.2/src
一応、何も指定しないで love を実行したら、例の画面は表示された。
◎ 問題点。 :
現状では、Raspberry Pi Zero W の WiFi(無線LAN)が使えない。pilove は、raspbian jessie を元にして構築してあるらしいけど…。無線LAN関係は入ってないのか…。
LAN端子を備えた Raspberry Pi1 / Pi2 / Pi3 ならどうにかなるのかもしれないが、無線LANしかついてない Raspberry Pi Zero W では外部からアクセスしようがない。となると、love2d用のソースも、画像ファイルも、サウンドファイルも転送できない。これでは動作確認すら満足にできない…。結局音は鳴るのか、鳴らないのか。これでは分からん…。
LAN端子を備えた Raspberry Pi1 / Pi2 / Pi3 ならどうにかなるのかもしれないが、無線LANしかついてない Raspberry Pi Zero W では外部からアクセスしようがない。となると、love2d用のソースも、画像ファイルも、サウンドファイルも転送できない。これでは動作確認すら満足にできない…。結局音は鳴るのか、鳴らないのか。これでは分からん…。
[ ツッコむ ]
#2 [raspberrypi] Raspberry Pi Zero Wにraspbian jessieをインストール
piloveをビルドできないか試したくなってきたので、raspbian jessie を Raspberry Pi Zero W上にインストール。ちなみに、raspbian の現行版は stretch。一つ前の版が jessie。
以下を追加。
sudo sysctl -p を実行して反映。
_[Raspbian] IPv6を無効にする方法(Raspbian Jessie Lite) - Life with IT
vimの設定変更。せめてソースコードの色付けぐらいはする。
wav, mp3, ogg の再生は以下。
でも、sox に入ってる play を使えば大体のフォーマットは再生できる模様。mp3は再生できなかったが、libsox-fmt-mp3 をインストールしたら再生できるようになった。
_Debian User Forums - View topic - Can't play mp3 files with play (sox)
_SoX(Sound eXchange)でMP3を扱う
◎ raspbian jessieを入手。 :
raspbian jessie を入手しようとしたものの、公式サイト上では見つからず。
_Raspberry Pi Downloads - Software for the Raspberry Pi
しかし、JAISTのサーバに raspbian jessie が残ってた。
_Index of /pub/raspberrypi/raspbian_lite/images/raspbian_lite-2017-07-05
_Index of /pub/raspberrypi/raspbian/images/raspbian-2017-07-05
2017-07-05-raspbian-jessie.zip をDLして解凍。中に入ってた .img を Win32 Disk Imager を使って microSDHC (Team製 8GB)に書き込み。Raspberry Pi Zero W に差し込んで起動。すんなり起動してくれた。
_Raspberry Pi Downloads - Software for the Raspberry Pi
しかし、JAISTのサーバに raspbian jessie が残ってた。
_Index of /pub/raspberrypi/raspbian_lite/images/raspbian_lite-2017-07-05
_Index of /pub/raspberrypi/raspbian/images/raspbian-2017-07-05
2017-07-05-raspbian-jessie.zip をDLして解凍。中に入ってた .img を Win32 Disk Imager を使って microSDHC (Team製 8GB)に書き込み。Raspberry Pi Zero W に差し込んで起動。すんなり起動してくれた。
◎ 色々設定。 :
画面解像度、ホスト名、ロケール等を設定。piユーザのパスワードも変更。
rootのパスワード変更 + ユーザを追加。以下を参考に作業。
_RaspberryPiをRaspbianで使う場合の初期設定メモ(ユーザ追加) - Qiita
usermod を使って、新規ユーザを各グループに登録
sudo raspi-config
rootのパスワード変更 + ユーザを追加。以下を参考に作業。
_RaspberryPiをRaspbianで使う場合の初期設定メモ(ユーザ追加) - Qiita
sudo passwd root sudo adduser 新規ユーザ名 sudo gpasswd -a 新規ユーザ名 sudo sudo gpasswd -d pi sudo
sudo nano /etc/sudoers.d/010_pi-nopasswd or sudo nano /etc/sudoerspi ALL=(ALL) NOPASSWD: ALL をコメントアウトして、piユーザが root になれないようにする。
usermod を使って、新規ユーザを各グループに登録
$ groups pi pi : pi adm dialout cdrom audio video plugdev games users input netdev spi i2c gpio $ sudo usermod -aG sudo,pi,adm,dialout,cdrom,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio 新規ユーザ名 $ groups 新規ユーザ名 新規ユーザ名 : 新規ユーザ名グループ adm dialout cdrom sudo audio video plugdev games users input netdev pi spi i2c gpio
◎ リポジトリのURLを変更。 :
デフォルト設定だとアクセスが遅かったので、日本のミラーサーバのURLに変更。今回は JAIST を利用させてもらうことに。
以下を追加して、元々のURLはコメントアウト。
apt-get でパッケージ等を更新。
sudo nano /etc/apt/sources.list
以下を追加して、元々のURLはコメントアウト。
deb http://ftp.jaist.ac.jp/raspbian/ jessie main contrib non-free rpi
apt-get でパッケージ等を更新。
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo rpi-update
◎ フォントのインストール。 :
sudo aptitude install fonts-ipafont fonts-ipaexfont fonts-takao fonts-mplus fonts-migmix fonts-mmcedar fonts-umeplus fonts-motoya-l-maruberi fonts-motoya-l-cedar fonts-horai-umefont sudo aptitude install xfonts-mplus ttf-kochi-gothic-naga10 ttf-kochi-mincho-naga10 xfonts-naga10 xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xfonts-shinonomexfonts-* は、今時は要らないかも。
◎ 日本語フォルダ名を英語フォルダ名に変更。 :
/home/pi/ 以下に日本語のフォルダ名がずらずら並んでるけど、CUIで作業する際に指定が面倒臭い。英語名にする。
しかし、上手く行かない。以下ならなんとかなった。ただし、古い日本語フォルダ名が残ってしまって、それらは自分で削除しないといけなかった。
_Ubuntu のデスクトップ環境のフォルダ名を日本語から英語にする - Qiita
sudo apt-get install xdg-user-dirs-gtk LANG=en_GB.utf8 xdg-user-dirs-gtk-updateLANG=C ではなくて LANG=en_GB.utf8 であることに注意。
しかし、上手く行かない。以下ならなんとかなった。ただし、古い日本語フォルダ名が残ってしまって、それらは自分で削除しないといけなかった。
LANG=en_GB.utf8 xdg-user-dirs-update --force
_Ubuntu のデスクトップ環境のフォルダ名を日本語から英語にする - Qiita
◎ 自動ログイン設定の変更。 :
piユーザではなく、新規ユーザで自動ログインするようにしたい。
_Debian Jessie Wheezy 自動ログイン lightdm系 ? Linux. リナックス. ヒト ノ タメ ノ.
sudo vi /etc/lightdm/lightdm.conf
[SeatDefaults] autologin-user=ユーザ名 autologin-user-timeout=0
_Debian Jessie Wheezy 自動ログイン lightdm系 ? Linux. リナックス. ヒト ノ タメ ノ.
◎ IPv6無効化。 :
sudo nano /etc/sysctl.conf
以下を追加。
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
sudo sysctl -p を実行して反映。
_[Raspbian] IPv6を無効にする方法(Raspbian Jessie Lite) - Life with IT
◎ sshの接続が切れないように設定。 :
/etc/ssh/sshd_config の ClientAliveInterval を設定。
sudo nano /etc/ssh/sshd_config
ClientAliveInterval 15
◎ vim をインストール。 :
sudo aptitude install vim sudo aptitude install vim-nox
vimの設定変更。せめてソースコードの色付けぐらいはする。
vi ~/.vimrc
syntax on
◎ サウンド再生や変換用ツールをインストール。 :
sudo aptitude install mpg321 mpg123 vorbis-tools flac sox libsox-fmt-mp3 libsox-fmt-all
wav, mp3, ogg の再生は以下。
aplay hoge.wav mpg123 hoge.mp3 ogg123 hoge.ogg
でも、sox に入ってる play を使えば大体のフォーマットは再生できる模様。mp3は再生できなかったが、libsox-fmt-mp3 をインストールしたら再生できるようになった。
play hoge.flac play hoge.wav play hoge.ogg play hoge.mp3
_Debian User Forums - View topic - Can't play mp3 files with play (sox)
_SoX(Sound eXchange)でMP3を扱う
◎ microSDHCの速度測定。 :
sudo aptitude install hdparm
sudo hdparm -t /dev/mmcblk0
◎ piloveをビルドしようと試みたが失敗。 :
ここまでやっておいてアレだけど、raspbian jessie 上では、pilove をビルドできなかった。
_skarbat/pilove: Love2D on the Raspberry PI
「Intelベースシステム、QEmu, NBDドライバ、xsysrootツールが必要」と書いてある。Raspberry Pi 実機で作るわけではなかったのか…。しかも pipaOS がどうのこうのと書いてある。なんやねん。そのOS。
_skarbat/pilove: Love2D on the Raspberry PI
「Intelベースシステム、QEmu, NBDドライバ、xsysrootツールが必要」と書いてある。Raspberry Pi 実機で作るわけではなかったのか…。しかも pipaOS がどうのこうのと書いてある。なんやねん。そのOS。
◎ retropie-setupを利用してSDL2をインストールしようと試みたが失敗。 :
piloveがダメなら、retropie-setup はどうだろう。
_RetroPie/RetroPie-Setup: Shell script to set up a Raspberry Pi/Odroid/PC with RetroArch emulator and various cores
_RetroPie/RetroPie-Setup: Shell script to set up a Raspberry Pi/Odroid/PC with RetroArch emulator and various cores
mkdir retropie-setup cd retropie-setup git clone https://github.com/RetroPie/RetroPie-Setup.git cd /RetroPie-Setup sudo ./retropie_setup.sh sdl2なんだかよく分からないメニュー画面が出てきた。SDL2だけをビルドしてくれるわけではナサゲ。
[ ツッコむ ]
#3 [raspberrypi][love2d] raspbian jessie上でSDL2とlove2dをビルド
pilove も retropie-setup も raspbian jessie 上で動かせなかったので、仕方なく以前と同様の手順でビルド。SDL2は OpenGL を無効にしてビルドすることで、Raspberry Pi の OpenGL ES を使って描画できるようにする。
◎ SDL2のビルド。 :
_Golang と SDL2 でゲームを作る - KaoriYa
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
configure をする段階で、--host=arm-raspberry-linux-gnueabihf をつけたり外したりしてみた。
どうやら、--host=arm-raspberry-linux-gnueabihf をつけて configure しないと、Video driver に rpi が出てこない模様。このオプションは必須っぽいな…。
ちなみに、「--disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl」の指定で、OpenGL を無効にしているらしい。
raspbian jessie ではなく、raspbian stretch + SDL2-2.0.5 で configure した場合の結果は以下。
raspbian jessie上で configure した時と違って、Audio に、sndio というのがついてる。libsndio-dev をアンインストールしたほうがいいのかな。
libsndio-dev をアンインストールした状態で configure すると以下になった。
makeしてインストール。
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
sudo aptitude install automake build-essential mercurial qt5-default libtool libasound2-dev libaudio-dev libesd0-dev libsndfile1-dev libmodplug-dev libopenal-dev libfontconfig1-dev libpango1.0-dev freeglut3-dev libfreeimage-dev libjpeg-dev libtiff5-dev libwebp-dev libxcursor-dev libxi-dev libxrandr-dev libxss-dev libudev-dev libsmpeg-dev libxinerama-dev
mkdir ~/sdl2 cd ~/sdl2 wget https://www.libsdl.org/release/SDL2-2.0.5.tar.gz tar xzf SDL2-2.0.5.tar.gz cd SD2-2.0.5 mkdir build && cd build
configure をする段階で、--host=arm-raspberry-linux-gnueabihf をつけたり外したりしてみた。
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : dummy opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : NO Using fcitx : NO
../configure --host=arm-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : rpi dummy opengl_es1 opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : NO Using fcitx : NO
どうやら、--host=arm-raspberry-linux-gnueabihf をつけて configure しないと、Video driver に rpi が出てこない模様。このオプションは必須っぽいな…。
ちなみに、「--disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl」の指定で、OpenGL を無効にしているらしい。
raspbian jessie ではなく、raspbian stretch + SDL2-2.0.5 で configure した場合の結果は以下。
../configure --host=arm-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) sndio Video drivers : rpi dummy opengl_es1 opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : YES Using fcitx : NO
raspbian jessie上で configure した時と違って、Audio に、sndio というのがついてる。libsndio-dev をアンインストールしたほうがいいのかな。
sudo aptitude remove libsndio-dev
libsndio-dev をアンインストールした状態で configure すると以下になった。
SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : rpi dummy opengl_es1 opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : YES Using fcitx : NO
makeしてインストール。
make sudo make install
◎ love2dをビルド。 :
各ページを眺めながら、必要になりそうなパッケージを列挙してインストール。
_Building LOVE (日本語) - LOVE
_pilove/build-love2d.sh at master - skarbat/pilove
love2d 0.10.2 の Linux用ソースをDLしてビルドする。
_Building LOVE (日本語) - LOVE
sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev sudo aptitude install autotools-dev automake libtool libdevil-dev libogg-dev libflac-dev libflac++-dev libmng-dev # raspbian jessie sudo aptitude install libturbojpeg1-dev # raspbian stretch sudo aptitude install libturbojpeg0-dev
_pilove/build-love2d.sh at master - skarbat/pilove
sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev sudo aptitude install devscripts git-core debhelper dh-autoreconf libasound2-dev libudev0 libudev-dev libdbus-1-dev libx11-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev libgl1-mesa-dev libpulse-dev libibus-1.0-dev pulseaudio libraspberrypi-dev
love2d 0.10.2 の Linux用ソースをDLしてビルドする。
mkdir ~/love2d cd ~/love2d wget https://bitbucket.org/rude/love/downloads/love-0.10.2-linux-src.tar.gz tar zxf love-0.10.2-linux-src.tar.gz cd love-0.10.2 ./configure make sudo make install
◎ 動作確認の結果。 :
love で実行。例の画面が出た。
サウンドを鳴らすソースを与えて動作確認してみた。以下のような警告が表示されたものの、音が鳴った。…やった! 鳴ったぞ! ようやく音が聞こえたわ…。
つまり、raspbian jessie上で SDL2 や love2d をビルドする分には、ちゃんと音が鳴ることが分かった。Raspberry Pi + love2d は音が鳴らない、というわけではないらしい。
しかし、raspbian stretch でやると音が鳴らないわけで…。SDL2、もしくはlove2dは、raspbian stretch に未対応ということだろうか? love2d を使いたいなら、raspbian jessie を使うしかない?
それとも pulseaudio が絡んでたりするのだろうか。例えば pilove の公式サイト上に書いてあるとおりに、
pulseaudio ってそもそも何なのでしょうか。ググって各説明ページを眺めてみてもピンとこない。Linuxのサウンドシステム関係はよく分からんなあ…。いや、Windowsのサウンド関係もちゃんと分かってるわけでもないけれど。
サウンドを鳴らすソースを与えて動作確認してみた。以下のような警告が表示されたものの、音が鳴った。…やった! 鳴ったぞ! ようやく音が聞こえたわ…。
AL lib: (WW) alc_initconfig: Failed to initialize backend "pulse"
つまり、raspbian jessie上で SDL2 や love2d をビルドする分には、ちゃんと音が鳴ることが分かった。Raspberry Pi + love2d は音が鳴らない、というわけではないらしい。
しかし、raspbian stretch でやると音が鳴らないわけで…。SDL2、もしくはlove2dは、raspbian stretch に未対応ということだろうか? love2d を使いたいなら、raspbian jessie を使うしかない?
それとも pulseaudio が絡んでたりするのだろうか。例えば pilove の公式サイト上に書いてあるとおりに、
pulseaudio --startとやってから love2d を動かすと、音が鳴らなくなるし…。
pulseaudio --killとやってから再度試したら音が鳴ったし…。
pulseaudio ってそもそも何なのでしょうか。ググって各説明ページを眺めてみてもピンとこない。Linuxのサウンドシステム関係はよく分からんなあ…。いや、Windowsのサウンド関係もちゃんと分かってるわけでもないけれど。
◎ raspbianはバージョンによってpulseaudioの扱いが違う。 :
raspbian関係の記事をググってたら気になる話が。raspbian jessie までは、Bluetooth から音を鳴らすために標準で pulseaudio がインストールされていたけど、raspbian stretch では別の何かを使って Bluetooth から音を鳴らせるようになったので pulseaudio は標準でインストールされていないらしい。
_Raspbian StretchではPulseaudioを使わなくなったのでxrdpのサウンドをどうするか思案中
_Raspbian Stretch has arrived for Raspberry Pi - Raspberry Pi
そのあたりが関係してるのかな…。
_Raspbian StretchではPulseaudioを使わなくなったのでxrdpのサウンドをどうするか思案中
_Raspbian Stretch has arrived for Raspberry Pi - Raspberry Pi
そのあたりが関係してるのかな…。
[ ツッコむ ]
#4 [raspberrypi] microSDを抜き差ししやすいaspberry Pi Zero W用のケースが欲しい
今現在、Raspberry Pi Zero W のケースとして、
_公式の白と赤の例のケース
を使ってるけど。microSDを差し替えるのが面倒臭い。
基板をケースに入れたまま microSD を差し替えられるケースって無いのかな…。
ググった感じでは、種類は少ないけど一応ありそうな気配も。でも、見た目は差し替え可能なように見えつつも、実際には差し替えが容易ではない、的な罠がありそうな気配も。そもそも入手性もアレだし。
まあ、最悪、スペーサーだけを基板につけて、基板をむき出しにしておけば目的が果たせそうな気もするけど。それもそれでなんだかアレだなと。
- 一旦ケースの蓋を外して
- ケースから基板を取り出して
- microSDを差し替えて
- またケースに基板をはめ込んで
- 蓋をして…。
基板をケースに入れたまま microSD を差し替えられるケースって無いのかな…。
ググった感じでは、種類は少ないけど一応ありそうな気配も。でも、見た目は差し替え可能なように見えつつも、実際には差し替えが容易ではない、的な罠がありそうな気配も。そもそも入手性もアレだし。
まあ、最悪、スペーサーだけを基板につけて、基板をむき出しにしておけば目的が果たせそうな気もするけど。それもそれでなんだかアレだなと。
[ ツッコむ ]
以上、1 日分です。