У меня должно быть слепое пятно, но я не могу найти, что это такое.
Я сделал небольшой скрипт 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)