我编写了一个 Python 脚本,希望在我的 Raspberry Pi 上在后台运行。该脚本使用 Python 模块Keyring
(关联),用于访问密钥环后端以向脚本提供密码输入。
我在 OS X 中编写了脚本,其中 Keyring
使用了 OS X 钥匙串。但在不使用的无头 Raspberry Pi 上X11
,GNOME Keychain
必须安装类似的东西才能充当后端。
我已阅读 Pypi 说明(如下引用),但我不熟悉D-Bus
以及如何使其在实践中发挥作用。是否有人愿意提供一个实际的例子来说明如何处理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 系统上使用密钥环
可以在没有可用 X11 服务器的 Linux 系统上使用 SecretService 后端(仅需要 D-Bus)。为此,您需要以下内容:
安装 GNOME 密钥环守护程序。(注:我已经通过 完成了此操作
apt-get
)。启动 D-Bus 会话,例如
dbus-run-session -- sh
在该 shell 内运行并运行以下命令。
gnome-keyring-daemon
使用选项运行--unlock
。该选项的描述如下:从标准输入读取密码,并使用它来解锁登录密钥环,或者在登录密钥环不存在时创建它。
当该命令启动时,在 stdin 中输入您的密码,然后按 Ctrl+ D(数据结束)。之后,守护进程将分叉到后台(使用
--foreground
选项来防止这种情况)。现在您可以使用 Keyring 的 SecretService 后端。请记住在与守护程序相同的 D-Bus 会话中运行应用程序。
答案1
您仍然需要按照说明进行操作并启动并运行所需的上下文。这通常在登录图形 shell 时完成,但由于您使用无头系统,因此必须创建环境。
这意味着您要么登录(使用ssh
)并按照“在无头 Linux 系统上使用密钥环”中指定的方式从命令行运行程序,然后启动您自己的程序,要么创建一个执行所有这些操作的脚本。
如果您的程序要从 crontab 启动,那么第二个选项(制作一个执行所有必需操作的脚本,然后启动您的 Python 程序)是最佳选择。
请注意,从 cron 运行脚本时的环境是不同的,包括搜索命令的非常受限的 PATH。
/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 程序中指定的步骤,但这与描述不同(假设您有一个 shell)。因此,除非您在这些问题上有经验,否则我会坚持制作一个执行这些步骤的 shell 脚本,然后调用您的 python 程序。