我的笔记本电脑无法暂停。当笔记本电脑尝试暂停时,屏幕会短暂关闭,出现一些系统文本,然后屏幕再次关闭,然后屏幕再次打开,我处于锁定屏幕提示符下。
我试过:
- Unity 菜单上的暂停按钮
sudo pm-suspend
sudo acpitool -s
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
- 删除
/etc/pm/sleep.d
(如建议这里) sudo modprobe -r tpm_tis
- 修改 /proc/acpi/wakeup 将除电源按钮之外的所有内容切换为禁用。
- 放入
SUSPEND_MODULES="alx"
/etc/pm/config.d/modules - 编写一个脚本,强制显卡使用来自 chvt1 和 chvt7 的“kick”自行重新启动并将其放入
/etc/pm/sleep.d/20_custom-ehci_hcd
(@Sushantp606 的回答如下) - 以不同的方式尝试与#9 相同的事情(下面是@Sushantp606 答案的第三部分)
sudo s2ram
此内核不支持 KMS。机器未知。此机器可通过以下方式识别:sys_vendor =“Hewlett-Packard”sys_product =“HP Pavilion dv4 Notebook PC”sys_version =“F.24”bios_version =“F.24”
这些都不能解决问题。#9 稍微改变了行为(它在尝试入睡和醒来之间循环得更快)。
有什么建议我下一步该做什么吗?
答案1
此页可能有帮助: https://help.ubuntu.com/community/SwapFaq
休眠(挂起到磁盘) 休眠功能(挂起到磁盘)在关闭机器之前将 RAM 的内容写入交换分区。因此,您的交换分区应至少与 RAM 大小一样大。Ubuntu 中当前使用的休眠实现 swsusp 需要交换或挂起分区。它不能使用活动文件系统上的交换文件。
答案2
现在您几乎已经尝试了所有方法,值得进行有效而有效的解答。这个问题与显卡有关,它无法暂停,这就是为什么什么都不起作用。因此,我提到了两种解决方案,请逐一尝试。
通过以下方式在 /etc/pm/config.d 下创建文件模块 -
sudo gedit /etc/pm/config.d/modules
并将以下命令粘贴到其中 -
SUSPEND_MODULES="alx"
这将强制卸载 alx 模块并使用 suspend 重新加载,您的问题将由此解决,如果不行,请删除该行并转到下一部分。
这个肯定会起作用。因为它会强制显卡使用 chvt1 和 chvt7 的旧启动来重新启动。因此,让我们从 20_custom-ehci_hcd 开始,如下所示 -
gksudo gedit /etc/pm/sleep.d/20_custom-ehci_hcd
提供密码并将以下内容粘贴到 gedit 中
#!/bin/sh
VERSION=1.1
DEV_LIST=/tmp/usb-dev-list
DRIVERS_DIR=/sys/bus/pci/drivers
DRIVERS="ehci xhci" # ehci_hcd, xhci_hcd
HEX="[[:xdigit:]]"
MAX_BIND_ATTEMPTS=2
BIND_WAIT=0.1
unbindDev() {
echo -n > $DEV_LIST 2>/dev/null
for driver in $DRIVERS; do
DDIR=$DRIVERS_DIR/${driver}_hcd
for dev in `ls $DDIR 2>/dev/null | egrep "^$HEX+:$HEX+:$HEX"`; do
echo -n "$dev" > $DDIR/unbind
echo "$driver $dev" >> $DEV_LIST
done
#for bus in $EHCI_BUSES; do
echo -n $bus > /sys/bus/pci/drivers/ehci_hcd/unbind
# done
done
}
bindDev() {
if [ -s $DEV_LIST ]; then
while read driver dev; do
DDIR=$DRIVERS_DIR/${driver}_hcd
#for bus in $EHCI_BUSES; do
echo -n $bus > /sys/bus/pci/drivers/ehci_hcd/bind
#done
while [ $((MAX_BIND_ATTEMPTS)) -gt 0 ]; do
echo -n "$dev" > $DDIR/bind
if [ ! -L "$DDIR/$dev" ]; then
sleep $BIND_WAIT
else
break
fi
MAX_BIND_ATTEMPTS=$((MAX_BIND_ATTEMPTS-1))
done
done < $DEV_LIST
fi
rm $DEV_LIST 2>/dev/null
chvt 1
chvt 7
}
EHCI_BUSES="0000:00:1a.0 0000:00:1d.0"
case "$1" in
hibernate|suspend)
unbindDev;;
resume|thaw)
bindDev;;
esac
保存并通过以下方式提供权限 -
sudo chmod 755 /etc/pm/sleep.d/20_custom-ehci_hcd
重新启动-
sudo reboot
现在检查一下。它肯定会工作,但如果你的内核拒绝该脚本,那么用下面的代码替换整个代码-
#!/bin/sh
# File: "/etc/pm/sleep.d/20_custom-ehci_hcd".
TMPLIST=/tmp/ehci-dev-list
case "${1}" in
hibernate|suspend)
;;
resume|thaw)
chvt 1
chvt 7
;;
esac
你的暂停现在就可以工作了,这个答案是从 UbuntuForum 收集的。
最后的工作为此,你需要安装一个小应用程序 uswsusp,按照以下命令安装它-
sudo apt-get install uswsusp
安装完成后,通过以下方式检查是否暂停 -
sudo s2ram
你的电脑现在必须进入挂起状态。
至于冬眠——
sudo s2disk
现在,如果它有效,则按照以下步骤删除以前的默认脚本和命令,但在执行任何操作之前,请先进行备份-
sudo cp /usr/lib/hal/scripts/linux/hal-system-power-suspend-linux /usr/lib/hal/scripts/linux/hal-system-power-suspend-linux.bak
sudo cp /usr/lib/hal/scripts/linux/hal-system-power-hibernate-linux /usr/lib/hal/scripts/linux/hal-system-power-hibernate-linux.bak
现在让我们用以下方法替换旧文件和命令:
hal-system-power-suspend-linux
hal-system-power-hibernate-linux
然后
sudo nano /usr/lib/hal/scripts/linux/hal-system-power-suspend-linux
并将以下内容粘贴到其中 -
#!/bin/sh
/sbin/s2ram –force
对于休眠状态
sudo nano /usr/lib/hal/scripts/linux/hal-system-power-hibernate-linux
并将以下内容粘贴到其中 -
#!/bin/sh
/sbin/s2disk
希望这次能帮到你。
答案3
Ubuntu 社区帮助页面建议以下内容使用加密交换分区启用休眠功能:
准备:
您的计算机必须已设置加密。如果没有,请按照安装后加密第一的。
为你的交换分区想一个密码(或口令)。你可以使用与登录相同的密码 — 但如果其他人在你的计算机上有账户,就不要这么做!
找出哪个是您的加密交换分区。
swapon --summary
您应该看到类似以下内容的输出:
Filename Type Size Used Priority /dev/mapper/cryptswap1 partition 1998844 0 -1
如果你没有看到 cryptswap1,则该分区未加密或未按照 Ubuntu 标准加密,
现在,
sudo cryptsetup status cryptswap1
输出应该类似于
/dev/mapper/cryptswap1 is active and is in use. type: PLAIN cipher: aes-cbc-essiv:sha256 keysize: 256 bits device: /dev/sda1 offset: 0 sectors size: 3997696 sectors mode: read/write
记下设备示例中的意思是
/dev/sda1
—但你的可能是别的,例如/dev/sdb3
。备份。
如何设置休眠模式
关闭交换。
sudo swapoff /dev/mapper/cryptswap1
撤消现有的映射。
sudo cryptsetup luksClose /dev/mapper/cryptswap1
再次设置 swap,但这次使用您选择的密码。该命令将两次提示您输入密码。
/dev/sdXN
用以下设备替换准备点4。(以下命令在浏览器屏幕上换行,但它是您需要输入的单个命令。)sudo cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --verify-passphrase --key-size 256 /dev/sdXN
输出应该是:
WARNING! ======== This will overwrite data on /dev/sda1 irrevocably. Are you sure? (Type uppercase yes): Enter LUKS passphrase: Verify passphrase:
输入 YES 并根据提示输入两次密码。
重新映射交换。
/dev/sdXN
用准备点 4 中的设备替换。sudo cryptsetup luksOpen /dev/sdXN cryptswap1
将分区设置为交换分区。
sudo mkswap /dev/mapper/cryptswap1
打开交换(这样它就会重新开始工作)。
sudo swapon --all
检查它是否正常工作。
swapon --summary
您应该看到类似这样的输出(数字可能不同)。
Filename Type Size Used Priority /dev/mapper/cryptswap1 partition 1996796 0 -1
使用
gksudo
您最喜欢的编辑器(Ubuntu 的默认编辑器是gedit
),编辑文件/etc/crypttab
(例如运行gksudo gedit /etc/crypttab
)。通过在前面添加注释掉现有行#
(或直接删除该行),然后添加以下行。/dev/sdXN
用准备点 4 中的设备替换。cryptswap1 /dev/sdXN none luks
编辑文件
/usr/share/initramfs-tools/scripts/local-top/cryptroot
。搜索以下行(应该是第 288 行,但可能会随时间而变化):message "cryptsetup: unknown error setting up device mapping"
跳至下一个空白行(应为 291,在 FSTYPE='' 之前),然后插入以下行。用
/dev/sdXN
准备点 4 中的设备替换。/sbin/cryptsetup luksOpen /dev/sdXN cryptswap1
编辑文件
/etc/acpi/hibernate.sh
。在第一个空白行处插入以下行。DEVICE='/dev/mapper/cryptswap1'
编辑文件
/etc/initramfs-tools/conf.d/resume
。用以下行替换现有的 RESUME 行。RESUME=/dev/mapper/cryptswap1
记录这些变化。
sudo update-initramfs -u -k all
Ubuntu 禁用了菜单中的“休眠”选项。按如下方式恢复。创建(使用 gksudo 和您最喜欢的编辑器)文件:(
/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
例如运行gksudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
)用以下文本填充文件并保存。
[Re-enable hibernate by default] Identity=unix-user:* Action=org.freedesktop.upower.hibernate ResultActive=yes
重新启动机器。
答案4
检查你的内核,内核中有一个错误(https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1133835) 之前我认为是 3.11 导致了这个问题。你可以更新内核而不用更新系统如何在没有任何发行版升级的情况下将内核更新到最新的主线版本?