Arch Linux 旧内核模块清理与 DKMS 编译错误彻底解决记录

在长期使用 Arch Linux 的过程中,内核会不断更新,系统也会留下许多历史内核版本的残留模块目录。这些残留文件虽然通常不会影响正常启动,但在安装或编译 DKMS(动态内核模块,如无线网卡驱动、显卡驱动等)时,常常会提示「为旧内核编译失败」的错误,影响体验。 这篇文章记录一次系统性清理旧内核文件的全过程,并分析 DKMS 触发机制,最终彻底解决编译提示问题。 💡 背景 Arch Linux 采用滚动更新模式,经常自动升级到最新内核。每次升级时,pacman 会安装新内核并更新 /usr/lib/modules 目录。然而,老版本内核的模块目录并不会自动删除,导致大量「历史残留」。 例如,/usr/lib/modules 中可能出现如下目录: 5.15.29-1-lts5.15.30-1-lts5.16.16-arch1-16.7.6-zen1-1-zen6.14.10-arch1-16.15.2-arch1-1 ← 当前使用内核 ⚠️ 问题表现 在安装 DKMS 驱动(如 snd-hda-macbookpro、rtl88x2bu 等)时,经常出现以下提示: 为内核 5.16.16-arch1-1 编译失败:找不到内核头文件或符号表 虽然不影响当前系统的正常运行,但会导致日志或安装输出杂乱,给人一种「系统不干净」的印象。 🔎 原因分析 DKMS 如何决定编译哪些内核 DKMS 并不是对 /usr/lib/modules 中每个目录都强制编译,而是根据以下条件判断: 只要 build 文件存在,即使该内核实际已被卸载,DKMS 仍然会尝试为其编译驱动,最终导致提示错误。 ✅ 彻底解决思路 1️⃣ 清理 /usr/lib/modules 旧内核目录 …

macOS Time Machine 详尽介绍

Time Machine 是 macOS 系统自带的备份工具,首次推出于 macOS 10.5(Leopard)。它旨在为用户提供一种“时间旅行”式的备份体验,能够轻松地回溯和恢复文件、应用、系统设置等。 基本工作原理 Time Machine 会自动对整个系统进行快照式备份,并将变更的文件保存到指定的外接硬盘、网络存储(NAS)或 Time Capsule。当需要恢复时,可进入「时间轴」界面选择历史版本,恢复单个文件、文件夹,甚至整个系统。 默认备份策略 Time Machine 的默认备份策略如下: 当备份磁盘空间不足时,系统会自动删除最早的备份,以便腾出空间给新的备份。 支持的备份目标 Time Machine 可将备份存储到以下设备: 文件系统要求 备份磁盘推荐使用 APFS(Apple 文件系统)或者 HFS+(Mac OS 扩展(日志式))。 macOS Big Sur 之后,Time Machine 对 APFS 磁盘备份的支持更好,速度更快,占用空间更少,且支持快照技术。 恢复功能 Time Machine 可恢复的范围包括: 如果电脑崩溃或者更换新机,可在初次设置时直接从 Time Machine 备份中迁移数据,恢复到相同或类似状态。 配置与排除项 用户可在「系统设置」>「Time Machine」中指定备份磁盘,也可以选择排除某些文件夹、卷宗或文件类型,以减少空间占用或提高备份效率。 定制化需求 Time …

macOS 应用安装、卸载及彻底清理数据的完整指南

