独自のpythonスクリプト(GUI)のみを起動する方法は?


12

次の問題があります:Raspbian Jessie(バージョン4.4.26-v7 +)を実行しているRaspPi 3Bを使用する起動時に自己記述PythonスクリプトのGUIを実行したいです。

この質問はこのウェブサイトだけでなく他のウェブサイトでも尋ねられていることを知っていますが、Raspbianは変化し続けており、以前に提案された解決策はどれも役に立たなかったため(下記参照)、もう一度質問したいと思います。

私の理解では、XServerをロードし、その後スクリプトを実行する必要があります。これは、デスクトップ全体をロードする代わりに発生するはずです。

これを達成する1つの方法は、LXDE自動起動ファイルを使用することです(この回答で説明されています)。私は、ファイルを編集した/etc/xdg/lxsession/LXDE-pi/autostartだけでなく、ファイル/etc/xdg/lxsession/LXDE/autostart(参照記事で示唆されているように、前者はもともと4本の線の代わりに3つ含まれている) -の行を追加@sudo python /full/path/to/file.pyして@openbox、私のPiはまだブーツデスクトップに、自動的にすべてのスクリプトを実行しません。注釈:どちらかのファイルと両方のファイルについて、スクリプト行とスクリプト行をopenbox行と一緒に試しました。

別の戦略には、rc.localファイルが含まれます(公式ドキュメントで提案されています)。ただし、追加するだけでpython /full/path/to/file.py &は機能せず(GUIがまだstartxないため)、さらに追加しても助けにはなりませんでした。明らかにstartxをpythonスクリプトにリンクできなかったため、前者は起動直後に閉じられました。

いくつかは示唆(さらに)の.xinitrcが使用されるべきであること、。ただし、これも機能しませんでした。

su -c python /full/path/to/file.py pi

そして、最後になりましたが、何らかの方法で、init.dを使用して実行可能にする必要があります。

正しい方向へのヒントをいただければ幸いです。私の間違いはどこですか?rc.localまたは.xinitrcの私の行はどのように見えますか?または、ピクセルへの切り替えに関連する大きな変更がありましたか?


追加情報:スクリプトにはsudo権限が必要です。GUI 2.7はTkinterを使用しているPython 2.7で書かれています。GUIは画面を完全に埋めるため、背景は無関係です。スクリプトは永久に(またはGUIを介したユーザー入力によって停止されるまで)実行されることになっており、wifiやイーサネットなどのシステムサービスを使用します。


詳細:すべてローカルで発生しています。


明確化:これまでに、8時間以上ネットを検索し、さまざまな開始点からチュートリアルを試したり、それらを組み合わせたりしました。2016年10月がRaspbianに変更されたため、非デスクトップ環境で実行するとスクリプト(ピクセルで起動したときに完全に動作する)が動作しない(疑わしい)か、新しいチュートリアルが必要であるという結論に達しました。古いチュートリアルを廃止しました。さらに、スクリプトを起動したり、Xserver(または同様のもの)を互いに独立して起動するのではなく、Xserverによって作成されたディスプレイをスクリプトが使用するように両方をリンクすることが課題です。


私はそれがあまり役に立たないことを認めますが、たぶん、XBMC(または他のHTPCディストリビューション)がどのようにブートするかを見る価値があるでしょうか?また、多分これは、あなたの質問に答えるでしょうraspberrypi.stackexchange.com/questions/11866/...
ペトルGladkikh

回答:


12

過去1か月ほど、私は基本的にまったく同じことに取り組んでいるので、これをどのように行うかを研究し、最新バージョンのRaspbian(PIXEL)でそれを行う方法を知りました。

nodmは、LXDEのロードをバイパスする最小限のディスプレイマネージャーであり、openbox(既にPiにインストールされている)最小限のセッションマネージャーを提供し、Xサーバーで動作します。

Raspbianでこの環境をセットアップするには、ファイルをインストールnodmapt-getて編集します/etc/default/nodm。あなたは、オプションを設定する必要があるNODM_ENABLEDtrueしてNODM_USERpi(またはユーザー名が何であれ)。

次に、ホームフォルダー(/home/pi/.xsession)に次の内容のカスタムXsessionファイルを作成します(whileループは必要ありません。クラッシュした場合、Pythonスクリプトを自動的に再起動します)。

#!/usr/bin/env bash
exec openbox-session &
while true; do
  python3 /home/pi/Documents/script.py
done

そして、これが必要だと思うすべてです。これを自動的に設定するBashスクリプトを作成しました。

sudo apt-get -y install nodm

