私はRaspberry Piのバックグラウンドで実行したいPythonスクリプトを書いた。スクリプトはPythonモジュールKeyring
(協会)は、スクリプトにパスワード入力を提供するためにキーリングバックエンドにアクセスするために使用されます。
Keyring
私はOS Xキーチェーンを使用するOS Xでスクリプトを作成しました。ただし、ヘッドレスRaspberry Piを使用していない場合は、バックエンドとして機能するためにX11
同様GNOME Keychain
のものをインストールする必要があります。
D-Bus
私はPypiのガイドライン(以下の引用)を読んでいますが、Pypiのガイドラインと実際にどのように機能するかについてはよく知られていません。誰もが次のことを前提としてこれを処理する方法D-bus
と方法の実用的な例を提供したいと思いますか?GNOME Keyring
Raspbian
- このスクリプトは、Raspberryの電源が入っている間は常にバックグラウンドで実行する必要があります
crontab
。 - スクリプトは、
virtualenv
このKeyring
モジュールがインストールされている環境で実行する必要があります。 GNOME Keyring
/処理D-Bus session
は可能であれば自動的に処理され、ユーザー入力なしでキーリング項目をスクリプトに提供できます(たとえば、Raspberryの電源を入れるか、スクリプトが実行されると自動的にロードされます)。
https://pypi.python.org/pypi/keyring#using-keyring-on-headless-linux-systems
ヘッドレスLinuxシステムでキーリングを使用する
SecretServiceバックエンドは、利用可能なX11サーバーなしでLinuxシステムで使用できます(D-Busのみが必要)。これを行うには、次のものが必要です。
GNOMEキーリングデーモンをインストールします。(注:私はすでにこれをやっています
apt-get
。)たとえば、このシェル内で D-Bus セッションを開始し、
dbus-run-session -- sh
次のコマンドを実行します。
gnome-keyring-daemon
オプションを使用して実行します--unlock
。オプションについては後述する。標準入力からパスワードを読み、それを使用してログインキーリングのロックを解除するか、存在しない場合はログインキーリングを作成します。
コマンドが起動したら、stdinにパスワードを入力し、 Ctrl+ D(データ終了)を押します。その後、デーモンはバックグラウンドに分岐します(
--foreground
これを防ぐにはオプションを使用してください)。これで、KeyringのSecretServiceバックエンドを使用できるようになりました。デーモンと同じD-Busセッションでアプリケーションを実行することを忘れないでください。
答え1
それでも指示に従い、必要なコンテキストを開始して実行する必要があります。これは通常、グラフィックシェルにログインしている間に行われますが、ヘッドレスシステムを使用しているため、環境を作成する必要があります。
これは、ログイン(使用ssh
)し、「ヘッドレスLinuxシステムでのキーリングの使用」で指定されているように、コマンドラインからプログラムを実行してから、独自のプログラムを実行するか、またはこれらすべてを実行するスクリプトを生成することを意味します。
プログラムをcrontabで起動するには、2番目のオプション(必要なすべてのタスクを実行するスクリプトを作成してからPythonプログラムを起動すること)が最善の選択です。
検索コマンドに非常に制限されたPATHを含むcronでスクリプトを実行すると、環境が異なることに注意してください。
/path/to/your/virtualenv/bin/python setup.py install
プログラムがパッケージエントリポイントとしてインストールされている場合(つまり、これにより)、virtualenvで実行が自動的に行われます。プログラムをパッケージに入れていない場合は、次のように実行してください。
/path/to/your/virtualenv/bin/python /path/to/your/main/python/prog.py
virtualenvにインストールされているすべてのパッケージが実際に使用されます。
Pythonプログラムで指定された手順を実行できるはずですが、これは説明とは異なります(シェルがあると仮定)。したがって、これらの問題の経験がない限り、私はこれらの手順を実行してからPythonプログラムを呼び出すシェルスクリプトを作成することに集中します。