RaspberryPiではkivyの入れ方は公式に掲載されている中、公式に掲載されておらず
TinkerBoard Kivyの記事が少ないため記録として残します。
(おかしな作業も含まれているかもしれません)
TinkerBoardを利用する理由としてRaspberryPiの処理能力より高く、形状も類似しているため上位互換として利用が考えれたため(特にフルスクリーンの動画では顕著に差が発生)
TinkerOS v2.0.7
https://www.asus.com/Single-Board-Computer/Tinker-Board-S/HelpDesk_Download/
or
https://tinkerboarding.co.uk/wiki/index.php/TinkerOS
(日本の公式サイトのOSは古い)
Kivy 1.10
https://kivy.org/doc/stable/installation/installation-linux.html#debian-jessie-or-newer
基本的には、TinkerOSは Debian 9(stretch)なのでインストールマニュアルのdebianの項目を参照
インストール方法
1. /etc/apt/sources.list へdeb追加
マニュアルよりstable版
deb http://ppa.launchpad.net/kivy-team/kivy/ubuntu xenial main
上記コード/etc/apt/sources.list に追記する
deb http://http.debian.net/debian/ stretch main contrib non-free
・・・省略・・・
deb-src http://http.debian.net/debian/ stretch-updates main contrib non-free
deb http://ppa.launchpad.net/kivy-team/kivy/ubuntu xenial main
その後、下記コマンドで登録
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A863D2D6
sudo apt update
これでapt(パッケージ管理システム)に参照されるようになります。
updateを忘れてapt installをすると1.9がインストールされますので注意
2. インストール aptコマンド
sudo apt install python-kivy
python2.7版がインストールが開始されます。
(2.7版にしかないライブラリを使用するため)
python3版は sudo apt install python3-kivy
基本的にここまででkivyインストール完了です。
kivy実行時に エラーが発生する場合 SDL2の変更をお勧めします。おまけ3に記載
おまけ1. examplesのインストール
sudo apt install kivy-examples
おまけ2. pipのインストール
apt install python-pipコマンドで入るpipのバージョンが古いので
kivyインストール後にまともにライブラリが入らないので手動で入れる方法(get-pip.py)
https://pip.pypa.io/en/stable/installing/
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
pip -V
にでバージョン確認
おまけ3 SDL2の変更
今回の記事を書くキッカケです。
デスクトップ環境では動作はするのですが求めていたのは、RaspberryPiと同じくSSHやCLIからの起動、および自動起動をしたい。raspberryと同様に操作すると、下記のエラーがでます。
[CRITICAL] [Window ] Unable to find any valuable Window provider at all!
(あと明らかにデスクトップ環境のkivyの動作が重い、Raspberryの方が軽快と感じるほどに)
解決方法について下記のフォーラムに答えがありました。
https://groups.google.com/forum/#!topic/kivy-users/jwBnYxe969g
SDL2を手動で入れ直しましょうということです。
これがなかったら諦めていました。感謝します。
https://wiki.libsdl.org/Installation#Linux.2FUnix
より インストール方法を参照
*homeディレクトリで操作しています。
hgコマンドを使用可能にする(mercurialのインストール)
インストール方法のhgコマンドがないためmercurialをいれてhgコマンドを使用可能にします。
sudo apt-get install mercurial
SDLのサイト通りの作業
mkdir build
まで実行
hg clone https://hg.libsdl.org/SDL SDL
cd SDL
mkdir build
インストール開始
./configure --disable-video-rpi --disable-video-opengl --enable-video-opengles2 --disable-video-mir --enable-video-kmsdrm && make && make install
上記コマンドで /usr/local/lib に追加されます。
リンクの変更(要方法変更)。
フォーラムのやりとり内でインストールしても動作しないというやり取りがあります。
回答として、インストールしてもライブラリの読み込み上、手動で入れたSDL2じゃなくて元々のSDL2を参照しているからなんとかしてねということらしいです。
参照先を確認します。
$ sudo ldconfig -p | grep SDL
libSDL2_ttf-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2_ttf-2.0.so.0
libSDL2_mixer-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2_mixer-2.0.so.0
libSDL2_image-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2_image-2.0.so.0
libSDL2-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0
libSDL_ttf-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL_ttf-2.0.so.0
libSDL_mixer-1.2.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0
libSDL_image-1.2.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0
libSDL-1.2.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0
/usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0を参照しています。
このファイルはリンクファイル(/usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0.4.1)なので参照先を書き換えます。
これで差し替え完了になり想定している動作が行えるようになります。
ライブラリを読まれる順番を替えてあげます。
/etc/ld.so.conf.d/
にarm-linux-gnueabihf.conf
より先に読まれる
configファイルを作りその中に/usr/local/lib
をいれてください。
ldconfig
にて先によまれます。
import osによる環境設定
kivyを使用するpyファイルに追記してください
import os
os.environ ['KIVY_GL_BACKEND'] = 'sdl2'
もしくは起動時に
KIVY_GL_BACKEND = sdl2 python xxx.py
として入れても動作します。
SDL2の変更後、GUIまわりの処理能力も上がっている気がします。
さいごに
RaspberryPiに比べて処理能力が高くコストもそこまで高くないのでGUIを回すことを考えると便利です。
Piに比べて情報量が少ないのが難点でしょうか。
一点うまくいってない点はsystemctlにてOS起動時にkivyを動かしたいのに動かないことです。
手動(systemctl start) ではうまくいくのでkivy起動前になにか転けてる感じがします。
(raspberry piのときはうまくいってました)