Сценарий оболочки завершается ошибкой при выполнении службы systemd

1

Итак, у меня есть служба systemd, которая называется startup.service:

[Unit]
Description=startup scripts

[Service]
Type=oneshot
ExecStart=/home/user/Documents/Tools/Scripts/startup.sh

[Install]
WantedBy=multi-user.target

который вызывает скрипт с именем startup.sh:

#! /bin/sh -
DIR='/home/user/Documents/Tools/Scripts'
$DIR/audio.sh
$DIR/powertop.sh
$DIR/xinput.sh

который вызывает скрипт с именем xinput.sh:

экспорт DISPLAY =: 0.0 если xinput set-prop 11 297 -107 -107; затем эхо "сделано!" фи

Когда я запускаю startup.sh от имени пользователя root, xinput.sh возвращает «done!» и правильно меняет настройки. Когда я запускаю startup.service от имени пользователя root, xinput завершается ошибкой и возвращает:

Jun 23 22:37:45 localhost startup.sh[7051]: No protocol specified
Jun 23 22:37:45 localhost startup.sh[7051]: Unable to connect to X server

(Это все после того, как Х начал)

Какая разница? Почему это происходит?

Gooberpatrol66
источник
Настройка Xauthority исправлена. Я до сих пор не знаю, почему запуск сценария отличается от запуска устройства.
Gooberpatrol66
Хотел сказать сервис
Gooberpatrol66

Ответы:

1

Разница между запуском скрипта через systemd и его непосредственное управление - это среда. Вы можете проверить это так. В вашем модульном файле добавьте это в раздел [Service] для тестирования:

StandardOutput=console

Затем в вашем bash-скрипте вверху добавьте эту строку, чтобы вывести окружение:

env

Теперь запустите скрипт внутри и вне systemd и сравните переменные окружения, которые выводятся.

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

Mark Stosberg
источник