Linux桌面文件Exec不使用用户会话

时间:2013-06-30 12:55:53

标签: python linux freedesktop.org

我有一个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文件,以便我的应用程序运行就像我从终端启动它(没有打开的终端:))

3 个答案:

答案 0 :(得分:1)

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

事实上,使应用程序工作的原因并不在于它是从终端启动,而是终端碰巧某些对您的应用程序很重要的环境变量

因此,你应该瞄准的是始终正确设置这些环境变量,而不是假设终端环境总是会碰巧包含它们所有所有用户的时间。

因此,你应该:

  1. 检查两种环境中哪些环境变量不同
  2. 列出那些重要的内容(即使.desktop文件正常工作的内容),以及脚本工作所需的价值
  3. 或者:
    • 为您的Python脚本创建一个包装器脚本,正确初始化这些环境变量,或者
    • 从Python脚本本身设置这些环境变量。

答案 1 :(得分:0)

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

  • 要么在~/.bash_profile而不是~/.bashrc初始化您的环境 *.desktop

OR

  • 让您的~/.bashrc文件调用一个初始化您的文件的包装器 环境 - 例如通过采购{{1}}(或任何脚本是 现在负责)。

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

答案 2 :(得分:0)

感谢任何人参与此问题。

我已通过使用pkexec代替gksudo解决了此问题。 pkexec似乎重用了当前的用户环境,然后我就不再有这个问题了。

感谢。