web-dev-qa-db-ja.com

電源ボタンのシャットダウンアクションを変更する方法

私はサーバーとしてMageiaver 4 Linuxを使用していますが、Xを起動せず、通常の操作中にユーザーがログインすることもありません。このPCには、他のデバイスを測定および制御するための特別なカードがあります。このカードには独自のSH4Linuxが搭載されており、PCをシャットダウンする前に、まずシャットダウンする必要があります。

カードベンダーから提供された一連のコマンドがあり、それらは正しく機能します。カードをシャットダウンするには、/usr/sbin/io_card stopを実行し、適切なカードシャットダウンを待ってから、「通常の」PCシャットダウンを実行する必要があります。

特別なシャットダウンスクリプトを作成しましたが、正しく機能します。しかし、問題は、PCの「電源」ボタンを押すと、スクリプトの代わりに「通常の」PCシャットダウンが実行されることです。

/ etc/acpi/events/powerおよびsystemdスクリプトを変更して、独自のシャットダウンスクリプトを含めようとしましたが、機能しません。現時点では、/ etc/acpi/events/powerファイルにはエントリのみが含まれています。

action=/home/serwer/Pobrane/shut

ここで、「shut」はシャットダウンスクリプトであり、手動で実行すると正常に機能します。では、「電源」ボタンを押すことに関連するデフォルトの電源オフアクションを変更するにはどうすればよいですか?

2
mackowiakp

これがMageiaで機能することを保証することはできませんが、これが私のDebianで同様の機能を実現する方法です。

スクリプトがあります(私のマシンでは、それは/etc/acpi/powerbtn-acpi-support.sh)電源ボタンが押されたときにデフォルトで実行されます。そのスクリプトを編集して、次のセクションを見つけてください。

if [ -x /etc/acpi/powerbtn.sh ] ; then
    # Compatibility with old config script from acpid package
    /etc/acpi/powerbtn.sh
Elif [ -x /etc/acpi/powerbtn.sh.dpkg-bak ] ; then
        # Compatibility with old config script from acpid package
    # which is still around because it was changed by the admin
        /etc/acpi/powerbtn.sh.dpkg-bak
else
    # Normal handling.
    /sbin/shutdown -h -P now "Power button pressed"

fi

変化する /sbin/shutdown -h -P now "Power button pressed"代わりにスクリプトを指すようにするには、ファイルを保存します。これで、電源ボタンを押すたびにスクリプトが起動するはずです。

1
terdon

Polkitバージョン> = 0.106の場合、ユーザーがシャットダウンボタンを押すとスクリプトを呼び出すシャットダウンアクションにリンクされたpolkitルールファイルを設定できます。

Polkitのルールは次のようになります。

polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.consolekit.system.stop" ||
    action.id == "org.freedesktop.login1.power-off" ||
    action.id == "org.freedesktop.login1.power-off-multiple-sessions" || 
    action.id == "org.xfce.session.xfsm-shutdown-helper")  
{
        polkit.spawn(["/home/serwer/Pobrane/shut", subject.user]);        
        return polkit.Result.YES;
}
});

このルールを追加するには、これを.rules拡張子の付いたファイルにコピーし、ファイルを/usr/share/polkit-1/rules.d/にコピーするだけです。

しかし、これがグラフィカルインターフェイスなしで実行されるかどうかはわかりません

0
AlmuHS