【问题标题】:Python-Application .desktop-shortcut causing malfunctionPython-Application .desktop-shortcut 导致故障
【发布时间】:2017-04-28 11:21:44
【问题描述】:

我想为我的 Python 应用程序创建一个桌面启动器。该应用程序使用 publickey-authentication 在pexpect 上执行各种 ssh 操作。但是,问题是,当我使用 .desktop 启动器启动我的应用程序时,它无法正常工作。 ssh 连接要求输入密码并且不使用公钥。但它可以通过命令行执行正常工作。

.desktop 文件如下所示:

[Desktop Entry]
Version=1.0
Name=SSH-Manager
Comment=XYZ
Exec=python /home/userx/SSH-Manager/startup.py
Icon=/home/userx/SSH-Manager/resources/icon.png
Path=/home/userx/repos/SSH-Manager
Terminal=true
Type=Application
Categories=Utility;Application;
StartupNotify=false

桌面环境为KDE,桌面用户与命令行用户相同。

有人可以解释为什么我的启动器会出现这种奇怪的行为吗?

编辑:示例函数

def run(self):
    self.a_signal.emit("Retrieving Data")
    try:
        session = pxssh()
        session.force_password = False
        hostname = self.client
        username = "root"
        session.login(hostname, username)
        session.sendline("ls -a")
        session.prompt()
        session.logout()
    except ExceptionPxssh as e:
        print ("pxssh failed: ")
        self.error_signal.emit("failed", str(e))
        print e
        return
    self.process_output()
    self.finish_signal.emit("done")

【问题讨论】:

  • 桌面条目看起来不错。问题要么出在 Python 程序中(没有代码就无法分辨),要么出在与终端环境不同的桌面环境中。根据您启动 X 的方式,一些关键的环境变量可能会丢失。如果您使用 ssh-agent,但从终端启动它,您也会丢失环境变量。 ssh-agent 应该在 X 之前启动,以便所有进程共享一个代理。
  • 我认为 ssh-agent 是问题所在。有没有办法绕过这个?也许用 bash 脚本或类似的东西启动 python 应用程序?
  • 您可以在 X 之前启动 ssh-agent。在 Debian 中,您需要有可用的 /usr/bin/ssh-agent 二进制文件(由我的系统上的 openssh-client 提供,但我认为有多个提供程序)和 @987654328 @ 安装包。然后将行use-ssh-agent 添加到/etc/X11/Xsession.options 文件并重新启动X。这将产生在所有桌面进程之间共享的ssh-agent。您需要使用ssh-add path/to/key 手动添加您的密钥;检查它是否添加了ssh-add -L。您还可以通过在您的 ~/.ssh/config 中添加行 AddKeysToAgent=yes 来在第一次请求时自动将密钥添加到代理。
  • 我尝试了你解释的一切,但我无法让它以某种方式工作。我什至尝试了没有密码的密钥对,但是一旦我使用启动器启动我的应用程序,ssh 操作就需要密码。我将在我的问题中添加一些 python 代码。也许您知道问题可能出在 python 代码中。
  • ~/.profile 运行ssh-add 似乎是错误的,但如果这对你有用,请考虑answering your own questionmarking it as accepted,所以这个问题不会再出现在未解决的查询列表中。

标签: python linux kde-plasma desktop-shortcut


【解决方案1】:

正如 Mirosław Zalewski 在 cmets 中所怀疑的那样,问题在于 ssh-agent 没有在桌面环境中运行,因为 ssh-add 最初用于 /etc/sources。因此,在 X 用户 ~./profile 中执行 ssh-add 即可解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多