在 Fedora 23 上,我想在笔记本电脑盖子打开时添加自定义操作。我已经安装acpid
并创建了三个文件:
/etc/acpi/events/lidconf
event=button/lid
action=/etc/acpi/actions/lid.sh "%e"
/etc/acpi/actions/lid.sh
#!/bin/bash
/home/user/Utility/lid.sh "$1"
/home/user/Utility/lid.sh
#!/bin/bash
DISPLAY=:0.0 su user -c "echo $1 >> /home/user/lid.txt"
当我跑步时,它运行得很好# /usr/sbin/acpid -f
,但当我跑步时,它就完全不起作用了# systemctl start acpid
。
我注意到ps
命令的结果有点不同。
作为根用户:
root 3796 0.0 0.0 4344 1704 ? Ss 22:24 0:00 /usr/sbin/acpid -f
使用系统:
root 3918 0.0 0.0 4344 1780 pts/0 S+ 22:25 0:00 /usr/sbin/acpid -f
为什么systemd启动后不起作用?
编辑:
我已启用日志acpid
,这就是我得到的:
received input layer event "button/lid LID open"
rule from /etc/acpi/events/lidconf matched
executing action "/etc/acpi/actions/lid.sh "button/lid LID open""
action exited with status 126
1 total rule matched
completed input layer event "button/lid LID open"
编辑2:ps 辅助-Z
系统:
system_u:system_r:apmd_t:s0 root 5177 0.1 0.0 4348 1756 ? Ss 22:52 0:00 /usr/sbin/acpid -f -l -d
以 root 身份运行:
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 5341 0.0 0.0 4344 1808 pts/0 S+ 22:56 0:00 /usr/sbin/acpid -f -l -d
答案1
好的。 SELinux 问题。当创建一些与现有服务相关的新内容时,您需要确保该服务能够适当地访问您的文件。文件中的日志表明它没有(除非作为 运行unconfined_t
)。
executing action "/etc/acpi/actions/lid.sh "button/lid LID open""
action exited with status 126
上述命令的执行失败(退出状态 126),这意味着源类型apmd_t
不具备执行您的文件的能力(该文件对我来说确实有未知的标签)。浏览政策,例如:
$ sesearch -A -s apmd_t -p execute /etc/selinux/targeted/policy/policy.*
我们可以注意到线
allow apmd_t apmd_exec_t : file { ioctl read getattr lock execute execute_no_trans entrypoint open }
允许执行apmd_exec_t
类型。将可执行文件的标签更改为该类型应该会让您前进:
# chcon -t apmd_exec_t /etc/acpi/actions/lid.sh
此外,您可能会在写入文件时遇到问题/home/user/lid.txt
,该文件可能被标记为home_t
或任何其他内容。您的服务可以写入例如apmd_tmp_t
:
$ sesearch -A -s apmd_t -p write /etc/selinux/targeted/policy/policy.*
allow apmd_t apmd_tmp_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;
因此,如果您将目标文件的上下文更改为apmd_tmp_t
,它应该适合您:
# chcon -t apmd_tmp_t /home/user/lid.txt
这个解决方案不是永久的。更正确的方法是定义您自己的涵盖这些文件和上下文的策略,或者将文件移动到默认上下文所在的位置。您应该能够从审计(ausearch -m AVC
和audit2allow
实用程序)中获得一些帮助。如果有什么不起作用,请告诉我。