root以外のユーザーがラップトップを一時停止できるようにする最も簡単な方法

root以外のユーザーがラップトップを一時停止できるようにする最も簡単な方法

私のラップトップにはsuspend次の機能があります。

# cat /sys/power/state
freeze mem

実際には、ルートとしてぶら下げることができます。

echo -n mem > /sys/power/state

これは素晴らしい作品です。しかし、root以外のユーザーが一時停止できるようにする最小限の方法は何ですか?

私はDebian Busterを使用していますが、systemdインストールしていません(既存のsysvinitを使用しています)。そして私はudevデーモンも実行しません(私は「カーネルスペース」udevを使用しています)。

最小限の追加パッケージでユーザーサスペンド機能を実装したいと思います。

以前のDebianバージョン(Wheezy)では、次のものをインストールできます。

  • pm-utils
  • 優れたパワー

次に dbus を介してコマンドを実行します。私の考えには次のようになります。

dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

もう動作しません。今、私は状況がupower変わり、Debianの現在のバージョンがうまくいかない0.99.10ことを理解しています。しかし、テストするためにupowerwheezy(0.9.17)でインストールしましたが、それも機能しませんでした。コマンドdbus-sendのため、次のエラーが発生しました。

Error org.freedesktop.DBus.Error.Spawn.ChildExited: Launch helper exited with unknown return code 127

しかし、とにかく、およびを使用するのはpm-utilsおそらくupower最もdbus簡単な設定ではありません。pm-utilsの実際の目的は何ですかupower?このユーティリティはルートでのみ機能します。しかし、ルートとしてすでにecho -n mem > /sys/power/state。これらのユーティリティはどのような追加の利点をもたらしますか?

pm-utilsがさまざまなスクリプトをインストールすることを確認しました。発行以外に必要な手順はありますかecho -n mem > /sys/power/state

ユーザーとしてこれをどのように達成できますか?

インスタンスと同じビットをC作成しmem/sys/power/state設定する簡単なプログラムを作成することもできます。s/usr/bin/passwd

これが実現可能でクリーンなソリューションですか?それとも、これが「汚れた」解決策のように見えますか?より良い解決策はありますか?

mem私に手紙を送ること以外に何をするべきですか/sys/power/state

ifdownインターネット接続が必要ですかifup

ベストアンサー1

以下で簡単なプログラムを書くことができますc

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {

    FILE *f;

        f = fopen("/sys/power/state", "w");

    if(f == NULL) {
        printf("Error opening file: /sys/power/state\n");   
        exit(1);             
    }

    fprintf(f,"%s","mem");

    fclose(f);

}

これをコンパイルしてバイナリをにコピーします/usr/local/bin/pm-suspend。 setuid ビットを設定します。

chmod u+s pm-suspend

おすすめ記事