У меня есть сценарий, который загружает изображение с веб-страницы и устанавливает его как мои обои для рабочего стола. Код работает нормально, но мне не удается запустить его при загрузке.
Я пытаюсь сделать это, настроив systemd для управления службой. (crontab у меня не работал при перезагрузке, но это другая проблема).
Я создал файл /etc/systemd/system/apod.service
:
[Unit]
Description=Set APOD as Desktop
[Install]
WantedBy=multi-user.target
[Unit]
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/bin/bash /home/me/apod.sh
Type=simple
User=me
Group=me
WorkingDirectory=/home/me
Restart=on-failure
Но когда я загружаюсь, похоже, что он не работает. Если я проверю systemctl status apod
, я увижу:
Jun 04 20:55:55 me-XPS-15-9500 systemd[1]: Started Set APOD as Desktop.
Jun 04 20:55:57 me-XPS-15-9500 gsettings[1598]: failed to commit changes to dconf: Could not connect: No such file or directory
Но если я просто вручную запущу / bin / bash /home/me/apod.sh
, он будет работать отлично.
Любые предложения приветствуются. Бегу 18.04.
Для полноты:
Сценарий bash:
#!/bin/sh
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
python /home/me/apod.py
/usr/bin/gsettings set org.gnome.desktop.background picture-uri "file:///home/me/Downloads/apod.jpg"
Сценарий python, который он вызывает:
from bs4 import BeautifulSoup as BSHTML
import requests
import subprocess
import urllib2
page = urllib2.urlopen('https://apod.nasa.gov/apod/astropix.html')
soup = BSHTML(page,features="html.parser")
images = soup.findAll('img')
url = 'https://apod.nasa.gov/apod/'+images[0]['src']
r = requests.get(url, allow_redirects=True)
with open('/home/me/Downloads/apod.jpg',"w") as f:
f.write(r.content)
Я использовал похожую систему, так что вы сможете заставить ее работать с systemd.Вы можете включить таймер systemd вместе со своим служебным файлом, чтобы служба запускалась при загрузке после входа в систему. Поскольку для установки обоев не требуются привилегии root, вы можете сделать так, как предложил @Jeff Schaller, и создать пользовательскую службу systemd. Вы можете хранить свои пользовательские файлы systemd в $ HOME / .config / systemd / user
. Вы можете изменить файл apod.service примерно так:
[Unit]
Description=Set APOD as Desktop
After=network.target
After=systemd-user-sessions.service
After=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Type=simple
ExecStart=/bin/bash /home/me/apod.sh
Добавьте файл с именем apod.timer
[Unit]
Description=Timer for apod.service
[Timer]
OnBootSec=0 min
[Install]
WantedBy=timers.target
Поместите apod.service
и apod.timer
в $ HOME / .config / systemd / user /
и включите их как обычно, но вместо использования привилегии root / вызов sudo, сделайте это как обычный пользователь и добавьте к команде флаг - user
:
systemctl --user enable apod.timer
systemctl --user enable apod. service
Редактировать: Также кажется, что «изображение» дня для сегодняшней даты из связанного источника НАСА - это видео, так что это может быть чем-то, на что стоит обратить внимание.
Edit2: отключено включение .service
в дополнение к .timer
Как вы сказали, он работает, выполняя его вручную, я думаю, вам следует выбрать другой способ через crontab.
выполнить:
sudo crontab -e
затем добавить строку в конце, например, эту
@reboot / bin / bash /home/me/apod.sh
reboot и посмотреть, работает ли она .
вы также можете изменить @reboot, который будет запускаться только один раз после загрузки, на что-то примерно раз в час (см. Руководство cron).
Примерно так (в crontab) будет ежечасно.
0 * * * * / bin / bash /home/me/apod.sh
Надеюсь, это поможет. Удачи.
Вы не можете изменить фон в сценарии загрузки системы, так как графическая среда еще не запущена. Я бы предложил добавить ваш скрипт в ваши стартап-приложения в gnome-tweaks.
На самом деле в этом есть две части.
Одним из них является изменение gsettings, которое вы делаете, которое на самом деле является постоянным и не нуждается в повторении, если что-то другое не изменяет его, и вы хотите сбросить его, или если вы хотите изменить имя файла.
Другой загружает образ, и если вы замените файл, а не используете новое имя, оно может измениться мгновенно.
Загрузка также, вероятно, завершается ошибкой при загрузке, поскольку сеть может быть не полностью загружена при запуске, несмотря на зависимость network-online.target. Исправление этого задержит загрузку системы - это, вероятно, также будет лучше сделать во время запуска входа в систему.