Редактирование Gsettings недопустимо при запуске cron

У меня должно быть слепое пятно, но я не могу найти, что это такое.

Я сделал небольшой скрипт python, который удаляет VLC из звукового меню. Он отлично работает в любом случае, я запускаю его с терминала или с пусковой установки или всего, что вы можете придумать.

То, что на самом деле делает скрипт, - это не что иное, как получить текущие настройки:

gsettings get com.canonical.indicator.sound interested-media-players

отредактировать список и установить измененный список:

Эти команды выполняются скриптом python. Однако при запуске из cronjob (crontab -e) только gsettings В действительности сценарий работает , но не раздел gsettings - set. То, что секция get отлично работает с cron, я проверил, сделав скрипт записывать данные (как оригинальные, так и отредактированные) во внешний файл.

- set -

Чтобы узнать, связана ли проблема с кодом python, я создал сценарий bash, который применяет список измененных звуковых меню. История такая же: сценарий bash отлично работает из командной строки или запуска, при запуске cronjob из cron, а любая другая команда в том же скрипте будет работать нормально. Кроме того, если я добавлю какую-либо команду в конец скрипта ниже, она отлично работает, и похоже, что скрипт удовлетворен своей работой.

Почему команда set gsettings не работает при запуске cron ?

Это сценарий:

#!/usr/bin/python3
import subprocess

def read_soundmenu():
    # read the current launcher contents
    get_menuitems = subprocess.Popen([
        "gsettings", "get", "com.canonical.indicator.sound", "interested-media-players"
        ], stdout=subprocess.PIPE)
    return eval((get_menuitems.communicate()[0].decode("utf-8")))

def set_current_menu(current_list): # this takes no effect from cron
    # preparing subprocess command string
    current_list = str(current_list).replace(", ", ",")
    subprocess.Popen([
        "gsettings", "set", "com.canonical.indicator.sound", "interested-media-players",
        current_list,
        ])

current_list = read_soundmenu()
for item in current_list:
    if item == "vlc.desktop":
        current_list.remove(item)
set_current_menu(current_list)
1
задан 23 February 2016 в 21:03

0 ответов

Другие вопросы по тегам:

Похожие вопросы: