Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
no avatar

Автор темы
nok128
Сообщения: 47
Зарегистрирован: 08 окт 2021, 17:23
Решено: 2
Благодарил (а): 25 раз
Поблагодарили: 1 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#1

24 авг 2022, 06:51

Нужно запустить скрипт после выхода из ждущего режима. Прочитал, что это можно сделать с помощью systemd, который до и после ждущего режима автоматически выполнит все находящиеся в /usr/lib/systemd/system-sleep скрипты. Для тестирования данной возможности добавил в /usr/lib/systemd/system-sleep файл myscript.sh следующего содержания:

Код: Выделить всё

#!/bin/bash

notify-send "test"
Добавил файлу право исполняемости.
Но уведомление не выводится ни до входа в ждущий режим, ни после выхода из него. При этом если запустить его напрямую (./myscript.sh), уведомление выводится.

В чём может быть причина?

Решение slant » 24 авг 2022, 11:39
nok128 писал(а):
24 авг 2022, 08:42
А есть ли в таком случае возможность запустить команду внутри такого скрипта от имени пользователя? Я пробовал sudo -u <username> notify-send "test", но это не сработало.
И не должно.
Чтобы достучаться до чужих иксов, а для root иксы запущенные пользователем - чужие, и попытки изменить самого активного пользователя через sudo здесь никак не помогут, т.к. это будет НОВАЯ сессия другого пользователя, а не та где идет вывод на экран, нужно обращаться к dbus. В частности - есть dbus-launch. Там надо будет указать, к какой сессии цеплять запущенную программу.

Перейти к ответу ➙

Аватара пользователя

rogoznik
Сообщения: 10438
Зарегистрирован: 27 июн 2017, 13:36
Решено: 135
Откуда: Нижний Тагил
Благодарил (а): 792 раза
Поблагодарили: 2051 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#2

24 авг 2022, 07:23

nok128 писал(а):
24 авг 2022, 06:51
В чём может быть причина?
В том что в этом случае скрипты выполняются от суперпользователя, а у него к пользовательской X-сессии доступа нет
ИзображениеИзображение

no avatar

Автор темы
nok128
Сообщения: 47
Зарегистрирован: 08 окт 2021, 17:23
Решено: 2
Благодарил (а): 25 раз
Поблагодарили: 1 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#3

24 авг 2022, 08:42

rogoznik писал(а):
24 авг 2022, 07:23
в этом случае скрипты выполняются от суперпользователя
А есть ли в таком случае возможность запустить команду внутри такого скрипта от имени пользователя? Я пробовал sudo -u <username> notify-send "test", но это не сработало.

Аватара пользователя

Sova
Сообщения: 124
Зарегистрирован: 15 мар 2020, 08:58
Решено: 1
Благодарил (а): 35 раз
Поблагодарили: 8 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#4

24 авг 2022, 09:08

nok128 писал(а):
24 авг 2022, 06:51
В чём может быть причина?
Причина в том, что эти скрипты должны быть написаны определенным образом - зависит от того, должна ли выполняться команда (или команды) до входа в ждущий, после или в обоих случаях. Плюс, notify-send через Системду работаетет как-то иначе, чем просто из консоли. Попробуйте вот такой скрипт для проверки:

Код: Выделить всё

