我想在我的电脑睡眠或唤醒之前启动/停止一个进程。
我不知道该怎么做。
命令是:
睡觉前:killall libinput-debug-events
醒来后:libinput-gestures-setup start
答案1
/lib/systemd/system-sleep
方法 1 - 使用目录内的脚本
/lib/systemd/system-sleep
创建一个如下所示的脚本:
#!/bin/sh
case $1/$2 in
pre/*)
echo "Going to $2..."
killall libinput-debug-events
;;
post/*)
echo "Waking up from $2..."
# Place your post suspend (resume) commands here, or `exit 0` if no post suspend action required
sleep 2
libinput-gestures-setup start
;;
esac
为了确保脚本使用正确的权限创建,请复制现有脚本然后编辑它:
cd /lib/systemd/system-sleep
sudo cp wpasupplicant tv_refresh
gksu gedit tv_refresh
暂停sleep 2
对您来说可能是不必要的,但对于我的设置来说,将笔记本电脑的声音恢复到 HDMI 电视是必要的。
这些echo
行是可选的,但很方便,因为它们会显示在 中/var/log/syslog
。
方法 2 - 使用systemd
服务root
或user
从: (archlinux - 电源管理)我们得到了有关根据root
权力或user
权力暂停和恢复的详细说明。
暂停/恢复服务文件
可以将服务文件挂接到 suspend.target、hibernate.target 和 sleep.target 中,以在挂起/休眠之前或之后执行操作。应为用户操作和 root/系统操作创建单独的文件。启用 suspend@user 和 resume@user 服务,让它们在启动时启动。示例:
暂停
/etc/systemd/system/[email protected]
[Unit]
Description=User suspend actions
Before=sleep.target
[Service]
User=%I
Type=simple
Environment=DISPLAY=:0
ExecStartPre= -/usr/bin/pkill -u %u unison ; /usr/local/bin/music.sh stop ; /usr/bin/mysql -e 'slave stop'
ExecStart=/usr/bin/sflock
ExecStartPost=/usr/bin/sleep 1
[Install]
WantedBy=sleep.target
恢复
/etc/systemd/system/[email protected]
[Unit]
Description=User resume actions
After=suspend.target
[Service]
User=%I
Type=simple
ExecStartPre=/usr/local/bin/ssh-connect.sh
ExecStart=/usr/bin/mysql -e 'slave start'
[Install]
WantedBy=suspend.target