如何通过命令行暂停/休眠电脑?

如何在命令行中挂起或休眠我的笔记本电脑,而无需安装额外的软件?

5对于Ubuntu 16.04,请参考这个问题:http://askubuntu.com/questions/777178/suspend-command-in-ubuntu-16-04以及它的答案`systemctl suspend`。 - CJlano
14个回答

传统上,Ubuntu支持一种相当粗糙的暂停和休眠方法。这两种方法都无法很好地与其他应用程序集成,有时甚至在某些机器上无法正常工作。这种新方法不需要root权限,并通知所有监听电源事件的应用程序。

Systemd方法

从Ubuntu 16.04开始,必须使用systemctl命令(参见Ubuntu 16.04中的暂停命令
systemctl suspend

并且

systemctl hibernate

新方法(已过时)

自Ubuntu 16.04起已过时;请使用上述的systemctl代替。

在这个页面上查看Adam Paetznick关于使用dbus的答案链接。理想情况下,您可以创建一个~/bin/suspend的快捷方式/脚本,以便轻松使用此操作。

对于通过ssh使用,您应该根据Peter V. Mørch的说明修改policykit规则

旧方法

根据Ubuntu论坛的说法,您可以使用以下命令:

pmi action suspend

并且

pmi action hibernate

这需要您安装powermanagement-interface软件包(未经测试)。
sudo apt-get install powermanagement-interface 我还发现命令sudo pm-suspend和sudo pm-hibernate在我的上网本上可行。

26pm-suspend和pm-hibernate对我来说很好用,而且很简单。需要使用sudo权限,但这没关系。 (之前找到了pmi的方法,但安装一个软件包来使用挂起功能真的不太好...) - user1034
在描述中添加了sudo - txwikinger
1请注意,您需要运行apt-get install powermanagement-interface来安装pmi。 - nealmcb
1只有在11.10下午才能使用pm-*,同时还需要添加powermanagament-interface。 - Omegafil
1不适用于我的 Ubuntu 12.10。在执行 apt-get install powermanagement-interface 后仍然无法工作。 - somethis
1新方法现在已经失效,请参考http://unix.stackexchange.com/questions/153099/debian-jessie-cannot-suspend-anymore。 - ijk
sudo pm-hibernate 对于使SATA驱动器真正的热插拔非常棒!:) - Avio
sudo pm-suspend的功能很好,但是在唤醒后不会要求输入密码。我该怎么办? - Jaysheel Utekar
1以上方法都无效,即使使用sudo权限也不行。无论是pm-hibernatepmi action hibernate,还是dbus相关操作都没用。我感到很沮丧。 - phil294
我使用的是16.04版本,systemctl suspendpm-suspend都可以使用;两者的区别在于后者不会先锁定屏幕,并需要使用sudo来运行。 - Alan Plum
在Ubuntu 18.04上,我需要使用-i标志来执行systemctl suspend命令。 - Eric
1挂起一小时后:sleep 3600 && systemctl suspend - Nils
1在Ubuntu 20.04上,systemctl suspend对我有效,尽管它让我输入密码两次。 - Ryan
systemctl hibernate 对我来说不起作用。我在联想-Z50-70上使用的是Ubuntu 18.04.5 LTS。 - Abdollah
无法在我的21.10操作系统上运行。即使是以root权限,也无法在本地执行:Unit suspend.target is masked. - Bram
在我的Ubuntu 18.04.1 LTS系统上,使用systemctl hibernate成功了。但是,在休眠过程中,屏幕似乎冻结了,并且在打开电脑时风扇的噪音异常大,持续了至少10秒钟... 我不确定原因是什么。 - M.K
无论是systemctl suspend还是systemctl hibernate在我的Ubuntu 14.04 LTS上都运行良好。 - Ham
为什么在使用systemctl方法时,标题是“Systemd Method”?它们并不相同。尽管如此,保留该标题以便搜索结果还是有好处的。 - questionto42
1这个答案在第三部分有些混乱:新的过时部分。新方法是过时的吗? - ctrl-alt-delor
我必须使用 sudo,比如:sudo systemctl suspend 才能让它起作用。 - undefined
你知道sudo systemctl suspend和我的sudo true && gnome-screensaver-command -l && sudo pm-suspend命令有什么区别吗?它们有你知道的任何不同的副作用或细微差别吗? - undefined

使用dbus是与gnome友好的方式。
dbus-send --system --print-reply \
    --dest="org.freedesktop.UPower" \
    /org/freedesktop/UPower \
    org.freedesktop.UPower.Suspend

这个命令有两个优点,相对于 pm-suspend

  1. 如果你在 Gnome 中选择了该选项,它会在恢复后锁定屏幕。

  2. 它不需要 root 权限,所以可以很容易地将其添加为键盘快捷键。

如评论中提到的,将最后一行中的 Suspend 替换为 Hibernate 将创建一个休眠命令:

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

