Настройка systemd для управления службой при загрузке

У меня есть сценарий, который загружает изображение с веб-страницы и устанавливает его как мои обои для рабочего стола. Код работает нормально, но мне не удается запустить его при загрузке.

Я пытаюсь сделать это, настроив 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)
7
задан 4 June 2021 в 23:40

3 ответа

Я использовал похожую систему, так что вы сможете заставить ее работать с 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

1
ответ дан 28 July 2021 в 11:32

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

выполнить:
sudo crontab -e
затем добавить строку в конце, например, эту
@reboot / bin / bash /home/me/apod.sh

reboot и посмотреть, работает ли она .

вы также можете изменить @reboot, который будет запускаться только один раз после загрузки, на что-то примерно раз в час (см. Руководство cron).

Примерно так (в crontab) будет ежечасно.

0 * * * * / bin / bash /home/me/apod.sh

Надеюсь, это поможет. Удачи.

-1
ответ дан 28 July 2021 в 11:32

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

На самом деле в этом есть две части.

Одним из них является изменение gsettings, которое вы делаете, которое на самом деле является постоянным и не нуждается в повторении, если что-то другое не изменяет его, и вы хотите сбросить его, или если вы хотите изменить имя файла.

Другой загружает образ, и если вы замените файл, а не используете новое имя, оно может измениться мгновенно.

Загрузка также, вероятно, завершается ошибкой при загрузке, поскольку сеть может быть не полностью загружена при запуске, несмотря на зависимость network-online.target. Исправление этого задержит загрузку системы - это, вероятно, также будет лучше сделать во время запуска входа в систему.

2
ответ дан 28 July 2021 в 11:32

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

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