2013-06-30 4 views
1

У меня есть файл сценария python, который отлично работает, когда я использую его с терминала.Файл рабочего стола Linux Exec не использует сеанс пользователя

Теперь я создал следующий .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 файл так, что мое приложение работает, если я запустить его из моего терминала (без раскрытая терминал :))

ответ

0

Спасибо никому иметь участие в этом вопросе.

Я решил эту проблему путем использования pkexec вместо gksudo. pkexec, похоже, повторно использует текущую пользовательскую среду, тогда у меня больше нет этой проблемы.

Спасибо.

0

этот вопрос похож на .bashrc not read when shell script is invoked from desktop shortcut

  • либо инициализировать среду в ~/.bash_profile вместо ~/.bashrc

ИЛИ

  • сделать ваш *.desktop файл вызовом обертки, которая инициализирует среду - например. путем поиска ~/.bashrc (или любой другой скрипт - ).

Второе решение является более конкретным (не влияет на все другие несвязанные запуски вашей оболочки), поэтому должно быть предпочтительным.

+0

Я понимаю решение, но оно выглядит хрупким для меня, потому что я использую zsh, поэтому, если другие пользователи используют другие терминалы, в этом случае этого не будет. Как я могу обрабатывать все случаи? – ZedTuX

1

Проблема действительна, но я думаю, что «репликация терминальной среды» - неправильный подход к ее решению.

В самом деле, что делает работу приложения не факт, что это запускается из терминала, это что терминал случается иметь некоторые переменные окружения, которые важны для вашего приложения.

Поэтому то, что вы должны стремиться, чтобы иметь те переменные окружения, установленные должным образом во все времена, а не предполагая терминальную среду всегда будет содержать их все время для всех пользователей.

Таким образом, вы должны:

  1. Проверьте, какие переменные окружения отличаются между двумя средами
  2. Составьте список тех, которые материя (т.е.те, которые сделали бы .desktop файл работать должным образом), и что нужно их стоимость, чтобы быть для сценария работы
  3. Либо:
    • Создайте сценарий оболочки для сценария Python, который инициализирует эти переменные среды надлежащим образом, или
    • Установите эти переменные среды из самого скрипта Python.
+0

Звучит очень хорошо. Я дам ему попробовать. Спасибо! – ZedTuX