如果休眠时出现“Error org.freedesktop.UPower.GeneralError: not authorized”错误,可能是因为您的用户没有权限进行休眠。请编辑或创建“/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla”文件,并添加以下内容:(source)
[Re-enable hibernate by default]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

这是在UbuntuGnome 14.04上进行的测试。
注意:这基本上与qbi的答案相同,但更新以适用于较新版本的Ubuntu,并包括休眠功能。

18你的答案真的应该排在第一位。这是一种非根、无需安装软件包的GNOME方式去做。很赞! - turbo
1那是正确的答案!:D - dadexix86
1据我所知,还有另一个优点:它允许其他程序检测到挂起/恢复事件,并做出相应的操作(例如,即时通讯软件恢复与服务器的网络连接)。 - Petr
虽然这实际上是正确的做法(商标),但SSH用户应该注意:http://askubuntu.com/questions/21586/how-can-i-configure-dbus-to-allow-ssh-user-to-suspend-server - airtonix
12要“休眠”,您只需将最后一行替换为org.freedesktop.UPower.Hibernate - Sheharyar
这个方法在KDE下也适用,唯一的区别是它不会锁定屏幕。你可以使用qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock命令来实现屏幕锁定。(来源:http://askubuntu.com/questions/61339/what-is-the-screen-locking-mechanism-under-kde/119299#119299) - Mechanical snail
在13.10版本下,我收到了“Error org.freedesktop.UPower.GeneralError: not authorized”的错误提示。 - Patryk
2在我的13.10版本上,它是可以工作的。然而,在恢复后屏幕并没有被锁定,尽管在"安全与隐私"中,"从暂停唤醒时需要输入密码"已经被激活了。 - andreas-h
1这可能对gnome友好,但我仍然可以告诉(即wifi/以太网通知和没有图形故障),它与我通过Unity GUI或在我的笔记本电脑上通过硬件挂起按钮执行时的清晰结果不同。 - sinekonata
6对我没用(Gnome 3.12,Ubuntu 14.04)。根据https://bugs.launchpad.net/ubuntu/+source/gnome-power-manager/+bug/554899,似乎已经移除了[UPower.Suspend]接口。 - Gui Ambros
7暂停接口已移至logind;http://askubuntu.com/questions/652978/ - Khurshid Alam
这在14.04版本的Trusty下对我有效,但是我刚刚升级到15.10版本的Wily后,它不再起作用了。 - Gringo Suave
首先,屏幕锁定没有完成,其次,在每次休眠恢复后,WiFi 大约每隔一分钟就会出现延迟。对我来说完全无法使用。 - phil294
1请评估一下这种友好的小人方法是否被“systemd的新命令”所取代,正如(https://askubuntu.com/questions/777178/suspend-command-in-ubuntu-16-04)中所示。 - Tfb9
1这在Gnome+i3wm的18.04版本下对我没有起作用。 - NullVoxPopuli
错误 org.freedesktop.DBus.Error.UnknownMethod: 没有名为“Suspend”的方法。KDE 在 Debian GNU/Linux 11 (bullseye) 上。 - ctrl-alt-delor

如果你想让你的电脑在一个小时后暂停,因为你想在床上听你最喜欢的广播电台入睡,打开终端并输入以下命令:
sudo bash -c "sleep 1h; pm-suspend"

你的电脑将在1小时内进入睡眠状态。当你醒来时,它将保留你打开的图片和所有内容。

你可以用你想要的方式替换1h:使用h表示小时,m表示分钟,s表示秒,d表示天。

晚安!

法语

如果你只是希望你的计算机在一个小时后进入睡眠状态,因为你想在听你最喜欢的广播节目时入睡,打开终端并输入:

sudo bash -c "sleep 1h; pm-suspend"

你的电脑将在一小时后进入休眠状态。当你醒来时,它会保留你打开的应用程序。
你可以用任何你想要的东西来替换 "1h":用 "h" 表示小时,用 "m" 表示分钟,用 "s" 表示秒,用 "d" 表示天。
晚安!
如果你想要在一小时后暂停你的计算机,因为你想在睡觉时听你最喜欢的广播电台,只需打开终端并输入以下命令:
sudo bash -c "sleep 1h; pm-suspend"

你的电脑将在1小时后进入睡眠状态。当你醒来时,你的图片和所有东西都将保持打开状态。
你可以用任何你想要的替换1h:使用h表示小时,m表示分钟,s表示秒,d表示天。
晚安!

这正是我正在寻找的用例!据我所知,pm-*可以在没有超级用户权限的情况下运行。 - ruX
1显然,这个解决方案需要pm-utils套件:apt-get install -y pm-utils :-) - Steve Baroti

获取休眠功能的方法:
sudo pm-hibernate

获取暂停功能:
sudo pm-suspend

"sudo pm-suspend" 在 Mint 13 Mate 上不起作用 :( - rsjethani
是的,我觉得那个软件包没有安装。在Synaptic中寻找这些软件包。 - Raja G
软件包已安装,我认为'mate-power-manager'正在干扰它。 - rsjethani
完美的,谢谢。pm-suspend正是我想要的,无需安装powermanagement-interface包中的所有X相关垃圾信息。使用pm-*所需的全部仅是pm-utils包。 - Maks
2这种方法的缺点是,如果你正在使用图形用户界面(GUI),pm-suspend将不会阻止你的会话,这可能存在安全隐患。 - Raúl Salinas-Monteagudo
1它也适用于Ubuntu 15.10。 - Searene
1适用于14.04 LTS版本的工作。 - Vitaly Zdanevich
也适用于20.04版本 :) - Bashar Al-Abdulhadi

你可以使用文件/sys/power/state来实现这个。首先找出支持的状态:
user@linux:_> cat /sys/power/state
standby mem disk

root@linux:~> echo -n mem > /sys/power/state  # suspend to ram
root@linux:~> echo -n disk > /sys/power/state  # suspend to disk

或者通过dbus:

# 挂起 dbus-send --session --dest=org.gnome.PowerManager \ --type=method_call --print-reply --reply-timeout=2000 \ /org/gnome/PowerManager org.gnome.PowerManager.Suspend
# 休眠 dbus-send --session --dest=org.gnome.PowerManager \ --type=method_call --print-reply --reply-timeout=2000 \ /org/gnome/PowerManager org.gnome.PowerManager.Hibernate

根据launchpad上的记录,上述接口已被移除。因此在Ubuntu中将无法使用。


首先的想法给了我一个错误信息:"bash: echo: write error: Invalid argument"。Dbus的想法输出了一个错误信息:"Error org.freedesktop.DBus.Error.UnknownMethod: Method "Suspend" with signature "" on interface "org.gnome.PowerManager" doesn't exist"。 - user1034
我对/sys/power/state这个东西添加了一个简短的解释。此外,Ubuntu中已经移除了dbus方法,所以它将不再起作用。 - qbi
$ sudo echo -n mem > /sys/power/state - bash: /sys/power/state: 权限被拒绝 - Hubro
5这个方法很好用。对于在使用sudo时遇到问题的人来说,"pipe to file",也就是">"符号在你当前的shell中运行,所以它不会获得超级用户权限,而你的echo命令却可以。你需要先使用sudo -i,或者像这样使用sudo tee来进行管道操作:echo mem | sudo tee /sys/power/state - RandomInsano

自从15.04版本开始,systemD成为了标准的初始化系统,因此有一个新的命令需要使用:
systemctl suspend

我正在使用Xubuntu 15.04。命令systemctl suspend确实会使计算机进入睡眠状态,但它并不会导致屏幕被锁定,尽管我已经在设置->电源管理器->安全中勾选了“系统进入睡眠时锁定屏幕”的复选框。有人知道为什么吗? - Teemu Leisti
我已经升级到Xubuntu 16.04。命令systemctl suspend仍然会使计算机进入睡眠状态。现在,只有当在设置->电源管理器->安全中勾选了“系统进入睡眠时锁定屏幕”复选框时,它还会导致屏幕被锁定。 - Teemu Leisti

要从命令行(或键盘快捷方式)挂起系统(14.04),请使用以下命令:
dbus-send --system --print-reply --dest="org.freedesktop.login1" /org/freedesktop/login1 org.freedesktop.login1.Manager.Suspend boolean:true

我通过尝试gdbus来发现这一点,它可以列出可用的接口:
要列出总线上可用的服务:
dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames

找到方法的步骤:
gdbus introspect --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1 --recurse

Adam Paetznick的dbus-send答案在我lucid上并没有像声称的那样起作用;即使gnome-power-manager设置为在唤醒时锁定屏幕,机器仍然会解锁。 我希望在唤醒时屏幕能够被锁定,发现以下方法可以实现:
$ gnome-screensaver-command --lock && pmi action hibernate

我想这与gnome配置无关,但我还没有测试过。

很好。或者根据情况使用xscreensaver-command --lock - treat your mods well

新界面

...适用于15.10 Wily,可能也适用于Utopic和Vivid。

dbus-send --print-reply --system                         \
    --dest=org.freedesktop.login1                        \
    /org/freedesktop/login1                              \
    org.freedesktop.login1.Manager.Suspend boolean:true

帮助人们的是,这不需要sudo,不像pm-suspend命令。

我的XPS 13 9350配备了Debian/Gnome系统,在关闭盖子时出现了暂停/休眠的问题。在运行了这个命令(以及休眠的等效命令)之后,它成功地进入了暂停(和休眠)状态,现在关闭和打开盖子都按预期工作了! - Victor Schröder

这是如何通过ssh将远程机器置于待机状态的方法:
ssh -t 192.168.1.4 'sudo nohup &>/dev/null bash -c "(sleep 1; echo -n mem >/sys/power/state) &"'
x@192.168.1.4的密码: 
[x]的密码: 
与192.168.1.4的连接已关闭。
/sys/power/state在Ubuntu 13.10中有效。pmi会出现Dbus错误。