1

我有一个 python 脚本文件,当我从终端使用它时,它可以完美运行。

现在我创建了以下.desktop文件以便轻松启动它:

[Desktop Entry]
Name=Test
GenericName=Test
Comment=My test script
Type=Application
Exec=/opt/test.py
Icon=/opt/test.png
Categories=Utils;

当我启动它时,会出现 GTK 窗口,但单击调用 init.d 脚本的按钮使其无法正常工作。

因此添加Terminal=true使其完美运行,但我不想打开该终端。

因此,我输入了以下代码以记录环境变量:

import os

with open("/tmp/py_env.log", "w") as env_log:
  env_log.write(str(os.environ))

并发现差异。

所以我的问题是如何编写 .desktop 文件,以便我的应用程序像从终端启动它一样运行(没有打开终端:))

4

3 回答 3

1

这个问题是有效的,但我认为“复制终端环境”是解决它的错误方法。

实际上,使应用程序工作的原因并不是它是从终端启动的,而是终端恰好有一些对您的应用程序很重要的环境变量。

因此,您的目标应该是始终正确设置这些环境变量,而不是假设终端环境总是恰好为所有用户包含它们。

因此,您应该:

  1. 检查两个环境之间哪些环境变量不同
  2. 列出重要的内容(即那些可以使.desktop文件正常工作的内容)以及脚本工作所需的价值
  3. 任何一个:
    • 为您的 Python 脚本创建一个包装脚本,它可以正确初始化这些环境变量,或者
    • 从 Python 脚本本身内部设置这些环境变量。
于 2013-07-01T20:27:48.410 回答
0

Thanks anyone to have participate to this question.

I have solved this issue by implemented use of pkexec instead of gksudo. pkexec seems to reuse the current user environment then I don't have this issue anymore.

Thanks.

于 2013-07-21T09:21:42.557 回答
0

这个问题类似于.bashrc not read when shell script is invoked from desktop shortcut

  • 要么初始化你的环境,~/.bash_profile而不是 ~/.bashrc

或者

  • 使您的*.desktop文件调用初始化您的环境的包装器 - 例如通过采购~/.bashrc(或现在负责的任何脚本)。

第二种解决方案更具体(不会影响您的 shell 的所有其他不相关的启动),因此应该首选。

于 2013-06-30T18:33:26.263 回答