2017/08/31(木) [n年前の日記]
#2 [raspberrypi][python][pi3d] pi3dをインストール
Raspberry Pi の OpenGL ES を Python から使える、pi3d というモジュールが存在するらしい。
_tipam/pi3d: Simple, yet powerful, 3D Python graphics library for beginners and school children running on the Raspberry Pi.
_Pi3D Tutorial #1: Installation and Getting Started - YouTube
_pi3d/pi3d_demos: Demos and support files for pi3d (3D graphics python package for the raspberry pi)
_Welcome to pi3d’s documentation! - pi3d 2.20 documentation
興味が湧いたので、試しに Raspberry Pi3 + raspbian stretch にインストール。
_tipam/pi3d: Simple, yet powerful, 3D Python graphics library for beginners and school children running on the Raspberry Pi.
_Pi3D Tutorial #1: Installation and Getting Started - YouTube
_pi3d/pi3d_demos: Demos and support files for pi3d (3D graphics python package for the raspberry pi)
_Welcome to pi3d’s documentation! - pi3d 2.20 documentation
興味が湧いたので、試しに Raspberry Pi3 + raspbian stretch にインストール。
◎ インストール手順。 :
以下でインストールできるらしい。
pi3d_demos に、デモスクリプトがまとめてある。git を使って github から入手。
地球が表示されるはずのスクリプトを動かしてみる。
警告が出て、何も表示されなかった…。Ctrl+C でスクリプトを強制終了。
sudo pip install pi3d sudo pip3 install pi3dPython 2.7 にインストールするなら pip を、Python 3.x にインストールするなら pip3 を使う。
pi3d_demos に、デモスクリプトがまとめてある。git を使って github から入手。
git clone https://github.com/pi3d/pi3d_demos.git
地球が表示されるはずのスクリプトを動かしてみる。
$ cd pi3d_demos $ python Earth.py libEGL warning: DRI2: failed to authenticate
警告が出て、何も表示されなかった…。Ctrl+C でスクリプトを強制終了。
◎ 「libEGL warning: DRI2: failed to authenticate」への対処。 :
(※ 2017/09/01追記。sudo rpi-update をすれば、問題は修正される模様。)
ググったら、以下のページが見つかった。
_libEGL warning: DRI2: failed to authenticate - Issue #177 - tipam/pi3d
_Frequently Asked Questions - pi3d 2.20 documentation
_Raspberry Pi 2/3 Model B(Raspbian Jessie with PIXEL)でRStudioを使う
pi3d のバグ報告や、FAQページによると、pi3d を動かす際には、
なんでも、sudo apt install xxxx をしていく際に、それらのファイルが不適切なファイルで上書きされてしまう…時があって、そうなると正常動作しなくなるのだとか。
ストレージ(microSD)内には、色んな種類の libEGL.so、libGLESv2.so が存在してるようで。 _find という、ファイル検索をするコマンドを使ってリストアップしてみる。
自分が使ってる raspbian stretch 上では以下の結果になった。
また、/usr/lib/arm-linux-gnueabihf/ 内の各ファイルについても状況を確認してみる。
pi3dのFAQページには、「sudo _ln -fs リンク元 リンク先 を使って適切な .so を探して割り当ててみてくれ」と書いてあった。
chromium-browser のソレを割り当てて試してみる。
_ldconfig【コマンド】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
python Earth.py を実行してみた。ダメだった。コレではないらしい。
minecraft-pi のソレを割り当てて試してみる。が、2種類あるな…。
/opt/minecraft-pi/lib/mesa/ 内のソレは、/usr/lib/arm-linux-gnueabihf/ 内のソレにリンクが張ってあった。これを指定しても意味はない。
/opt/minecraft-pi/lib/brcm/ 内のソレは…なんだかそれっぽいものにリンクされてる。こっちを試してみるべきかな…。
python Earth.py を実行。
…出た。なんか地球とか月っぽいものが出てクルクル回ってる。どうやらコレが合ってるらしい。ESCキーか、Ctrl+C を押して終了。
が、しかし、OpenGL ES が正常動作してるか確認できる、es2gears を実行してみたら、
元に戻すときは…こうかな…?
ググったら、以下のページが見つかった。
_libEGL warning: DRI2: failed to authenticate - Issue #177 - tipam/pi3d
_Frequently Asked Questions - pi3d 2.20 documentation
_Raspberry Pi 2/3 Model B(Raspbian Jessie with PIXEL)でRStudioを使う
pi3d のバグ報告や、FAQページによると、pi3d を動かす際には、
/usr/lib/arm-linux-gnueabihf/に入ってる、以下の4つのファイルが絡んでくるらしい。
libEGL.so libEGL.so.1 libGLESv2.so libGLESv2.so.2
なんでも、sudo apt install xxxx をしていく際に、それらのファイルが不適切なファイルで上書きされてしまう…時があって、そうなると正常動作しなくなるのだとか。
ストレージ(microSD)内には、色んな種類の libEGL.so、libGLESv2.so が存在してるようで。 _find という、ファイル検索をするコマンドを使ってリストアップしてみる。
sudo find / -name libEGL* sudo find / -name libGLESv2*
自分が使ってる raspbian stretch 上では以下の結果になった。
$ sudo find / -name libEGL* find: ‘/run/user/1001/gvfs’: 許可がありません /usr/lib/arm-linux-gnueabihf/libEGL.so.1 /usr/lib/arm-linux-gnueabihf/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/chromium-browser/libEGL.so /opt/vc/lib/libEGL_static.a /opt/minecraft-pi/lib/mesa/libEGL.so /opt/minecraft-pi/lib/brcm/libEGL.so
$ sudo find / -name libGLESv2* find: ‘/run/user/1001/gvfs’: 許可がありません /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so /usr/lib/chromium-browser/libGLESv2.so /opt/vc/lib/libGLESv2_static.a /opt/minecraft-pi/lib/mesa/libGLESv2.so /opt/minecraft-pi/lib/brcm/libGLESv2.sochromium-browser や minecraft-pi も、それらのファイルを持ってると分かった。
また、/usr/lib/arm-linux-gnueabihf/ 内の各ファイルについても状況を確認してみる。
$ ls -al /usr/lib/arm-linux-gnueabihf/libEGL* lrwxrwxrwx 1 root root 15 8月 4 21:41 /usr/lib/arm-linux-gnueabihf/libEGL.so -> libEGL.so.1.0.0 lrwxrwxrwx 1 root root 15 8月 4 21:41 /usr/lib/arm-linux-gnueabihf/libEGL.so.1 -> libEGL.so.1.0.0 -rw-r--r-- 1 root root 175516 8月 4 21:41 /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0
$ ls -al /usr/lib/arm-linux-gnueabihf/libGLESv2* lrwxrwxrwx 1 root root 18 8月 4 21:41 /usr/lib/arm-linux-gnueabihf/libGLESv2.so -> libGLESv2.so.2.0.0 lrwxrwxrwx 1 root root 18 8月 4 21:41 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 -> libGLESv2.so.2.0.0 -rw-r--r-- 1 root root 38184 8月 4 21:41 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
- libEGL.so と libEGL.so.1 は、libEGL.so.1.0.0 からリンクが張られていた。
- libGLESv2.so と libGLESv2.so.2 は、libGLESv2.so.2.0.0 からリンクが張られていた。
pi3dのFAQページには、「sudo _ln -fs リンク元 リンク先 を使って適切な .so を探して割り当ててみてくれ」と書いてあった。
chromium-browser のソレを割り当てて試してみる。
sudo ln -fs /usr/lib/chromium-browser/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so sudo ln -fs /usr/lib/chromium-browser/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1 sudo ln -fs /usr/lib/chromium-browser/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so sudo ln -fs /usr/lib/chromium-browser/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 sudo ldconfigldconfig は… _共有ライブラリの依存関係情報を更新する らしい。
_ldconfig【コマンド】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
python Earth.py を実行してみた。ダメだった。コレではないらしい。
minecraft-pi のソレを割り当てて試してみる。が、2種類あるな…。
/opt/minecraft-pi/lib/mesa/ 内のソレは、/usr/lib/arm-linux-gnueabihf/ 内のソレにリンクが張ってあった。これを指定しても意味はない。
$ ls -al /opt/minecraft-pi/lib/mesa/ 合計 20 drwxr-xr-x 2 root root 4096 8月 16 10:02 . drwxr-xr-x 4 root root 4096 8月 16 10:02 .. lrwxrwxrwx 1 root root 40 7月 5 19:52 libEGL.so -> /usr/lib/arm-linux-gnueabihf/libEGL.so.1 lrwxrwxrwx 1 root root 43 7月 5 19:52 libGLESv2.so -> /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 -rw-r--r-- 1 root root 9588 7月 5 19:52 libbcm_host.so.1.0
/opt/minecraft-pi/lib/brcm/ 内のソレは…なんだかそれっぽいものにリンクされてる。こっちを試してみるべきかな…。
$ ls -al /opt/minecraft-pi/lib/brcm/ 合計 8 drwxr-xr-x 2 root root 4096 8月 16 10:02 . drwxr-xr-x 4 root root 4096 8月 16 10:02 .. lrwxrwxrwx 1 root root 29 7月 5 19:52 libEGL.so -> ../../../vc/lib/libbrcmEGL.so lrwxrwxrwx 1 root root 32 7月 5 19:52 libGLESv2.so -> ../../../vc/lib/libbrcmGLESv2.so
sudo ln -fs /opt/minecraft-pi/lib/brcm/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so sudo ln -fs /opt/minecraft-pi/lib/brcm/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1 sudo ln -fs /opt/minecraft-pi/lib/brcm/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so sudo ln -fs /opt/minecraft-pi/lib/brcm/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 sudo ldconfig
python Earth.py を実行。
…出た。なんか地球とか月っぽいものが出てクルクル回ってる。どうやらコレが合ってるらしい。ESCキーか、Ctrl+C を押して終了。
が、しかし、OpenGL ES が正常動作してるか確認できる、es2gears を実行してみたら、
EGLUT: failed to initialize EGL displayとエラーが表示されて何も出てこなくなった…。本当にこれでいいのだろうか…。
元に戻すときは…こうかな…?
sudo ln -fs /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libEGL.so sudo ln -fs /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libEGL.so.1 sudo ln -fs /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so sudo ln -fs /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 sudo ldconfig
◎ 動くものと動かないものがあるっぽい。 :
さておき、調子に乗って pi3d_demos 内のスクリプトをアレコレ動かそうとしてみたけれど。
_Introduction to pi3d - pi3d 2.20 documentation
動くものと、動かないものがあるな…。以下は動いたけど…。
MarsStation.py , TigerTank.py は、/dev/input/mice が Permission denied と言われて途中で落ちてしまった。後から追加したユーザアカウントで動かしてるので、マウス入力を取得するためのアクセス権限が無いらしい。
普段使ってるユーザも、ユーザ pi が所属してるグループ群と同じになるように設定してみた。これで、前述の2つのスクリプトも動くようになった。
_Introduction to pi3d - pi3d 2.20 documentation
動くものと、動かないものがあるな…。以下は動いたけど…。
Earth.py Raspberry_Rain.py Clouds3D.py Shapes.py SpriteBalls.py
MarsStation.py , TigerTank.py は、/dev/input/mice が Permission denied と言われて途中で落ちてしまった。後から追加したユーザアカウントで動かしてるので、マウス入力を取得するためのアクセス権限が無いらしい。
普段使ってるユーザも、ユーザ pi が所属してるグループ群と同じになるように設定してみた。これで、前述の2つのスクリプトも動くようになった。
◎ グループに追加。 :
ユーザをグループに追加する方法も一応メモ。
ユーザpiがどのグループに所属しているか確認。
ユーザ hoge が、どのグループに所属しているか確認。
usermod を使って、ユーザ hoge を各グループに登録。
登録できたか確認。
一旦ログアウトして再度ログイン。
以下、参考ページ。
_raspberrypi3に独自のユーザを設定する | Hornet|静岡拠点のWeb、ホームページ制作
_usermodでグループを追加するのは危険 - Qiita
usermod を使う場合は、それまで登録されてたグループ名を“全て”列挙しなきゃいけない。記述漏れがあると大変なことになる。だから、usermod より gpasswd を使って登録作業をしていったほうが安全、という話もあるのだけど。上記の記事によると、usermod の -G オプション利用時は、-aG にすれば追加登録になるから、そういう指定をすれば gpasswd と同様の処理になるよ、ということらしい。
ユーザpiがどのグループに所属しているか確認。
$ groups pi pi : pi adm dialout cdrom audio video plugdev games users input netdev spi i2c gpio
ユーザ hoge が、どのグループに所属しているか確認。
$ groups hoge hoge : hoge sudo video
usermod を使って、ユーザ hoge を各グループに登録。
sudo usermod -aG sudo,pi,adm,dialout,cdrom,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio hoge
登録できたか確認。
$ groups hoge hoge : hoge adm dialout cdrom sudo audio video plugdev games users input netdev pi spi i2c gpio
一旦ログアウトして再度ログイン。
以下、参考ページ。
_raspberrypi3に独自のユーザを設定する | Hornet|静岡拠点のWeb、ホームページ制作
_usermodでグループを追加するのは危険 - Qiita
usermod を使う場合は、それまで登録されてたグループ名を“全て”列挙しなきゃいけない。記述漏れがあると大変なことになる。だから、usermod より gpasswd を使って登録作業をしていったほうが安全、という話もあるのだけど。上記の記事によると、usermod の -G オプション利用時は、-aG にすれば追加登録になるから、そういう指定をすれば gpasswd と同様の処理になるよ、ということらしい。
[ ツッコむ ]
以上です。