the*_*ish 4 suspend lenovo power-management
我在我的 Lenovo G50 上运行 Ubuntu 16.04 LTS,一切正常,只是我无法关闭笔记本电脑的盖子而无需重新启动。当我合上盖子时(或者如果我跑了pm-suspend),我的笔记本电脑屏幕会变暗几秒钟,然后重新打开。
问题是当我尝试恢复它时,我的笔记本电脑基本上变成了土豆......出于某种原因,网络管理器(wifi和以太网)无论如何都不起作用,终端变得非常慢,我无法运行使用任何命令,sudo因为它会永远挂在那里。
我试过更改logind.conf文件,我试过更改Power System Settings,我已经更新了我的英特尔显卡驱动程序,我已经安装了诸如pmi或 之类的工具laptop-mode......我的想法不多了,但我会做任何事情来解决这个问题.
如果有任何系统信息可能有用,请告诉我,我会将其添加到帖子中。
以 root 身份在文本编辑器中打开 /etc/systemd/logind.conf 文件,例如,
sudo nano /etc/systemd/logind.conf
Run Code Online (Sandbox Code Playgroud)
改变这一行:
#HandleLidSwitch=ignore
Run Code Online (Sandbox Code Playgroud)
到这一行:
HandleLidSwitch=suspend
Run Code Online (Sandbox Code Playgroud)
确保将其注释掉。
或者,您也可以添加这一行,但我更喜欢第一行:
HandleLidSwitchDocked=suspend
Run Code Online (Sandbox Code Playgroud)
然后运行:
sudo service systemd-logind restart
Run Code Online (Sandbox Code Playgroud)
或者重启。
dmesg|less
Run Code Online (Sandbox Code Playgroud)
通常有一个条目是什么应用程序导致暂停失败:
[32467.560058] Freezing of tasks failed after 20.01 seconds (1 tasks refusing to freeze, wq_busy=0):
[32467.560115] plasma-desktop D 0000000000000000 0 2065 1 0x00800004
Run Code Online (Sandbox Code Playgroud)
sudo apt-get install uswsusp
Run Code Online (Sandbox Code Playgroud)
现在测试暂停:
sudo s2ram
Run Code Online (Sandbox Code Playgroud)
如果它不起作用,请使用:
sudo s2ram --force
Run Code Online (Sandbox Code Playgroud)
接下来编辑这个文件:
sudo nano /usr/lib/hal/scripts/linux/hal-system-power-suspend-linux
Run Code Online (Sandbox Code Playgroud)
将代码更改为:
#!/bin/sh
/sbin/s2ram --force
Run Code Online (Sandbox Code Playgroud)
编辑:另一个修复:
将脚本放在“ /etc/pm/sleep.d/ ”中,那里的脚本将在挂起和恢复时运行。文件名应以订购号开头,用户脚本为 00-49(有关更多详细信息,请参阅 man pm-suspend)。
脚本可能是这样的
#!/bin/sh
(killall -9 mount.nfs; exit 0)
Run Code Online (Sandbox Code Playgroud)
如果您遇到问题,请检查 /var/log/pm-suspend.log,它会记录挂起和运行脚本的尝试。
步骤1:打开终端并创建一个脚本文件,如下所示:
sudo nano /etc/pm/sleep.d/20_custom-ehci_hcd
Run Code Online (Sandbox Code Playgroud)
第 2 步:将下面的整个脚本复制到您刚刚创建的文件中并保存:
#!/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
Run Code Online (Sandbox Code Playgroud)
第 3 步:通过键入以下内容授予脚本运行权限:
sudo chmod 755 /etc/pm/sleep.d/20_custom-ehci_hcd
Run Code Online (Sandbox Code Playgroud)
仔细阅读后,我发现问题出在许多联想笔记本电脑(在我的情况下为 G50-80)中使用的 Qualcomm Atheros QCA6164 WiFi 卡。Ubuntu 似乎没有适合这张卡的固件,这使它起作用。
我还发现在关闭我的笔记本电脑之前关闭 Wifi 可以防止一切都被窃听,所以我把它和这篇文章中的解决方案放在一起,并创建了一个文件/etc/acpi/来处理盖子关闭事件。
使用以下代码添加以下代码sudo nano /etc/acpi/lid.sh:
#!/bin/sh
grep -q closed /proc/acpi/button/lid/LID0/state
if [ $? = 0 ]
then
nmcli radio wifi off
pm-suspend
else
nmcli radio wifi on
fi
Run Code Online (Sandbox Code Playgroud)
接下来,使用以下命令添加以下行sudo nano /etc/acpi/events/lm_lid:
event=button/lid.*
action=/etc/acpi/lid.sh
Run Code Online (Sandbox Code Playgroud)
现在,取消注释并使用以下行设置sudo nano /etc/systemd/logind.conf:
HandleLidSwitch=ignore
Run Code Online (Sandbox Code Playgroud)
最后,进入System Settings > Power并将所有关闭盖子选项设置为Do Nothing。
运行以下命令来设置权限并完成更改:
sudo chmod 755 /etc/acpi/lid.sh
sudo /etc/init.d/acpid restart
sudo service systemd-logind restart
Run Code Online (Sandbox Code Playgroud)
希望它对你有用!
| 归档时间: |
|
| 查看次数: |
8347 次 |
| 最近记录: |