私のラップトップには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
ことを理解しています。しかし、テストするためにupower
wheezy(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
答え2
sudoを使用すると、保留中の特定のコマンドセットをパスワードなしで使用できます。
/etc/sudoers.d/suspend
次の内容でファイルを作成します。
Cmnd_Alias SUSPEND = /usr/bin/systemctl suspend, /usr/sbin/rtcwake ^-m mem --date [0-9+][^ ]{0,30}$, /usr/sbin/rtcwake ^-m mem -[st] [0-9]{1,11}$
yourusername ALL=NOPASSWD: SUSPEND