# Edit nodm config file
sudo sed -i -e "s/NODM_ENABLED=false/NODM_ENABLED=true/" -e "s/NODM_USER=root/NODM_USER=pi/" \
  /etc/default/nodm

# Create custom Xsession file
printf "%s\n" \
  "#!/usr/bin/env bash" \
  "exec openbox-session &" \
  "while true; do" \
  "  python3 $PWD/main.py" \
  "done" \
  > /home/pi/.xsession

ノート:

  • このリンクは役に立ちましたが、一部の情報は現在古くなっています:https : //blog.qruizelabs.com/2014/04/29/raspberrypi-kiosk-matchbox-uzbl/彼らはマッチボックスウィンドウマネージャーを使用していますが、機能しませんでした私は複数のウィンドウのサポートが必要だったので、私にとっては必要ありませんが、それは素晴らしいオプションかもしれません。
  • 上記のソリューションは機能しましたが、可能な限り軽量な環境が必要だったため、GUIのない​​Raspbian Liteに切り替えて、絶対に必要なパッケージのみをゼロからインストールしました。プロセスは非常に似ていますが、他にnodmあなたインストールする必要がありxserver-xorgxinitopenbox、およびスクリプトがあり、他の依存関係。次に、XsessionファイルでPythonスクリプトを実行する代わりにOpenboxを使用している場合、Openboxを実行するコードの一部を別のスクリプト(/home/pi/.config/openbox/autostart)に移動する必要があります。必要に応じて、これを行う方法について詳しく説明できます。

こんにちはtjohnson、私はあなたがRaspbianで上で説明した方法を使って、それを動作させました、ありがとう!最後のメモでも言及したように、Raspbian Liteで試してみたいと思いました。リストした追加の依存関係をインストールしましたが、アプリが起動しませんでした。これは、別のスクリプトに移動することに関する最後のコメントに関連していると思います。home / pi / .config / openboxフォルダーがないので、それとautostartファイルを作成しましたが、機能していないようです。それについて詳しく説明していただけますか?ありがとう
-AngeloQ

@AngeloQはRaspbian Liteで動作するようにしましたか?
ポール

1

自動起動ファイルはいくつかの異なる場所に存在します。正しいパスで正しい自動起動ファイルを編集するだけです。編集してみました/home/pi/.config/lxsession/LXDE-pi/autostart。それは最終的に私のためのトリックをしました。

/etc/xdg/lxsession/LXDE-pi/autostart 間違ったパスのようです。


0

汚いトリック私は過去にRPIに使用しましたが、私の中でコマンドを入れていた/etc/rc.local直前のファイルexit 0の行。あなたの場合、次の行を試して再起動します。

python /full/path/to/file.py &

sudoレベルのアクセス許可が必要であると述べたsuように、piユーザーの下で実行しようとしているように見えるため、以前に試したコマンドを代わりに調整する必要があります。

rc.localファイルの使用に関する私の提案についての1つの警告、スクリプトが0以外のステータスで終了した場合、ブートを完了できないため、テスト中により安全にするために、次を試して終了が0に等しいことを確認できます

python /full/path/to/file.py & || exit 0

編集と更新

いくつかの検索データに目を向けると、cronタブで参照されているランチャースクリプトを使用してpythonスクリプトの読み込みを容易にすることを示す、説明可能な情報が見つかりました。pythonをロードするためにcronをロードしてsh / bashスクリプトをロードしようとしているように見えるかもしれませんが、...


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ガニマ

0

したがって、コードに必要な入力によっては、このソリューションが機能する場合があります。

私が最初にしたことは、次のようなスクリプトを/ディレクトリに作成することでした。

#!/bin/bash
echo "Starting program..."
cd /home/pi/myFolder
sudo python3 myPython.py $@ #$@ takes all arguments and passes them to python.
exit 0

で実行可能にする必要がありchmod -x scriptName.shます。

次にcrontab -e、ターミナルで行い、追加します@reboot sudo bash /scriptName.sh

起動オプションをCLIに設定すると、準備完了です!これは、Raspbianを実行している3Bで機能しました。

キオスク/画面にタッチスクリーンを使用している場合は、まだわかりません。マウス入力でも問題なく動作しますが、タッチ入力に関しては、少なくとも使用しようとしている画面では、使用できなくなるような方法でオフになります。

:コードが私のようにファイルIOを実行している場合、ランチャースクリプトでコードの場所に移動するために使用する必要あります。そうしないcdと、Pythonはその場所がスクリプトの場所であると想定し、それに応じてファイルIOを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.