Raspbian Buster LiteがインストールされたRaspberry Piがあり、自動ログインを使用してKIOSKモードで起動します。目的は、リンクされた7インチタッチスクリーン(Chromiumを含む)に単一のWebページを表示することです。システムがアイドル状態の場合、Pythonスクリプトはそれを検出して自動的に画面を暗くする必要があります。ユーザーが画面とやり取りすると、照明が点灯します。戻る。
これは私のスクリプト(dim_screen.py
)です。
#!/usr/bin/env python3 サブプロセスのインポート 輸入時期 輸入システム rpi_backlightからバックライトをインポートする バックライト = バックライト() #実行コマンドからパラメータを読み込みます。 #暗くなる前のアイドル時間(秒) アイドルTimeBeforeDimMS = int( sys.argv[1] )*1000 #暗くなったときの明るさ(0〜100の間) 明るさが薄い = int( sys.argv[2] ) 明るさ全体 = 100 デフのインポート(cmd): #ちょうどヘルパー関数 subprocess.check_output(cmd).decode("utf-8").strip() を返す アイドル0 = false 状態変更=偽 変化時間間隔 S = 100/1000 観察 そして事実: time.sleep( timeIntervalToWatchChangesS ) currentIdleTimeMS = int( get("xprintidle") ) isIdle = currentIdleTimeMS >idleTimeBeforeDimMS stateChanged = isIdle0 != isIdle isIdleとstateChangedの場合: #アイドリング バックライト、明るさ=明るさが暗くなる elif は isIdle と stateChanged ではありません。 #ポジティブ バックライト。明るさ=明るさ全体 #現在の状態を次のループの初期状態に設定します。 アイドル0 =アイドル
私のスクリプトはSSHから起動すると期待どおりに動作します。 (Windows 10システムのPuttyからPiに接続してテストできます。)
pi@raspberrypi:~$ /usr/bin/python3 /home/pi/startup_scripts/dim_screen.py 10 25
systemctl start dim_screen.service
残念ながら、systemdで(またはそれを介して)起動したときにスクリプトをサービスとして実行しようとすると、そうではありません。私はそれを動作させることはできません。
これは私の薄暗いスクリーン.サービスファイルです:
[単位] Description = 7インチRaspberry Pi画面がユーザーの対話なしで25分後に自動的に10%の明るさに暗くなるようにします。 以降=マルチユーザー。 [提供する] ExecStart=/usr/bin/python3 /home/pi/startup_scripts/dim_screen.py 10 25 [インストールする] WantedBy =マルチユーザー。ターゲット
再起動して実行すると、sudo systemctl status dim_screen.service
次の結果が表示されます。
私は最も重要なデバッグ情報が次の行だと思います。Command 'xprintidle' returned non-zero exit status 1.
私の考えでは、これは奇妙だと思いますか?xprintidle
端末で実行すると、次のことが発生します。
pi@raspberrypi:~$ xprintidle 11399922
つまり、有効な応答を受けましたxprintidle
。私が理解していない他のものがあると思いますか?
dim_screen.py
Python script()をサービスとして起動する正しい方法は何ですか?
答え1
この記事は元の質問に対する答えではありません。これは回避策です
xprintidle-returned-non-zero-exit-status-1の理由を理解できなかったので、回避策を試す必要がありました。
キオスクモードでChromeを実行するようにPiを設定したときにこれを行う方法については、このチュートリアルに従いました。RASPBERRY PIタッチスクリーンキオスクの設定ステップ10。このチュートリアルでは、Openboxウィンドウマネージャを設定するように指示されました。 Chromiumブラウザが起動する前にpythonscriptをブランチプロセスとして呼び出すことができます。この「解決策」はおそらくベストプラクティスのすべての可能な規則に違反しますが、私の問題は解決されました。少なくとも、より良い方法を見つけるまで。
これは私のものです/etc/xdg/openbox/autostart
:
# # これらの操作は、Openbox X セッションの開始時に実行されます。 #$ HOME / .config / openbox / autostartに同様のスクリプトを配置できます。 #ユーザー固有のタスクを実行します。 # #GNOME設定ツールを使用するには... # #if test -x /usr/lib/arm-linux-gnueabihf/gnome-settings-daemon >/dev/null; # /usr/lib/arm-linux-gnueabihf/gnome-settings-daemon & #elif which gnome-settings-daemon >/dev/null 2>&1;Then #gnomeセットデーモン& #fi #XFCE構成ツールを使用するには... # #xfce-mcs-管理者& #まず、電源管理、画面の消去、画面の保存をオフにするコマンドを追加します。私たちはキオスクにこれらの機能が含まれたくありません。 xset -dpms #ディスプレイ電源管理システムの電源を切る xset s noblank # 画面スペースをオフにする xset s off #スクリーンセーバーオフ # 次にChromiumがクラッシュすると、次回起動時にエラーメッセージが表示されることがあります。これは私たちがキオスクで望まないもう一つの機能です。 #警告を引き起こす可能性がある設定ファイルからシャットダウンエラーを削除します。 sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'local status' sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"normal"/' ~/.config/chromium/ デフォルト/デフォルト設定 #ユーザーがアイドル状態のときに(唯一の)画面を暗くするスクリプトを呼び出します。 /usr/bin/python3 /home/pi/startup_scripts/dim_screen.py 10 25 & #最後に、アップデートが自動的に開始され、Chromiumブラウザがキオスクモードで実行されます。実行するWebアプリケーションのURLを含む環境変数($ KIOSK_URL)を渡します。 #キオスクモードでChromiumを実行します。 chromium-browser --noerrdialogs --disable-infobars --kiosk --check-for-update-interval=31536000 $KIOSK_URL