systemd唤醒后如何运行用户脚本?


10

当我的debian jessie桌面盒从睡眠中唤醒时(通过新的闪亮的systemd),我的鼠标设置恢复为默认设置,重置了自定义设置

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

askubuntu.com/a/661747在与您不同的情况下,它可以帮助我。也许对您有用。
太阳熊

Answers:


5

该答案基于askubuntu.com/a/661747/394818(也已在@ sun-bear 的评论中提及),askubuntu.com / q / 616272/394818superuser.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

如果仅在从特定类型的睡眠中唤醒后才应执行该服务,则删除挂起/休眠/混合。如果服务需要由特定用户运行,请取消注释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不是一个神奇的目标,它会在睡眠时自动激活。这只是使系统进入睡眠状态的常规目标–因此,“用户”实例当然不会具有等效对象。(不幸的是,“用户”实例当前无法依赖系统范围的服务。)


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


1
这对我不起作用。您可以链接到一些说明其工作原理的文档吗?
瑞安·吕

这对我也不起作用。该脚本运行的上下文非常有限,并且不会以系统进入睡眠状态时处于活动状态的用户身份运行。因此,它无法访问显示器(此处不包括大多数桌面实用程序),已登录用户的信息/变量或与当前已登录用户会话相关的任何其他信息。我需要一个脚本来作为在桌面会话的上下文中登录的用户。我仍然没有找到任何可以执行此操作的操作,但是如果执行此操作,我将在此处进行更新。
theferrit32 '18

@ theferrit32,您应该可以从脚本内使用“ su”命令更改为首选用户。
borizzzzz

1

打开这个文件:

须藤vim / lib / systemd / system-sleep / hdparm

内容:

#!/ bin / sh

案例$ 1)
    /usr/lib/pm-utils/power.d/95hdparm-apm恢复
    ##粘贴命令以运行脚本
    ;; 埃萨克

您的命令将以管理员权限执行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.