#!/bin/sh
case $1/$2 in
  pre/*)
    notify-send "Перед ждущим"
    ;;
  post/*)
    notify-send "После ждущего"
    ;;
esac

Аватара пользователя

slant
Сообщения: 4859
Зарегистрирован: 21 июн 2017, 18:09
Решено: 111
Благодарил (а): 53 раза
Поблагодарили: 2177 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#5

24 авг 2022, 11:39

nok128 писал(а):
24 авг 2022, 08:42
А есть ли в таком случае возможность запустить команду внутри такого скрипта от имени пользователя? Я пробовал sudo -u <username> notify-send "test", но это не сработало.
И не должно.
Чтобы достучаться до чужих иксов, а для root иксы запущенные пользователем - чужие, и попытки изменить самого активного пользователя через sudo здесь никак не помогут, т.к. это будет НОВАЯ сессия другого пользователя, а не та где идет вывод на экран, нужно обращаться к dbus. В частности - есть dbus-launch. Там надо будет указать, к какой сессии цеплять запущенную программу.

no avatar

Автор темы
nok128
Сообщения: 47
Зарегистрирован: 08 окт 2021, 17:23
Решено: 2
Благодарил (а): 25 раз
Поблагодарили: 1 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#6

25 авг 2022, 01:29

Sova писал(а):
24 авг 2022, 09:08
Причина в том, что эти скрипты должны быть написаны определенным образом
Не соглашусь. Для примера скрипт следующего содержания:

Код: Выделить всё

#!/bin/bash
echo 'hello, world!' > ~/hello.txt
После выхода из ждущего режима в каталоге /root обнаруживается файл hello.txt с содержимым hello, world!

no avatar

Автор темы
nok128
Сообщения: 47
Зарегистрирован: 08 окт 2021, 17:23
Решено: 2
Благодарил (а): 25 раз
Поблагодарили: 1 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#7

25 авг 2022, 01:30

Sova писал(а):
24 авг 2022, 09:08
Причина в том, что эти скрипты должны быть написаны определенным образом
Не соглашусь. Для примера скрипт следующего содержания:

Код: Выделить всё

#!/bin/bash
echo 'hello, world!' > ~/hello.txt
После выхода из ждущего режима в каталоге /root обнаруживается файл hello.txt с содержимым hello, world!.

Тот вариант, что Вы предложили, ожидаемо не сработал.

no avatar

Автор темы
nok128
Сообщения: 47
Зарегистрирован: 08 окт 2021, 17:23
Решено: 2
Благодарил (а): 25 раз
Поблагодарили: 1 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#8

25 авг 2022, 01:31

slant писал(а):
24 авг 2022, 11:39
Чтобы достучаться до чужих иксов, а для root иксы запущенные пользователем - чужие, и попытки изменить самого активного пользователя через sudo здесь никак не помогут, т.к. это будет НОВАЯ сессия другого пользователя, а не та где идет вывод на экран, нужно обращаться к dbus. В частности - есть dbus-launch. Там надо будет указать, к какой сессии цеплять запущенную программу.
Понял. Благодарю!

Аватара пользователя

yarichin
Сообщения: 371
Зарегистрирован: 13 июн 2021, 14:08
Решено: 2
Благодарил (а): 1 раз
Поблагодарили: 38 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#9

25 авг 2022, 06:59

nok128 писал(а):
25 авг 2022, 01:30
echo 'hello, world!' > ~/hello.txt
А если так ?
echo 'hello, world!' > /home/$USER/hello.txt

Аватара пользователя

rogoznik
Сообщения: 10438
Зарегистрирован: 27 июн 2017, 13:36
Решено: 135
Откуда: Нижний Тагил
Благодарил (а): 792 раза
Поблагодарили: 2051 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#10

25 авг 2022, 07:52

yarichin писал(а):
25 авг 2022, 06:59
А если так ?
Не сработает. Т.к. $USER вернет root
ИзображениеИзображение

Аватара пользователя

slant
Сообщения: 4859
Зарегистрирован: 21 июн 2017, 18:09
Решено: 111
Благодарил (а): 53 раза
Поблагодарили: 2177 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#11

25 авг 2022, 12:24

rogoznik писал(а):
25 авг 2022, 07:52
Не сработает. Т.к. $USER вернет root
..либо вообще ничего, т.к. это переменная пользовательского окружения (интерактивного сеанса), а при вызове из под systemd далеко не обязательно эти переменные устанавливаются. Тут проверять надо, т.к. это в разных дистрибутивах по разному сделано.

Аватара пользователя

rogoznik
Сообщения: 10438
Зарегистрирован: 27 июн 2017, 13:36
Решено: 135
Откуда: Нижний Тагил
Благодарил (а): 792 раза
Поблагодарили: 2051 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#12

25 авг 2022, 12:32

slant, думал об этом, но не стал озвучивать, т.к. уже достаточно того, что вернет не то что ожидалось автором сообщения
ИзображениеИзображение

no avatar

Автор темы
nok128
Сообщения: 47
Зарегистрирован: 08 окт 2021, 17:23
Решено: 2
Благодарил (а): 25 раз
Поблагодарили: 1 раз
Контактная информация:

Скрипт в /usr/lib/systemd/system-sleep не выполняется автоматически

#13

31 авг 2022, 01:57

yarichin писал(а):
25 авг 2022, 06:59
А если так ?
echo 'hello, world!' > /home/$USER/hello.txt
Так проблема не в том, как записать файл в домашнюю директорию пользователя. Это как раз сделать не проблема. Запуск такого скрипта я продемонстрировал, чтобы доказать, что для запуска какого-либо скрипта из каталога /user/lib/systemd/system-sleep/ не требуется, чтобы скрипт был написан по какому-то установленному шаблону, как написали выше:
Sova писал(а):
24 авг 2022, 09:08
Причина в том, что эти скрипты должны быть написаны определенным образом

Ответить

Вернуться в «Системные утилиты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя