Ubuntu/Liinux睡眠无法唤醒解决方法:ACPI设置
最近给笔记本换了一个固态,顺便就重装了一下系统,版本是Ubuntu 20.10。装完之后各种功能基本都是正常的,触摸板轻触单击、双指右键等功能开箱即用。但是在安装完最新的Nvidia驱动之后就出现了问题,系统挂起之后就无法唤醒了,只有一个光标在屏幕上一直闪。
这种基本上都是硬件的兼容问题,要么就寄希望于内核和驱动的更新,要么就换一个linux发行版。但是由于我重装之前应该是正常的,就导致我非常难受,想要解决这个问题。linux这类问题千变万化,很多时候搜遍互联网也没法解决。但这次运气不错,找到了问题的症结,并且有一定的普适性。
I found a solution which should work for everyone.
Worked for me! In fact, it is the only damned thing that ever worked for me.
问题原因
Linux系统向上为用户提供良好的操作界面,向下管理各种硬件和资源。其中包括开关机、挂起和唤醒、休眠等,还有Fn功能键等。软件与硬件沟通中间渠道就是通过固件,这部分是由硬件厂商提供的,一般写在BIOS里。ACPI是一个重要的规范,称作高级配置与电源接口。由于现在Windows是操作系统的绝对的主流,很多厂商在设计的时候就没有考虑到其他操作系统比如Linux,就会导致很多功能无法正常的工作。
不过好在这个现象已经引起Linux开发者的注意,并且提供了一个acpi_osi=的选项,可以让固件提供和Windows相同的功能。
解决方法
ACPI的DSDT提供了对操作系统的识别功能,我们可以用如下的命令查看DSDT支持什么样的系统版本:
$ sudo strings /sys/firmware/acpi/tables/DSDT | grep -i 'windows ' | sort
在我的电脑上包括Windows 2009,Windows 2012,Windows 2013三个返回值,分别代表的是Windows 7,8和8.1。接下来只需要给内核增加一个参数,就可以让硬件识别为Windows了。具体的方法是在/etc/defalut/grub中给GRUB_CMDLINE_LINUX增加acpi_osi=参数,大概像下面这个样子:
GRUB_CMDLINE_LINUX="acpi_osi=! \"acpi_osi=Windows 2015\""
接着,执行sudo update-grub命令就可以将配置部署到Grub上了。重启系统,执行
$ cat /proc/cmdline
可以看到启动参数已经被添加成功了。在这种情况下,如果问题是这个导致的话已经可以解决了。如果不行,几个Windows版本都可以试一试,我用的是Windows 2009才可以。但即使你的问题没有被完全解决,仍然推荐保留这个选项来保证ACPI的全功能,包括省电、CPU保护等不明显的功能。
自动化脚本
如果不想了解那么多细节的话,可以直接通过一个脚本自动化的完成上述的修改。
#!/bin/sh
VERSION="$(sudo strings /sys/firmware/acpi/tables/DSDT | grep -i 'windows ' | sort | tail -1)"
echo 'Linux kernel command-line options required: acpi_osi=! "acpi_osi='$VERSION'"'
read -p "Do you want to add this setting (y/n) ? " answer
if [ x$answer != xY -a x$answer != xy ]; then
exit 1
fi
echo "Existing Command Line: ` sed -n '/.*linux[[:space:]].*root=\(.*\)/{s//BOOT_IMAGE=\1/ p;q;}' /boot/grub/grub.cfg `"
if grep -m 1 'acpi_osi=Windows' -q /etc/default/grub; then
echo "There is already an entry; please remove it from /etc/default/grub and redo 'sudo update-grub' then re-run this script"
exit 2
fi
sudo sed -i "s/^\(GRUB_CMDLINE_LINUX=.*\)\"$/\1 acpi_osi=! \\\\\"acpi_osi=$VERSION\\\\\"\"/" /etc/default/grub
echo "Modified Command Line: ` sed -n '/.*linux[[:space:]].*root=\(.*\)/{s//BOOT_IMAGE=\1/ p;q;}' /boot/grub/grub.cfg `"
sudo update-grub
保存为.sh文件执行即可。
终于可以愉快的休眠了,这个功能对笔记本来说太重要了。
- https://forums.developer.nvidia.com/t/solution-for-nvidia-sleep-wake-issue-in-linux/110911
- https://iam.tj/prototype/enhancements/Windows-acpi_osi.html
Ubuntu/Liinux睡眠无法唤醒解决方法:ACPI设置的更多相关文章
- windows8 8.1 安装完 ubuntu无法挂载 ntfs分区 解决方法
windows8 8.1 安装完 ubuntu无法挂载 ntfs分区 解决方法: 最近安装完发现8.1系统后,ubuntu无法加载以前的ntfs分区了,特别是我添加到了/etc/fstab里面了 导致 ...
- ubuntu boot空间不足的解决方法
ubuntu boot空间不足的解决方法 2013年12月11日 11:11:39 yypony 阅读数:17000 标签: ubuntu内存boot内核更多 个人分类: linux_usageubu ...
- Ubuntu几种常见乱码解决方法
一.网页中的flash乱码: ubuntu默认浏览器是Firefox,但是Ubuntu默认不安装像flash这种带版权的软件,所以当你浏览像youku或网页播放器时,这种带有 flash ...
- VMware 12虚拟机下Ubuntu 16连不上网解决方法
打开自带Firefox浏览器,显示连接不上网,终端下 ping 也显示 unkown 解决方法: 1.打开虚拟机的“编辑”选项,选择“虚拟网络编辑器” 2.选择VMnet8(我不知道为啥VMnet ...
- win7远程连接ubuntu,出现灰屏解决方法
问题: win7远程虚拟机ubuntu 12.04出现灰色屏幕 打开windows自带的远程桌面连接.输入ubuntu虚拟机的IP地址 可以连接上,输入username和password 点击OK ...
- Ubuntu里node命令无效解决方法
在ubuntu里用sudo apt-get install nodejs安装Node.js后, 会发现terminals里运行node命令(比如node –-version)时候会有No such f ...
- VMware上安装的Ubuntu不显示全屏解决方法
花费了好一会才把电脑上的Vmware装上,把Ubuntu装到虚拟机上,谁知道Ubuntu不显示全屏,我调了分辨率,奈何Ubuntu里面固定的分辨率没有跟我电脑匹配的,然后开始寻找解决方法,在网上找了很 ...
- ubuntu安装bower失败的解决方法
1.安装nodejs 2.安装npm 3.安装bower 最开始使用 npm install bower -g / sudo npm install bower -g 安装bower后 命令行输入bo ...
- ubuntu/debian gpg error no_pubkey 解决方法
GPG error: http://ppa.launchpad.net precise Release: The following signatures couldn’t be verified b ...
随机推荐
- PyQt(Python+Qt)学习随笔:窗口部件大小策略sizePolicy与SizeConstraint布局大小约束的关系
在<PyQt(Python+Qt)学习随笔:Qt Designer中部件的三个属性sizeHint缺省尺寸.minimumSizeHint建议最小尺寸和minimumSize最小尺寸>. ...
- C#声明一个100大小的数组 随机生成1-100之间不重复的数
面试题:C#声明一个100大小的数组 随机生成1-100之间不重复的数下面是C#的实现方式,编译测试通过 public static void InsertRandomArray() { int[] ...
- jsonp使用post方法
来源https://www.jb51.net/article/68980.htm
- 利用神经网络算法的C#手写数字识别(二)
利用神经网络算法的C#手写数字识别(二) 本篇主要内容: 让项目编译通过,并能打开图片进行识别. 1. 从上一篇<利用神经网络算法的C#手写数字识别>中的源码地址下载源码与资源, ...
- Jmeter(3)返回内容乱码
一.创建jmeter实例测试百度接口返回 1.添加线程组 2.添加取样器 3.添加监听器 二.运行结果如下 返回结果中有乱码,原因是Jmeter取样器结果的编码默认为sampleresult.defa ...
- Taro 3.1 beta 发布: 开放式架构新增 4 端支持
作者:凹凸曼-JJ 自 7 月初我们正式发布了 Taro 3,至今半年时间已然略去.期间我们不断地修复着问题,同时也在构想着下一个 minor 版本. 面对小程序平台越来越多的大环境,Taro 是选择 ...
- Spark性能调优篇八之shuffle调优
1 task的内存缓冲调节参数 2 reduce端聚合内存占比 spark.shuffle.file.buffer map task的内存缓冲调节参数,默认是3 ...
- BUUCTF | [网鼎杯 2020 朱雀组]phpweb
一道比较简单的题,不过对PHP还是不够熟悉 知识点 1.PHP date函数 PHP date() 函数用于对日期或时间进行格式化. 语法 date(format,timestamp) 参数 描述 f ...
- 使用基于Vue.js和Hbuilder的混合模式移动开发打造属于自己的移动app
近几年,混合模式移动应用的概念甚嚣尘上,受到了一些中小型企业的青睐,究其原因,混合模式开发可以比传统移动开发节约大量的开发成本和人力成本. Hybrid App(混合模式移动应用)是指介于web-ap ...
- MySQL5.7.26安装及启动报错解决
一.安装依赖包 [root@db01 ~]# yum install -y lrzsz [文件上传/下载] [root@db01 ~]# yum -y install xfsprogs [安装磁盘格式 ...