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)学习随笔:QTreeView树形视图的headerHiden属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeView树形视图的headerHiden属性用于控制视图中是否隐藏标题,为True隐藏,否 ...
- LeetCode初级算法之数组:122 买卖股票的最佳时机 II
买卖股票的最佳时机 II 题目地址:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 给定一个数组,它的第 i ...
- AtCoder Grand Contest 017 (VP)
contest link Official Editorial 比赛体验--之前做题的时候感觉 AtCoder 挺快的,现在打了VP之后发现还是会挂的--而且不是加载缓慢或者载不出来,直接给你一个无法 ...
- 题解 CF1375E Inversion SwapSort
蒟蒻语 这题是真的奇妙... 想了好久才想明白. 蒟蒻解 考虑冒泡排序是怎样的. 对于相邻的两个数 \(a_i, a_{i+1}\),如果 \(a_i>a_{i+1}\) 那么就交换两个数. 总 ...
- win 7 MongoDB 下载安装
准备: 1.mongodb-win32-x86_64-2008plus-ssl-3.4.3-signed.msi 官方下载 2.1.建立数据存放目录 F:\MongoDB\ 2.建立日志文件 ...
- Consul安装部署(Windows单机、Docker集群)
1. Consul简介 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发,基于 Mozilla Public Licen ...
- Error while instantiating 'org.apache.spark.sql.hive.HiveSessionStateBuilder': —— windows 开发环境使用spark 无法访问hdfs 问题解决
## 错误: ## 解决方案: 下载 hadoop 的可执行tar包,解压放在windows 本地,并配置环境变量. 在 解压后的文件夹的bin目录下放入两个文件: winutils.exe, had ...
- 浅谈 WebRTC 的 Audio 在进入 Encoder 之前的处理流程
在 WebRTC 中,Audio 数据在被送入编码器之前,有 2 大部分需要特别关注,一是数据采集,二是 Audio Processing. 作者:方来,技术专家,从事 voip 应用开发. 数据采集 ...
- 上传报错,ITMS-90167,解决办法
ERROR ITMS-90167 No .app bundles found in the package 报这个错误的原因是上传工具的版本问题或者本地网络问题. 解决办法是使用在线最新的上传工具,推 ...
- js对flv提取h264、aac音视频流
FLV提取里面的h264视频流 FLV和MP4支持的编码 流媒体和媒体文件的区别 流媒体是指将一连串的多媒体资料压缩后,经过互联网分段发送资料,在互联网上即时传输影音以供观赏的一种技术与过程,此技术使 ...