Вот то , что я только что создал , как обходной путь к еще не доступно graphical-session.target
(На моей системе Kubuntu 16.04):
- Создайте псевдосистемный пользовательский модуль, который поднимает и опускает графическую цель.
Создайте ~/.config/systemd/user/xsession.target
со следующим содержимым:
[Unit]
Description = Xsession up and running
BindsTo=graphical-session.target
Расскажите systemd об этом новом модуле:
$> systemctl --user daemon-reload
- Создайте сценарии автозапуска и завершения работы, которые управляют
xsession.target
помощью доступной в настоящее время механики рабочего стола Ubuntu 16.04.
Создайте ~/.config/autostart-scripts/xsession.target-login.sh
со следующим содержимым:
#!/bin/bash
if ! systemctl --user is-active xsession.target &> /dev/null
then
/bin/systemctl --user import-environment DISPLAY XAUTHORITY
/bin/systemctl --user start xsession.target
fi
Создайте ~/.config/plasma-workspace/shutdown/xsession.target-logout.sh
со следующим содержимым:
#!/bin/bash
if systemctl --user is-active xsession.target &> /dev/null
then
/bin/systemctl --user stop xsession.target
fi
Сделайте скрипты исполняемыми:
$> chmod +x ~/.config/autostart-scripts/xsession.target-login.sh
$> chmod +x ~/.config/plasma-workspace/shutdown/xsession.target-logout.sh
Примечание: эти два файла размещены там, где KDE подберет их для автоматического запуска и завершения работы. Файлы могут быть размещены где-то еще для других сред рабочего стола (например, Gnome), но я не знаю об этих средах.
Примечание. В этом обходном пути отсутствует поддержка нескольких рабочих столов. Он корректно обрабатывает graphical-session.target
сессию.target только до тех пор, пока на машине запущен только один активный сеанс X11 (но это относится к большинству из нас, пользователей Linux).
- Создайте свои собственные пользовательские модули systemd, которые зависят от
graphical-session.target
и пусть они будут работать корректно при входе в систему на рабочем столе.
В качестве примера модуль @ mkaito должен выглядеть так:
[Unit]
Description=Redshift
PartOf=graphical-session.target
[Service]
ExecStart=/bin/redshift -l 28:-13 -t 5300:3300 -b 0.80:0.91 -m randr
Restart=always
(Не забудьте daemon-reload
после редактирования ваших юнитов!)
- Перезагрузите компьютер, войдите в систему и убедитесь, что ваши устройства запущены, как и ожидалось
$> systemctl --user status graphical-session.target
● graphical-session.target - Current graphical user session
Loaded: loaded (/usr/lib/systemd/user/graphical-session.target; static; vendor preset: enabled)
Active: active since Don 2017-01-05 15:08:42 CET; 47min ago
Docs: man:systemd.special(7)
$> systemctl --user status your-unit...
В какой-то будущий день (это будет Ubuntu 17.04?) мой обходной путь устарел, так как система сама будет корректно обрабатывать graphical-session.target
сессию.
В этот день просто удалите сценарий автозапуска и завершения работы, а также xsession.target
- ваши пользовательские пользовательские блоки могут остаться нетронутыми и просто работать.