mieki256's diary



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 にインストール。

インストール手順。 :

以下でインストールできるらしい。
sudo pip install pi3d
sudo pip3 install pi3d
Python 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 を動かす際には、
/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.so
chromium-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 ldconfig
ldconfig は… _共有ライブラリの依存関係情報を更新する らしい。

_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

動くものと、動かないものがあるな…。以下は動いたけど…。
Earth.py
Raspberry_Rain.py
Clouds3D.py
Shapes.py
SpriteBalls.py

MarsStation.py , TigerTank.py は、/dev/input/mice が Permission denied と言われて途中で落ちてしまった。後から追加したユーザアカウントで動かしてるので、マウス入力を取得するためのアクセス権限が無いらしい。

普段使ってるユーザも、ユーザ pi が所属してるグループ群と同じになるように設定してみた。これで、前述の2つのスクリプトも動くようになった。

グループに追加。 :

ユーザをグループに追加する方法も一応メモ。

ユーザ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 と同様の処理になるよ、ということらしい。

以上です。

過去ログ表示

Prev - 2017/08 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project