sudoを使用してターミナルで起動プログラムを実行する


8

端末でPythonスクリプトを実行する必要があります。起動時に(Lubuntで)myscript.pyを実行する必要があります。このスクリプトにはルートが必要です。

.desktop次のコマンドを実行するファイルを設定しました。

lxterminal --command="python /home/d/Jarvis/alarm.py && /bin/bash"

ターミナルウィンドウは起動時に開き、スクリプトを実行しますが、Pythonスクリプトがエラーを返すと閉じます(ルートとして実行されていないため)。これを変更するExec=と...

lxterminal --command="sudo python /home/d/Jarvis/alarm.py && /bin/bash"

...(コマンドの接頭辞としてsudo)が機能します。ただし、ターミナルは起動時に開き、

[sudo] password for d: \

プロンプト。パスワードの入力を要求します。起動時のpythonスクリプトの実行を、ユーザーの操作なしで完全に自動化したいと思います。

どうすればこれを達成できますか?

回答:


5

ログイン時に起動せずに起動したい場合(Xサーバーを起動せずにLXTerminalを開く方法がわからないため)、プロンプトが表示されないように、/ etc / sudoersファイルに例外を追加する必要があります。あなたのパスワード。

これを行うにはsudo visudo、次を実行して追加します。

<your username> ALL = NOPASSWD: /home/d/Jarvis/alarm.py

これを機能させるには、ファイルの最後に必ず追加してください。alarm.pyこれを機能させるには、の実行権限をに設定します。したがって、これを実行可能ファイルとして設定するには、次のようにします。

chmod +x /home/d/Jarvis/alarm.py

それが役に立てば幸い!


これでうまくいきます!どうもありがとうございます!まだ1つの問題があります...「python alarm.py」の代わりに「alarm.py」を実行すると、コアPythonモジュール(例:datetime)に対して「インポート:見つかりません」エラーが発生します。これらのモジュールを/ Jarvis /にコピーできないと思います。どうすればよいですか。
ブランドン、

@ブランドンPYTHONPATH変数を設定する必要があるかもしれませんが、これは単なる推測です。このために、次の内容で「alarm_starter.sh」というスクリプトを作成しますPYTHONPATH={what ever it should be} sudo /home/d/Jarvis/alarm.py。しかし、これについては本当にわかりません。多分これは助けになるでしょう:docs.python.org/tutorial/modules.html#the-module-search-path
kroq-gar78

9

起動時にrootとして実行されるカスタムスクリプトは、を介して実行できますrc.local

/etc/rc.localルート権限で編集:

sudo nano /etc/rc.local

そしてラインを入れて

python /home/d/Jarvis/alarm.py

最後の行の直前exit 0。再起動して、機能するかどうかを確認します。


これにより、Raspbianでのプログラムの自動起動に関する私の問題が解決しました。
Daniel Harris
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.