仮想環境でPython KeyringでGNOME Keyringを使用する方法は?

仮想環境でPython KeyringでGNOME Keyringを使用する方法は?

私はRaspberry Piのバックグラウンドで実行したいPythonスクリプトを書いた。スクリプトはPythonモジュールKeyring協会)は、スクリプトにパスワード入力を提供するためにキーリングバックエンドにアクセスするために使用されます。

Keyring私はOS Xキーチェーンを使用するOS Xでスクリプトを作成しました。ただし、ヘッドレスRaspberry Piを使用していない場合は、バックエンドとして機能するためにX11同様GNOME Keychainのものをインストールする必要があります。

D-Bus私はPypiのガイドライン(以下の引用)を読んでいますが、Pypiのガイドラインと実際にどのように機能するかについてはよく知られていません。誰もが次のことを前提としてこれを処理する方法D-busと方法の実用的な例を提供したいと思いますか?GNOME KeyringRaspbian

  • このスクリプトは、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プログラムを呼び出すシェルスクリプトを作成することに集中します。

おすすめ記事