运行 xsession 开始或结束时的脚本

Run scripts on start or end of xsession

我正在尝试找到一种方法让脚本在 x 会话结束前 运行 处于睡眠状态,因为该脚本需要一个活动的 x 会话才能正确执行。将脚本存储在 /etc/pm/sleep.d 中不起作用(并返回与不存在的 x 会话相关的错误)。有什么想法可以将脚本放在哪里吗?

根据评论更新

king@death-star /etc/acpi $ cat 01_revert_kb_on_sleep 
#!/bin/bash
touch ~/Desktop/touchfile_my_script_acpi
case "" in
hibernate|suspend)
sh -c "/home/king/Desktop/Scripts/rotate_desktop normal; /home/king/Desktop/Scripts/misc/my_keyboard on" 2> ~/Desktop/revert_kb_error_log.txt ;;
#thaw|resume)

king@death-star /etc/acpi $ ls
total 1MB
drwxr-xr-x   3 root root 1MB Jun 11 23:36 .
drwxr-xr-x 163 root root 1MB Jun 11 23:41 ..
-rwxr-xr-x   1 root root 1MB Jun 11 23:36 01_revert_kb_on_sleep

king@death-star /etc/acpi $ ps -ef| grep acpid
root      1070     1  0 23:41 ?        00:00:00 acpid -c /etc/acpi/events -s /var/run/acpid.socket
king      3499  2574  0 23:52 pts/2    00:00:00 grep --colour=auto acpid

步骤 1.

一个。启用并启动 acpi 服务。

b。 运行 acpi_listen 命令并尝试通过各种方法让计算机进入睡眠状态(按下电源按钮、合上盖子等)

c。当您执行上述操作时,找出触发了哪些事件。就我而言,它们是:button/lid LID closebutton/sleep SBTN 00000080 00000000

第 2 步

一个。使用以下内容创建文件 /etc/acpi/events/my_events

event=(button/sleep SBTN|button/lid LID close)
action=/etc/acpi/my_script.sh

用您的事件替换 event= 行中的事件。

b。使用以下内容创建文件 /etc/acpi/my_script.sh

#!/bin/sh
/home/king/Desktop/Scripts/rotate_desktop normal
/home/king/Desktop/Scripts/misc/my_keyboard on

注意。您可能需要在脚本前添加 export DISPLAY=:0 才能访问您的 X 会话。

NB2:您的脚本将 运行 使用 root 用户凭据。要 运行 使用您的用户凭据,您可能需要执行以下操作:

sudo -u king /home/king/Desktop/Scripts/rotate_desktop normal
sudo -u king /home/king/Desktop/Scripts/misc/my_keyboard on

c。使文件 /etc/acpi/my_script.sh 可执行:

chmod +x /etc/acpi/my_script.sh

d。重新启动 acpi 服务。

第 3 步。分享和享受。