Как запустить скрипт пользователя после пробуждения systemd?

10

Когда мой рабочий стол debian jessie выходит из спящего режима (через новую блестящую систему), мои настройки мыши возвращаются к значениям по умолчанию, сбросив мои настройки

xinput set-prop 12 'Device Accel Constant Deceleration' 2.5

который запускается при входе в систему

Как я могу запустить произвольный пользовательский скрипт при пробуждении? (предположим, что пользователь является владельцем сеанса X)

Насколько я могу вспомнить, следующее - единственная настройка, которую я сделал для systemdнастройки (да, я знаю, что это совершенно неправильно, потому что она не работает для произвольных пользователей, но я еще не разобрался, как это сделать. ... это несколько связано)

Кроме того, как я могу запустить произвольный сценарий пользователя перед пробуждением, как пользователь, который в настоящее время использует экран X?

cat /etc/systemd/system/i3lock.service

#systemctl enable i3lock.service

[Unit]
Description=i3lock
Before=sleep.target

[Service]
User=fommil
Type=forking
Environment=DISPLAY=:0
ExecStart=/usr/bin/i3lock -c 000000

[Install]
WantedBy=sleep.target
fommil
источник
askubuntu.com/a/661747 Это поможет мне в моем случае, который отличается от вашего. Может быть, это может быть полезно для вас.
Солнечный медведь

Ответы:

5

Этот ответ основан на askubuntu.com/a/661747/394818 (как также указано в комментарии @ sun-bear), askubuntu.com/q/616272/394818 и superuser.com/a/1269158/585953 .

Использование системного сервиса:

Создайте файл /etc/systemd/system/my_user_script.service:

[Unit]
Description=Run my_user_script
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target


[Service]
ExecStart=/path/to/my_user_script
#User=my_user_name
#Environment=DISPLAY=:0

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

Удалите Suspend / Hibernate / Hybrid в случае, если служба должна выполняться только после пробуждения от определенного типа сна. В случае , если служба должна быть запущена пользователем конкретного, раскомментируйте User=и Environment=линию и заменить соответствующее имя пользователя.

Установите служебный файл с:

sudo systemctl enable my_user_script

Использование пользовательского сервиса не будет работать:

Чтобы избежать установки жестко закодированного имени пользователя User=, можно создать точно такой же файл службы .local/share/systemd/user/my_user_script.serviceи активировать его с помощью

systemctl --user enable my_user_script

Однако это не сработает. @grawity более подробно объясняет на unix.stackexchange.com/a/174837/163108, почему это так:

sleep.targetспецифично для системных сервисов. Причина в том, что sleep.targetэто не волшебная цель, которая автоматически активируется перед сном. Это просто обычная цель, которая переводит систему в спящий режим, поэтому у «пользовательских» экземпляров, конечно, не будет эквивалента. (И, к сожалению, экземпляры 'user' в настоящее время не могут зависеть от общесистемных сервисов.)

Давидович
источник
3

Я создал файл в / lib / systemd / system-sleep .

#!/bin/sh
case $1 in
  post)
    /bin/runme
  ;;
esac

Пост называется по пробуждению.

РЕДАКТИРОВАТЬ:

https://www.freedesktop.org/software/systemd/man/systemd-suspend.service.html

gam3
источник
1
Это не сработало для меня. Можете ли вы дать ссылку на документацию, объясняющую, как это должно работать?
Райан Лю
Это не работает для меня тоже. Контекст, в котором работает этот сценарий, крайне ограничен и не запускается как пользователь, который был активен, когда система перешла в спящий режим. Таким образом, он не получает доступ к дисплею (который исключает большинство настольных утилит здесь), информацию / переменные для пользователя, который вошел в систему, или что-либо еще, связанное с сеансом пользователя, который в настоящее время вошел в систему. Мне нужен скрипт для запуска как пользователь, вошедший в систему в контексте сеанса рабочего стола. Я все еще не нашел ничего, чтобы сделать это, но я обновлю здесь, если я сделаю.
theferrit32
@ theferrit32 вы сможете сменить предпочитаемого пользователя с помощью команды 'su' из вашего скрипта.
borizzzzz
1

Откройте этот файл:

sudo vim / lib / systemd / system-sleep / hdparm

Содержание:

#! / Bin / ш

дело $ 1 в посте)
    /usr/lib/pm-utils/power.d/95hdparm-apm резюме
    ## Вставьте команду, чтобы запустить скрипт
    ;; ESAC

Ваша команда будет выполнена с правами администратора .

Абхишек Сингх
источник