在 macOS 上,安装和卸载应用相较于其他系统显得更为直观,但实际上很多人忽视了「卸载后数据残留」的问题,导致硬盘空间浪费,甚至引发隐私风险。本文详细介绍 macOS 上安装、卸载及彻底删除应用数据的完整流程,帮助系统保持干净状态。 🟢 macOS 应用安装方式 macOS 的应用主要通过以下几种方式安装: 不论哪种方式,应用本体通常位于: /Applications 或者: ~/Applications 🔴 常见误区:仅删除 .app 文件并不彻底 在 Finder 中,将某个 .app 文件拖入废纸篓并清空,这个操作只会删除程序本体。绝大多数应用会在用户目录下生成配置文件、缓存、历史记录、日志等,默认不会自动清理。这些文件通常保存在以下目录: ~/Library/Application Support/~/Library/Caches/~/Library/Preferences/~/Library/Saved Application State/ 🟠 如何查找应用残留数据 1️⃣ 列出已安装应用 通过终端查看当前系统已安装的应用: ls /Applications/*.app ~/Applications/*.app 结果会显示所有安装的应用名称,用于后续比对。 2️⃣ 查看 Application Support 内容 执行以下命令查看所有可能残留的文件夹: ls ~/Library/Application\ Support/ 若文件夹对应的软件已经不在「应用程序」里存在,基本可以判定为「卸载后残留」。 🔵 如何彻底删除已卸载应用的数据 删除 Application …

Galaxy One UI 的 Dual Messenger 功能与 LINE 分身账号使用解析

在使用 Samsung Galaxy(One UI)系统的用户中,很多人会遇到需要同时登录两个 LINE 账号的需求,例如分别用于工作与私人生活。Samsung 提供的「Dual Messenger(デュアルメッセンジャー)」功能,可以满足这一场景,操作简单、系统原生支持,安全性也更高。 什么是 Dual Messenger Dual Messenger 是 One UI 提供的官方多开功能,主要针对社交软件,允许在同一台设备上安装同一个应用的两份独立实例,从而登录不同账号。适用范围包括 LINE、Facebook Messenger、WhatsApp 等常见通讯工具。 在日本市场,官方依然保留了此功能,用户可在以下路径中找到: 设置 → 高级功能(便利功能)→ Dual Messenger(デュアルメッセンジャー) 如果在菜单中能够找到 Dual Messenger,说明系统本身支持多开,无需额外安装第三方分身应用。 关于「可以创建另一个分身应用」的提示 许多用户反馈曾看到「可以创建另一个分身应用」的提示,但在系统更新或重新设置后,这条提示有时会消失。实际上,这条提示并不是功能本身是否可用的关键,而是系统根据当前安装的支持应用实时生成的引导信息。 提示是否出现,通常取决于以下因素: 只要在「Dual Messenger」页面中能找到 LINE,就可以直接开启分身账号,无需依赖提示信息。 使用前的注意事项 总结 Galaxy One UI 的 Dual Messenger 功能为用户提供了官方、安全的双开解决方案。即使提示信息暂时消失,只要设置页面中仍显示支持的应用,就可以正常使用分身账号功能。 在确认机型和系统支持后,即可轻松管理两个 LINE 账号,兼顾生活与工作的不同需求,无需依赖第三方分身工具,整体体验更加稳定和安心。

使用 Docker 快速搭建 Whisper 网页音频转写服务(附登录保护思路)

在需要进行多语言音频转写时,OpenAI Whisper 模型提供了极高的准确率和多语言支持。为了更方便地部署到服务器并供多人使用,结合 Docker 容器技术可以快速搭建一个带网页界面的语音识别服务。 本教程以 whisper-webui 项目为核心,结合 NVIDIA GPU(如 GTX 1080)加速推理,构建一个可上传音频、自动或手动选择语言并返回转写结果的完整服务。 💡 准备条件 ✅ NVIDIA 驱动与 CUDA 配置检查 首先验证 GPU 是否正常识别。 nvidia-smi 如果显示显卡信息,说明驱动配置无误。 ✅ Docker 与 NVIDIA Container Toolkit 安装 在服务器上安装 Docker: curl -fsSL https://get.docker.com | bash 安装 NVIDIA Container Toolkit 以支持容器内调用 GPU: distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey …

Whisper 服务器 + 网页前端完整安装教程

🎯 功能目标 ✅ 服务器上运行 Whisper(用 GPU 加速)✅ 网页界面登录(账号密码)✅ 上传音频文件进行识别✅ 可选语言(或自动检测)✅ 返回文本结果 🟢 一、服务器准备 1️⃣ 硬件 2️⃣ 驱动 & CUDA 安装 NVIDIA 驱动 + CUDA(以 Ubuntu 为例): sudo apt updatesudo apt install nvidia-driver-535 nvidia-cuda-toolkit 验证: nvidia-smi 🟢 二、Python 环境 1️⃣ 安装 Python 建议 Python 3.9+ sudo apt install python3 python3-venv python3-pip …

Nextcloud 插件或系统更新中断后的应对与救援方法

在使用 Nextcloud 时,如果遇到在线更新(尤其是大型插件如 Recognize)过程中超时或页面卡住,往往会感到紧张。但其实只要有基本的备份和 SSH 访问权限,大多数情况下都可以安全救回。这里整理一篇总结文章,记录应对和修复思路,供参考。 1️⃣ 不要立即刷新或关闭 即使浏览器显示卡住,后端的 PHP 进程通常仍在执行。此时如果频繁刷新页面或强行中断,反而更容易导致数据库或文件结构混乱。 2️⃣ 检查维护模式 Nextcloud 更新时会自动进入维护模式。可以在服务器中执行以下命令确认: sudo -u www-data php occ maintenance:mode –status 如果显示 enabled,说明更新流程还未完全结束。 3️⃣ 查看更新日志 更新流程会在 data/updater-xxxx/ 目录中生成 updater.log 文件(xxxx 为随机字符串)。 可以查看最后 50 行日志内容,判断是否还有进行中的任务: tail -n 50 /path/to/nextcloud/data/updater-xxxx/updater.log 若日志持续更新,说明后端仍在执行;若长时间没有新内容,可能已经中断。 4️⃣ 使用命令行恢复更新 如果确认更新进程已停止,可以尝试使用命令行继续完成: sudo -u www-data php occ upgrade 针对插件,也可以单独更新: …

某型号苹果一体机在 Arch Linux 上配置无线网卡的全过程记录

近期某型号苹果一体机,在 Arch Linux 系统上配置无线网卡时遇到了一些曲折,最终通过移除黑名单并使用内核自带驱动成功解决,整理如下,供后续参考。 背景与硬件信息 该机型配备的无线网卡为 Broadcom BCM43602(802.11ac),PCI 总线识别信息如下: 03:00.0 Network controller: Broadcom Inc. and subsidiaries BCM43602 802.11ac Wireless LAN SoC (rev 01) Subsystem: Apple Inc. Device 016f Kernel modules: brcmfmac, wl 在 Arch Linux 系统中,这款无线网卡通常有两种驱动方案: 遇到的问题 系统早期曾通过 /etc/modprobe.d/blacklist-broadcom.conf 文件写入以下内容,对 Broadcom 系列驱动进行了黑名单设置: blacklist brcmfmacblacklist bcmablacklist b43blacklist b43legacyblacklist brcmsmacblacklist ssb 此举会导致内核自带的 …

Linux 系统中多蓝牙控制器的管理与默认控制器切换

在 Linux(基于 BlueZ 的系统)中,如果同时存在多个蓝牙控制器(例如主板内置蓝牙与 USB 蓝牙适配器),系统通常会根据内核枚举顺序自动指定默认控制器。这种自动分配并不总是符合用户期望,例如希望使用信号更稳定、性能更好的 USB 蓝牙适配器,而非内置蓝牙模块。 控制器的显示与默认情况 通过 bluetoothctl list 命令,可以查看当前系统检测到的蓝牙控制器。例如输出如下: Controller XX:XX:XX:XX:XX:XX Hostname #2 [default]Controller YY:YY:YY:YY:YY:YY Hostname 其中 [default] 表示系统当前使用的默认蓝牙控制器。如果有多个控制器,编号自动按检测顺序排列,内置控制器通常会优先编号并被设为默认。 修改 /etc/bluetooth/main.conf 在 /etc/bluetooth/main.conf 配置文件中,有如下可选参数: #ControllerMode = dual#DefaultAdapter = XX:XX:XX:XX:XX:XX 其中 DefaultAdapter 理论上用于指定默认控制器的 MAC 地址。然而,在大多数 Linux 桌面发行版中,这个参数实际上并不会生效。内核与 BlueZ 会根据硬件探测顺序优先指定第一个控制器,而忽略 DefaultAdapter 配置。 手动切换默认控制器 若希望使用指定的控制器,可以通过 bluetoothctl 工具手动切换: select XX:XX:XX:XX:XX:XX …

Linux 蓝牙多控制器切换与手写板自动断开调试笔记

在 Linux 系统上,如果同时存在内置蓝牙控制器和 USB 蓝牙控制器,蓝牙设备管理会变得复杂,尤其在涉及自动断开设备、切换控制器等需求时,常会遇到意想不到的情况。此文记录一次针对蓝牙手写板的调试过程,作为参考。 背景 需要使用脚本自动断开蓝牙设备(例如手写板),脚本中使用 bluetoothctl info 命令配合 expect 自动化交互流程。然而,在接入 USB 蓝牙控制器后,系统默认仍然使用内置控制器,导致脚本无法正常识别目标设备。 初步现象 执行 bluetoothctl info 时,输出的设备信息中,Device 行并不包含 (random) 或 (public) 标记。例如: Device AA:BB:CC:DD:EE:FF Generic Pen TabletName: Generic Pen TabletConnected: yes 脚本中原本使用的正则表达式如下: regexp {Device ([A-F0-9:]+) \(random\)} $output match mac 由于缺少括号标记,这条正则无法成功提取 MAC 地址。 修改正则 修订后的正则表达式改为不依赖括号标记,仅提取 MAC 地址: regexp {Device …