見出し画像

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のプログラム(試作の文字クロック)を起動することができました。

画像1


この記事が気に入ったらサポートをしてみませんか?