当我按下电源按钮时,我想运行一个脚本。为了便于理解,假设是 file.sh。因此,当我按下电源按钮时,我想运行 file.sh,而且只运行 file.sh。
我发现的大多数解决方案都涉及编辑/etc/acpi/powerbtn.sh
,但该文件在我的系统中不存在。(我正在运行 Ubuntu 19.04)我尝试创建它并用标准内容填充它,但没有成功。我也尝试用 监听按键acpi_listen
,但按下按键时什么也没发生,所以我不知道是我做错了还是什么。我尝试使用xev
,它确实拾取了按键事件,但当我按下电源按钮时什么也没有记录。
有人知道如何做到这一点,或者我做错了什么?
PS 我应该提一下,我更喜欢可以在命令行上完成的解决方案,最好是不需要任何第三方软件的解决方案。谢谢。
类似的问题,但没有解决方案:
https://askubuntu.com/questions/473693/run-a-script-when-power-button-is-pushed
基本上寻找他们在这里所做的事情的 Linux 等效版本:
https://stackoverflow.com/questions/12434863/executing-a-batch-script-on-windows-shutdown
编辑:这是我从系统日志中获得的信息:
Feb 9 13:01:01 joe-Aspire-E5-576G gnome-session-binary[1624]: Entering running state
这是我的事件文件:
event=button/power action=/home/ragnvaldr/Desktop/test/sc.sh
`
答案1
您的问题已在例子部分man acpid
。我会适应您的需求。
- 创建
root
一个名为的文件/etc/acpi/events/power
,内容如下:
event=button/power
action=/usr/bin/logger "ACPI_POWER_BTTN_TEST: %e"
然后运行
service acpid restart
。syslog
像这样尾随文件/usr/bin/tail -f /var/log/syslog
按下电源按钮即可查看测试消息
syslog
。适当更改文件
action=
中的行power
以指向您的自定义脚本。
故障排除:
重新启动后,使用命令
acpid
检查是否真的在运行。acpid
pidof acpid
你的脚本是否按预期工作?在脚本中使用命令的完整路径名。不是假设 的任意值
PATH
。在上面的例子中,我使用命令
/usr/bin/logger
作为一种简单的方法来在某处记录某些内容(/var/log/syslog
)。或者,您可以将某些内容写入下面的文件/tmp
以进行测试。据@nathan 报告,某些窗口管理器可能还会捕获电源按钮。确保
/etc/systemd/logind.conf
有行可能会有所帮助HandlePowerKey=ignore
,这样systemd-logind.service
就会忽略电源按钮。
答案2
基本上寻找他们在这里所做的事情的 Linux 等效版本:https://stackoverflow.com/questions/12434863/executing-a-batch-script-on-windows-shutdown
如果这是您想要做的,那么您可以在系统关闭(或休眠或进入睡眠状态)时使用systemd
基础设施。