2024-09-08 22:55:00
我是一个 Windows 和 Ubuntu 用户,此前一直使用 KDE 桌面环境,最近心血来潮打算体验一下其他 Linux 发行版。我的第一个选择是 Fedora。之所以选择它,是因为 Fedora 的软件包管理系统与 Ubuntu 不一样,默认的桌面环境是 Gnome,与我熟悉的 KDE 也不同,总体的使用体验会有非常大的差异。
本文发布时,Fedora 的最新版本为 Fedora 40,发布于 2024 年 4 月 23 日(Ubuntu 24.04 发布于 2024 年 4 月 25 日)。在安装了 Fedora 40 后,我重度使用了一个周末。在周末即将结束时,将一个周末的使用体验以博文的形式分享出来。
在下载安装镜像文件时,我大概浏览了一下 Fedora 的网站,了解了一些概要信息:
Fedora 有五个分支版本,对应五种应用场景:Fedora Workstation 针对 PC 的桌面版,Fedora Server 服务器版,Fedora Iot 针对嵌入式设备的物联网版,Fedora Cloud 和 Fedora CoreOS 是针对云计算场景的版本。
Fedora 通常每半年发布一个新版本,每个版本的维护时间为 13 个月。所以我可以在今年下半年更新 Fedora 41,或者在明年上半年 Fedora 40 停止维护前升级到 Fedora 42。
系统的安装比较顺利,但是体验并不完美。通过 LiveCD 引导的安装过程非常容易,只需选择安装的磁盘即可。重启后,进入 Inital Setup。选择“Enable Third-Party Repositorise”,点击“Next”,程序卡住。多次弹出程序无响应的对话框,点击“Wait”仍然无效。此时我打算重新启动,但电源菜单中只有“Suspend”选项,无奈我只能通过机箱的电源按钮关机。重启后,Inital Setup 程序顺利执行完毕,进入桌面。后来我在虚拟机中再次安装,遇到了相同的情况,所以这并非偶然。
Fedora 40 默认使用 Gnome 46 桌面环境。它给人的第一印象是“简洁、漂亮”。屏幕上方有一条非常窄的状态栏,左中右分别布置了工作空间、时间和按钮栏。默认壁纸是一副油画风格的抽象画,画中是夕阳照进树林的景色。画面两侧的树木高大,枝叶茂密。画面中间模糊的蓝色让人一时分不清是路面还是小河,配合阳光照进树林形成的丁达尔现象,给人一种宁静深邃的感觉。
Fedora 默认的 UI 主题以白色为主,窗口不同区域通过不同的灰度区域隔开。界面中的特殊元素大多使用蓝色表现,例如:进度条、引导性按钮、开启项和选中项等。
点击键盘的 Super 按键,可以看到位于屏幕底部的 Dash 栏。Dash 栏与 MacOS、Windows 11 的设计类似,居中、合并相同程序的不同窗口。Dash 栏默认不显示,只有在按下 Super 按钮后,才会显示。我都害怕有些心急的新手跳过首次启动指引,会发现不知道如何打开应用程序。
按下 Super 按键后,通过键盘输入也可以进行全局搜索,也可以在中间的窗口区域切换窗口或工作空间,也可以通过 Dash 栏打开其他应用程序。
我浏览了一遍 Setting 应用程序,设置项都非常简洁。它不像 KDE 那样在系统设置中集成非常丰富的设置内容,系统进一步定制通过 Extensions 和 Tweaks 两个应用程序来完成。网络设置非常好用。系统可以自动识别我所有的四个以太网卡和一个 Wi-Fi。我可以非常容易地给这些网卡设置静态 IP 或动态 IP,也非常容易地连接家里的 Wi-Fi。代理和 VPN 的支持也非常丰富。常见的 VPN 协议和代理模式都能很好地支持。遗憾的是,当我创建一个 WireGuard 连接时,遇到一个必现的崩溃问题。创建 WireGuard 连接时,进入 WireGuard 标签页,通过 fwmark 选项右侧的加减号修改 fwmark 选项,当次选项是 1 时,再次点击减号,Setting 程序便崩溃退出了。
Fedora 在显示设备方面支持地非常好。我有两个显示器,分别是 HDMI 接口的 1080P 显示器和 DP 接口的 4K 显示器。两个显示器可以正常分别使用 100% 和 200% 两个不同缩放比,而且切换缩放比不再需要重新启动桌面环境。
鼠标和触摸板的设置中规中居没有太多特殊点。值得一提的是,中文输入法的设置出乎意料得顺利。我只需在键盘选项中添加一个 Input Source,即可输入中文。这一点是非常大的进步,因为我知道有很多人都是在多次尝试安装中文输入法失败后,放弃在真机中安装 Linux 操作系统。虽然安装的比较顺利,但是输入法的使用体验却非常普通。首先是词语联想功能非常弱,当我打出“feichangjianjie”时,第一候选词竟然是“非常简介”。其次,我设置了每个窗口具有独立的输入源,当我以中文输入状态切换到其他窗口,在由其他窗口切换回来时,输入状态会变成英文。这实际上就变为每当我切换到一个窗口,此时的输入状态都是英文状态,完全无法保留之前的状态。
在 Setting 程序中,依次打开 System 和 About 选项,Disk Capacity 栏目中显示的是 Unknow,说明系统没有正确识别出计算机中的存储设备。不过这无伤大雅,我只有一个 SSD,并且所有挂载都正确,这里只是显示异常。
Fedora 预装的应用程序质量非常高,Camera、Contacts、Weather、Clock、Maps,这些程序简单好用,界面简单美观,让我有一种在使用手机系统的错觉。还有一些其他的程序也给了我很多惊喜:Boxes 是一个轻量级的虚拟机软件,它可以满足日常的虚拟机需求。最厉害的是,你可以在 Boxes 中直接下载各种常见的操作系统镜像,非常方便。Disk Usage Analyzer 应用程序有一个很炫的饼状图,可以非常快速直观地展现出各级目录的磁盘占用状况,所有人都值得一试。
这一次对 Fedora 的尝试非常成功,我见到了非常好的软件,见到了多屏多缩放顺利解决,尝试了不同于 Windows 和 KDE 风格的桌面环境。当然目前我所体验到的,仅仅是 Fedora 的冰山一角,进一步了解 Fedora 还需要更久的时间。接下来我会继续使用 Fedora,看看它在长期工作中的持续表现。
2022-01-27 16:46:00
由于 DS216j 的性能比较弱,很多服务虽然可以用,但是体验并不好。在使用 DS216j 两三年后,我逐渐有了换机器的想法。一方面是想改善现有服务的使用体验,另一方面是觊觎新功能。
先说说性能问题把:用 Moments 套件打开相册,翻到较早的照片时,照片缩略图需要很久才能打开。看不到缩略图就很难快速找到想要的照片;使用 Video Station 串流影片时,解码能力有限,1080P 以上清晰度的影片最大只能以 720P 来解码;多个服务并发运行时,反应速度有明显降低;更换硬盘需要拆外壳,很不方便。
新功能稍后再说,总之在 DS216j 向我报告第一块 3TB 的硬盘发生故障,需要更换后,我决定买一台新 NAS。
就在几天前,我收到了这台新 NAS:DS920+。我本来想先用一周的时间体验和研究一下新机器,等它的各项配置和服务都稳定后,再把 DS216j 上的服务和资料逐渐迁移至 DS920+ 上。然而出乎我意料的是,一切配置都很顺利,包括很多新功能。所以 DS920+ 很快就“转正”了。
相比于 DS216j,DS920+ 上可用的套件增加了许多。我最感兴趣的是 Docker 和虚拟化。
我有一些服务平时运行在 PC 的虚拟机中,比如 beancount-fava 和此博客的 Jekyll 工程。但是每次都需要打开虚拟机,切换目录,运行程序,这样还是比较麻烦的。现在我把这些服务都放在 NAS 的 Docker 中运行,就省去了这些繁琐的操作。群晖的 Docker 套件基于标准的 Docker,完整支持 dockerhub。既有适合新手上路的图形界面,也有适合高端玩家的命令行程序。可以说,有了 Docker,只有你想不到的,没有群晖做不到的。
对于个人用户来说,DSM 上的虚拟机功能比较完整。它的虚拟机可支持 Windows、Linux、DSM 和其他自定义的操作系统。创建好虚拟机,设置基础的硬件信息后,就可以开机了。显示终端被重定向到了一个 Web 页面,这一点和其他 VPS 厂商一样。虚拟机管理器中有简洁明了的存储管理和网络管理,快照、备份等常用功能也都具备。在 DSM 中再安装一个 DSM 的虚拟机听起来确实很有趣,不过除了做一些实验配置以外,我还没有想到有什么实际用途。群晖随机赠送一个 DSM 虚拟证书,每台设备可免费安装一个 DSM 虚拟机。额外的虚拟机需要购买许可。
默认情况下,DSM 的虚拟机是基础版。专业版是在基础版上增加了集群管理的功能,不过专业版需要额外付费。
总之,对于个人用户而言,基础版的 DSM 的虚拟化基本满足日常使用。
群晖还有其他的一些优点。例如,技术支持比较快。我提过两次工单,基本都在第二个工作日解决了。文档比较详细,如果有哪些不懂得地方,大部分问题都可以在官方网站上找到资料。这些优点常常让人心里格外舒坦,并感慨其物超所值。
同时,我也注意到群晖 NAS 上也存在一些缺点。关于相册服务,从最开始的 Photo Station,到后来的 Moments,再到现在的 Synology Photos,这个服务所对应的套件基本都是推倒重来。虽然每次更新,官方都宣称存储向前兼容。但我实际上每次都被强行改变了使用习惯。另外,DSM 上的套件基本上都是满足功能需求。在易用性和便捷性上,和专业的软件还有一些差距。
限于篇幅,对于群晖 NAS 的使用体验介绍不能面面俱到。随着我继续使用,它也会给我的数码生活带来更多活力和新奇的体验。
——2022年01月27日
2022-01-26 13:56:00
2017 年,我购买了第一台 NAS:群晖 DS216j。当时最主要的需求就是数据存储。文档资料、影音视频、家庭照片,这些资料随着时间的推移,越积越多。单纯使用 PC 硬盘管理资料已经无法满足需求了。我曾经考虑过在线网盘,但是大部分网盘产品都需要用户在存储容量、传输带宽和订阅费用三者间取舍。况且,虽然技术上,网盘能够很好地保证数据的安全性。但是仍然有很多非技术性因素,让我对网盘上的数据安全性充满担心——NAS 几乎是必然的选择。
DS216j 是群晖的入门级产品,价格低,最大支持两块硬盘,性价比非常高。了解群晖 NAS 的读者可能会对我的说法嗤之以鼻:DS216j 如此孱弱的性能如何称得上性价比高?这里的性价比,比的可不是性能啊。群晖“买软件,送硬件”的名号由来已久,我倒认为,用 1200 多人民币的价格,就可以用上群晖提供的绝大部分软件服务,那可谓是非常赚啦。
我为什么不攒一台 NAS 呢?作为一个软件工程师,我确实可以攒一台机器,网上也有很多自攒 NAS 的教程。但是我在这方面并不想花费太多时间和精力折腾。我需要一台运行稳定、功能成熟的 NAS。我可不想三天两头折腾宕机的 NAS,所以在这方面用金钱换时间和精力是很合算的,况且数据也是无价的。
群晖的上手非常容易。按照说明书安装硬盘、连接电源线和网线就可以直接开机了。系统安装和软件设置也是傻瓜化操作,跟着向导一路点击下一步即可。所有关键的设置项都有详细的说明,基本不会出现配置错误的情况,非常贴心。设置好硬盘、共享文件夹和用户账户,就可以从局域网中访问 NAS 中的数据了。从拆箱到基本设置完成,大概仅用了 15 分钟左右。
群晖 NAS 中运行的是 Synology DiskStation Manager (DSM) 操作系统。DSM 是群晖基于 Linux 专为其 NAS 产品开发的操作系统。DSM 中,套件(Package)的概念类似于应用程序。但是和应用程序又有一些区别。一个套件是若干应用程序、数据和配置的集合,它为用户提供了一整套完整的功能。DSM 把各种功能以套件的形式提供给用户。从套件中心下载和安装套件完全都是全自动的,即插即用,非常方便。
如果说群晖 NAS 的基础功能让我非常满意的话,那么它的套件中心则让我惊喜不已。Photo Station 可以让用户浏览存储在 NAS 上的照片、备份设备上的照片至 NAS;Audio Station 和 Video Station 分别允许用户在线播放存储在 NAS 上的音乐和影片;Download Station 允许用户使用 NAS 从网络上下载文件,实现离线下载功能;Cloud Sync 用来同步其他网络存储服务上的数据,例如 Google Drive、Microsoft OneDrive 等;Synology Drive 可以同步 NAS 和用户设备上的数据。而这些只是我常用的几个套件,群晖的套现中心中还有很多套件,实现各种各样的功能。配合各种优秀的套件,这台 NAS 摇身一变,成为了一台家庭多媒体数据中心。除了官方套件,群晖还支持第三方开发的套件,甚至还有专为群晖 NAS 开发第三方套件的社区。这大大增加了 DSM 的可玩性。
家庭环境中的 NAS 往往部署在局域网内,且没有固定的公网 IP。所以使用一般手段从公网访问 NAS 非常不方便。群晖为用户提供了 QuickConnect 服务。NAS 和用户通过 QuickConnect 实现内网穿透。上面提到的各种套件,都可以通过 QuickConnect 实现在公网上访问。但是由于所有的数据都依赖 QuickConnect 服务的中转。所以访问速度比较慢。
最开始,我主要是在家里通过局域网连接 NAS。后来随着越来越多的数据都保存在 NAS 上,再加上使用习惯的养成,我越来越依赖 NAS 上的服务。通过公网访问 NAS 的情况增加了,QuickConnect 已经不能满足需求了。
于是我向网络运营商申请了公网 IP。在这里解释一下,由于 IPv4 地址资源有限,默认情况下家用固定宽带服务不向用户提供公网 IP 地址,而是运营商的内网 IP 地址。如果设备位于运营商的内网中,则无法通过公网访问。主动申请后,运营商则会给用户提供公网 IP 地址。目前申请公网 IP 是免费的。由于需要频繁的访问 NAS 中的数据,NAS 的上行流量就变得非常重要了。我将原来的 200M 的宽带套餐升级为 500M,上行流量则由原来的 20M 提高到了 100M。对于个人使用来说,已经足够了。
要想顺畅地从公网访问 NAS,只有公网 IP 还不够,因为它不是固定 IP 地址。每次 PPPoE 拨号,都会从运营商获取不通的 IP 地址。群晖提供了 DDNS 服务。DDNS 服务可以把域名解析到动态变化的 IP 地址上。这样就算每次拨号获取的地址不通,也可以通过固定的域名访问 NAS。通过这些设置,之前的“泉眼无声惜细流”变成了“不尽长江滚滚来”。
DS216j 有两个盘位。最初我只购买了一块 3TB 的硬盘。随着数据增多,两年后我又买了一块 4TB 的硬盘。我并没有组 Raid,一方面是因为两块硬盘的 Raid 方案都不适合我。另一方面,我对可用性的要求并不是很高,系统出问题后,直接从备份中恢复数据即可。
我将我的所有数据分为三类。第一类是重要且访问频度高的数据,例如照片和日常文档。这些数据占用空间不大(通常在 200GB 以下),但是丢失后无法恢复。对于这类数据,我每周进行一次备份,保留最近的三次备份,在硬盘和网盘中各保存一份。第二类是访问频度不高,丢失后不容易找回的数据,例如游戏、电子书和音乐。这类数据占用空间略大,通常在 500GB 至 1TB 之间。它和第一类数据采取同样的备份方法,只不过频率调整为半年至一年一次。第三类数据是访问频度低,丢失后较容易找回的数据。这类数据具有收藏属性,占用空间大,往往没有上限。我把这类数据直接存储在普通硬盘上,一旦硬盘存满,就从设备上取下来,贴上标签,断电保存。然后给设备换一块新硬盘。
幸运的是,直到现在我还没有使用过这些备份,DS216j 一直在稳定运行中。不过我清楚地认识到,出问题只是时间问题,我依然要保持备份数据的习惯。
2020-05-20 22:45:00
今天吃完午饭,我和子晨去了附近的一家书店。这家书店有一个奇怪的名字——言几又。
我很少去书店,几乎所有的书都是从网上买。之所以会去言几又,是因为小珂单位发了一张预付卡。而书店又恰好离公司非常近,我就期望着多少能买几本书。
刚迈进书店大门,一股书店特有的书香扑鼻而来。环顾四周,整个书店宽敞明亮,富丽堂皇。天花板上悬吊着形态各异的灯具。众多明亮的日光灯中,间或参杂着几盏外型极具特色但亮度稍弱的装饰灯。这种微弱的黄晕散发自书店的各个角落,给人以温馨舒适的感觉。高大宽阔的书架在灯光的照耀下,反射出雍容华贵的实木光泽。走廊尽头,一面大镜子完全覆盖了整个墙壁。走过去,不仔细看都不容易发现镜子的存在,只感觉置身于无尽的书海中。大厅正中间有一个巨大的旋转楼梯,通向二楼。人们沿着楼梯上上下下,又为书店增添了一些市井的热闹气息。
在书店的两个角落,各有一个咖啡厅和理发厅。咖啡厅里坐了不少人,有的捧着咖啡和好友低声细语,有的靠在沙发上看书。
相比起来,理发厅就冷清多了。大概是来书店逛的人们大多都还没做好理发的准备吧。
“这不知道比其他的书店高到哪里去了!”我这样想。
逛了一小会,我就发现了一个大问题:整个书店没有明显的导览设施。各类书籍都杂乱地混合摆放在一起。我想买些计算机专业类的书籍,结果绕了一圈,连一本都没找到。问过店员才知道,书店里根本没有专业书籍。
我这才审视起这家书店的藏书。
书架都很高,直顶天花板。书架低处摆着新面世的书。这些书并非像图书馆中书脊靠书脊地摆着,而是直接立起来,封面对着读者。这样看起来视觉效果确实很棒,但仔细想想,这种方法的空间里用率非常低,一层并不能摆多少本书。而且,还有不少书架上摆着一些古玩字画等文创产品。很多书架的最上面几层,干脆就摆着一些假书,以充场面,就像很多健身房里的书架一样。
整个书店的藏书以“励志鸡汤”、经济生活和历史文化等畅销书为主。很难找到名家经典书籍,甚至是四大名著和国外名著小说都没有。在普通书店这些书,往往都占据了相当多的书架空间。
最后,我和子晨发现喝咖啡才是消费这张预付卡最合算的方法。坐在角落的卡座里,我俩一人点了一杯冰拿铁,吹着空调,悠然地享受起这优美的环境。环顾四周,我想起上次去小寨的汉唐书城。汉唐书城这两年也有了大变样,和言几又很像,都加入了更多休闲和流行元素。在电商和电子书迅猛发展的冲击下,传统图书零售业日渐萧条。为了生存,很多书店不断探索和转型。书店老板也要赚钱养家,这本无可厚非。但是书店曾是文化和知识的代表,如今却将要慢慢褪去她的深韵,加入消费领域的滚滚大军中,不禁令人唏嘘。
小时候跟着爸爸去图书批发市场进货。大人们谈生意,我就在旁边找喜欢的书翻阅。最后谈妥了生意,临走时老板大多会让我挑几本喜欢的书送给我。我还能记得从书店里走出来,手里捧着书时,自己脸上洋溢的笑。然而这样的书店恐怕再也不会有了。
——2020年05月20日
周末,我和小珂再来的时候,书店以大扫除的名义暂停营业。两周后的今天,我和小珂第二次来,书店还是大门紧锁。门外有一位店员模样的人告诉我们,这家店已经半个月没有营业了,估计是要关门了。
——2020年06月06日
2020-05-18 11:31:00
Recently I found myself very hard to fall asleep. Yesterday I happened to see this article. The author explains why using cellphones before going to bed is harmful to sleep in this article. What he said seems to make sense. So I left my cellphone out of my bedroom before going to bed last night.
At first, I was not used to lying in bed without doing anything, and unconsciously tried to find something to focus on. It took me quite a long time to relax completely.
This morning, I awoke much earlier than usual. I tried to get my cellphone habitually before opening my eyes. However, of cause, I couldn’t. I forgot that I had left it in the living room. I would pick the cellphone up and play around with it if I had the cellphone near me at that time. The alarm had not gone off, which means I still had some time. I closed my eyes, tried to fall asleep again. However, I became wide awake soon.
I felt energetic more than ever. I quickly get washed and changed, made me breakfast of eggs and milk. When I finished all this, there was still plenty of time before going to work. I did some cleanning, read some pages of a book and listened to an English audio program.
I extended the time of the morning by putting my cellphone away. Spending too much time on cellphones isn’t only a waste of time, but also impact the sleep quality.
2020-05-17 10:53:00
自从安装了 Kubuntu 20.04 后,我被一个噪音问题困扰了很久。系统在播放声音前,总会发出一两声短促的噪音。然后继续正常播放声音。后来经过一些研究,我在不久前解决了这个问题。
刚安装完操作系统后,我安装了媒体播放器,体验音乐和电影的播放效果。在操作过程中,我注意到系统偶尔会发出的短促噪音。在网上搜索一阵,并且尝试了一些方法后,问题没有得到解决。我便放弃了,只当是驱动程序可能有缺陷。
不过我渐渐地发现了一个规律:噪音只会在一段安静时间后,再次播放声音前产生。在持续播放声音过程中,从来没有噪音。这让我猜测到了一种可能的原因:系统在播放声音一段时间后可能会关闭音频设备,然后在下一次播放前再打开音频设备。打开音频设备的过程中有可能产生电信号的突变,继而产生短促的噪音。这种设计极有可能是基于省电的考虑。
于是,我以“Linux save power audio noise”为关键词搜索了一番。在 Redhat 公开的 BUG 管理系统中,我找到了2017年报告的一个 BUG:《Bug 1525104 - Clicking noise when start or stop sound playing》。
这个 BUG 所描述的问题和我的相同,并且 Jeremy 似乎给出了解决问题的办法。
Jeremy Cline 2017-12-13 18:06:49 UTC
Can you pass snd_hda_intel.power_save=0 on the kernel command line and see if that resolves your issue?
Thanks
Riku Seppala 2017-12-13 18:25:50 UTC
Yes, that seems to resolve this for me.
这个方案虽然可行,但需要通过修改 grub 的配置来修改内核命令行参数。即有风险又麻烦,普通用户不好操作。我决定找一个更容易操作的方法。
“snd_hda_intel.power_save=0”看起来是把“snd_hda_intel”内核模块的“power_save”参数设置为0。那么问题应该是出在这个内核模块上了。于是我下载了 ubuntu 的内核源码,找到了这个内核模块。经过一番搜索,找到了这部分代码(linux-source-5.4.0/sound/pci/hda/hda_intel.c):
#ifdef CONFIG_PM
static int param_set_xint(const char *val, const struct kernel_param *kp);
static const struct kernel_param_ops param_ops_xint = {
.set = param_set_xint,
.get = param_get_int,
};
#define param_check_xint param_check_int
static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
module_param(power_save, xint, 0644);
MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
"(in second, 0 = disable).");
static bool pm_blacklist = true;
module_param(pm_blacklist, bool, 0644);
MODULE_PARM_DESC(pm_blacklist, "Enable power-management blacklist");
/* reset the HD-audio controller in power save mode.
* this may give more power-saving, but will take longer time to
* wake up.
*/
static bool power_save_controller = 1;
module_param(power_save_controller, bool, 0644);
MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
#else
#define power_save 0
#endif /* CONFIG_PM */
阅读这段代码后,我发现 power_save 参数并非简单地开启或者关闭省电模式,而是一个超时时间。增大超时时间可以降低进入省电模式的频率,从而减少噪音产生的次数。设置0可以直接关闭省电模式。于是问题就变得简单了,我的台式电脑似乎并不那么在乎功耗,所以我决定关闭音频设备的省电模式。用这条命令可暂时关闭省电模式。系统重启后失效。
$ sudo echo 0 > /sys/module/snd_hda_intel/parameters/power_save
若要永久关闭设备的省电模式,在/etc/modprobe.d/中添加一个“disable_snd_hda_intel_power_save.conf”文件,在文件中添加这一行:
options snd_hda_intel power_save=0
为什么 Linux 中有这个问题,而 Windows 操作系统中没有?
Linux 的文档中有一个章节:More Notes on HD-Audio Driver。这一节中介绍了 HD-audio 设备的大致结构。这里引用其中一段:
The HD-audio component consists of two parts: the controller chip and the codec chips on the HD-audio bus. Linux provides a single driver for all controllers, snd-hda-intel. Although the driver name contains a word of a well-known hardware vendor, it’s not specific to it but for all controller chips by other companies. Since the HD-audio controllers are supposed to be compatible, the single snd-hda-driver should work in most cases. But, not surprisingly, there are known bugs and issues specific to each controller type. The snd-hda-intel driver has a bunch of workarounds for these as described below.
这里说:HD-audio 组件由控制器芯片和解码芯片组成。Linux 提供了控制器芯片的驱动程序。在 snd_hda_intel 模块中,我找到了解码芯片的省电模式的驱动代码(linux-source-5.4.0/sound/pci/hda/hda_codec.c):
static void codec_set_power_save(struct hda_codec *codec, int delay)
{
struct device *dev = hda_codec_dev(codec);
if (delay == 0 && codec->auto_runtime_pm)
delay = 3000;
if (delay > 0) {
pm_runtime_set_autosuspend_delay(dev, delay);
pm_runtime_use_autosuspend(dev);
pm_runtime_allow(dev);
if (!pm_runtime_suspended(dev))
pm_runtime_mark_last_busy(dev);
} else {
pm_runtime_dont_use_autosuspend(dev);
pm_runtime_forbid(dev);
}
}
原来音频设备的低功耗是通过控制解码芯片来实现的。于是我猜测电脑主板上应该有这样一个解码芯片:在省电模式中断电,在工作模式中供电。
我使用的是华硕 B85M-F 型号的主板,在华硕的官网中搜到了此主板的规格说明。此主板搭载了 Realtek® ALC887 8-Channel High Definition Audio CODEC 音频解码芯片。我又在网上找到了这个芯片的数据手册,里面有它的长相和引脚定义。它长这个样子:
我在电脑主板上找到了这个芯片,然后把 snd_hda_intel 模块的省电模式打开,用万用表在它的供电引脚上量到了电平的变化。正如我之前猜测的一样:播放声音一段时间后,停止供电。播放声音前,恢复供电。
最后,我抱着试试看的态度,换了一块硬盘,装上 Windows 10。经过半个多小时的测试,这个音频解码芯片的供电始终没有被切断。看来,Windows下的驱动并没有在低功耗方面理会此芯片。
到此,这个问题不再扑朔迷离。然而这个问题引发了我更深地思考:当此问题初现的时候,我的第一印象是 Linux 在这些细节上处理的还不够成熟。然而经过以上研究过程,我认为是 Linux 的开发人员追求极致的风格导致了这些琐碎的问题。上文提及的2017年报告的 BUG,到现在依然被开发者们追踪并修改,我为这些开发者们的精神所折服。
——2020年5月17日