wxPythonプログラムを起動時自動実行
いわゆる、Linuxでのスタートアップ。
でもハマるハマる。。。
参考ページ
RaspberryPiで自動実行させる5つの方法を教えてくれるページ。
LXDEでアプリを自動実行させる方法を教えてくれるページ。
実際のところ
裏で動くデーモンとか、表示のいらないものであれば、上記のページにある5つの方法のどれでも、だいたいいけそう。
でも、今回動かしたいのはwxPythonを使ったGUIプログラムなのが問題。
rc.localでの起動を試しました、、、が。
私のRaspberryPiには、TFT LCDディスプレイを繋げてGUI表示をさせていたので、rc.localにはあらかじめ「startx」を記述していました。
なので、startxよりも前に「python3」をバックグラウンド実行するように追加してみました。
しかし、うまくは動きませんでした。。。
Xがスタートしていないからかなぁ…とsleepを入れたりと、試行錯誤しましたが結局解決には至りませんでした。
#失敗したrc.localの後半部分はこんな感じ
(sleep 30;python3 StrClock.py)&
mv /usr/share/X11/xorg.conf.d/99-fbturbo.conf /root/
cd /root
FRAMEBUFFER=/dev/fb1 startx
exit 0
autostartを試してみました。
autostartを使ったことを紹介する前に。
いろいろ調べていると、最近ではRaspberryPiはautostartを使うことを推奨しなくなったとの情報がありました。
なので、下記でやったことは動きはしましたが、ある意味正しいことではないかもしれませんのでご注意ください。
autostartはLXDEでの自動起動の仕組みなので、RaspberryPiではなくLXDEの単語と併せて検索するといろいろ見つけることができます。
ユーザ権限での自動実行なら、ユーザのカレントディレクトリから、「~/.config/lxsession/LXDE-pi/autostart」のファイルに設定を行います。
【追記2021/4/11】
すでにユーザ権限のautostartのファイルは上記の場所から消されているようです。このように、ユーザ権限用のautostartが存在しない場合は下記のetcディレクトリのautostartが使われます。
もしユーザ権限のみでの自動起動をしたい場合は、下記のetcディレクトリのautostartを上記のファイルの場所にコピーすると良いようです。
管理者権限での自動実行なら、「/etc/xdg/lxsession/LXDE-pi/autostart」のファイルに設定します。
【追記2021/4/11】
上記でも書きましたが、ユーザ権限用のautostartが存在しない場合は、このファイルが使われるようです。つまり、ここに設定した自動起動は、すべてのユーザでも実行されることがあります。
また、raspi-configでの重要ファイルのプロテクトはここにも効くようですので、プロテクトを外してから設定をしてください。
ここにPythonを実行するように記述をしますが、単純にPythonを実行するよう記述するとうまく動きませんでした。Xウィンドウが起動するより先に、wxPythonのプログラムが動いて終了したようです。
なので、下記のとおり実行シェルを作り、待ち時間をおいてから実行するようにautostartに設定しました。
(実行シェル"StartClock.sh"の内容。保存した後「chmod +x StartClock.sh」をしておく)
sleep 10
python3 /home/pi/StrClock3.py
autostartには、上記のシェルを実行するよう、最終行を追加。
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@/root/StartClock.sh
以上の設定をすると、RaspberryPiのデスクトップを表示した後に、wxPythonのプログラム(試作の文字クロック)を起動することができました。
この記事が気に入ったらサポートをしてみませんか?