使使用者(非root)暫停筆記型電腦的最簡單方法
我的筆記型電腦具有
suspend
以下功能:# cat /sys/power/state freeze mem
事實上,我可以以 root 身份掛起:
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中的curent verison0.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
anddbus
可能不是最簡單的設置。的實際目的是pm-utils
什麼upower
?這些實用程序僅適用於 root。但是作為 root,我已經可以使用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
網路嗎?
您可以編寫一個簡單的程序
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