关闭盖子时笔记本电脑无法正确悬挂

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......我的想法不多了,但我会做任何事情来解决这个问题.

如果有任何系统信息可能有用,请告诉我,我会将其添加到帖子中。

An0*_*n0n 7

要在 Ubuntu 中更改合上盖子操作:

以 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,它会记录挂起和运行脚本的尝试。

Ubuntu 挂起不工作修复

步骤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)


the*_*ish 5

仔细阅读后,我发现问题出在许多联想笔记本电脑(在我的情况下为 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)

希望它对你有用!