Fedora 23では、ラップトップの蓋が開いたときにカスタムアクションを追加したいと思いました。 acpid
をインストールし、次の3つのファイルを作成しました。
/ 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
Systemdの使用:
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"
Edit2: ps aux -Z
Systemd:
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
oK。 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
ユーティリティ)からいくつかの助けを得ることができるはずです。何かがうまくいかない場合は、私に知らせてください。