为多台 Linux 主机统一设计配置文件备份工具

在维护多台 Linux 主机时,修改配置文件看似简单,真正容易出问题的往往是修改之前的备份。 常见做法是: 或者: 这些方式虽然能够保留内容,但仍存在几个问题: 为了让多台不同发行版、不同用途的 Linux 主机使用同一套规则,可以把备份逻辑封装成一个系统级命令。 备份规则 工具需要遵守以下原则: 核心流程如下: 与普通 cp 备份相比,这种方法有一个重要区别: 因此,历史备份才是真正的原文件本体。 封装成系统命令 工具命令名称已做脱敏处理,例如: 在常规 Linux 服务器和桌面系统中,可安装到: 在部分精简系统或嵌入式发行版中,也可以根据目录布局安装到: 只要安装目录位于 PATH 中,使用方式就完全一致。 当当前目录明确时,优先进入配置文件所在目录,再使用相对文件名: 这种方式比反复输入较长的绝对路径更方便,也降低了人工输入错误。 只有当前目录不明确、跨目录操作或存在歧义时,才需要使用绝对路径: 脚本设计中的安全边界 一个配置文件备份工具不应该承担过多职责。 它只负责: 它不应该: 尤其是符号链接需要谨慎处理。 例如: 如果直接对符号链接执行备份,保存下来的可能只是链接本身,而不是目标文件内容。为了避免产生“看似备份成功,实际没有备份配置内容”的情况,第一版工具直接拒绝符号链接更安全。 为什么要加入回滚机制 备份流程包含两个关键步骤: 如果第二步失败,原路径会暂时不存在。 失败原因可能包括: 因此,脚本需要记录当前执行阶段。 如果原文件已经移动,但工作副本尚未创建成功,就应尝试: 恢复原始状态。 回滚机制不能保证应对所有底层文件系统故障,但至少能够处理大多数普通中断和复制失败。 不同 Linux 系统之间的兼容问题 同一个 Shell 脚本部署到多种 Linux …

OpenClaw 三个 Session 同时断线之后:一次树莓派内存回收风暴的无重启救援

一台配备 8GB 内存的树莓派正在运行 OpenClaw,同时有三个 Session 执行任务。系统本身仍能通过 SSH 登录,基础命令也能运行,但三个 Session 突然全部显示 disconnected,网页控制界面几乎失去响应。 过去遇到这种情况,最直接的处理方式往往是强制断电重启。但这一次没有立即重启,而是保留现场、检查进程和内核状态,最终成功让原有 Session 自动恢复,正在执行的任务也没有因为重启而被强制中断。 整个过程展示了一个很典型、也很容易被误判的问题: 系统看起来像“死机”,实际上并没有发生 OOM Kill,而是陷入了由内存软限制、页面回收和低速存储共同造成的内存回收风暴。 一、故障现象 故障出现时,OpenClaw 网页端的三个 Session 同时断线,但操作系统仍然可访问。 系统状态大致如下: OpenClaw 服务仍显示: 进程列表中,大量 openclaw 和 openclaw-hooks 进程处于 D 状态,等待位置包括: 这几个信息非常关键。 D 表示不可中断睡眠,通常意味着进程正在等待块设备、文件系统或内核内存回收操作。进程没有退出,也不代表程序逻辑已经崩溃,只是暂时无法获得需要的资源。 二、首先确认:有没有发生 OOM Kill 面对内存不足,首先需要判断的是: 内核有没有真正杀死 OpenClaw 或 Session 对应的进程? 检查内核日志: 结果没有任何输出。 随后检查 OpenClaw 服务对应 …

Linux 为什么也能运行 Windows 游戏:Steam Proton 兼容层原理简介

许多电脑游戏只提供 Windows 版本,但这并不意味着它们一定无法在 Linux 系统上运行。 目前,Linux 玩家最常使用的方案之一,是 Steam 提供的 Proton。它可以让大量 Windows 游戏直接在 Linux 环境中运行,而且通常不需要另外安装完整的 Windows 系统。 Proton 是什么 Proton 是 Valve 为 Steam 开发和维护的一套游戏兼容工具。 它以 Wine 为基础,并结合了多种专门面向游戏的组件和补丁,用来处理 Windows 游戏依赖的系统接口、图形接口、声音、输入设备和网络功能。 从结构上可以简单理解为: Windows 游戏 → Proton 兼容层 → Linux 系统 → 硬件 游戏仍然是原本的 Windows 版本,但其调用的 Windows 功能会由 Proton 转换或重新实现。 它不是虚拟机 Proton 与传统虚拟机有明显区别。 …

Windows 运行安卓应用:从重点功能到正式退场

Windows 11 发布初期,微软曾把“直接运行安卓应用”作为一项重要卖点。 这套功能名为 Windows Subsystem for Android,简称 WSA。它的目标,是让安卓应用不再只能运行在手机或传统模拟器中,而是可以像普通 Windows 软件一样出现在桌面、开始菜单和任务栏里。 从技术构想到实际体验,WSA 一度代表了 Windows 与移动应用生态进一步融合的可能性。 但几年之后,微软最终停止了这项功能。到 2025 年,WSA 和配套的 Amazon Appstore Windows 版本正式结束支持。 这项曾经被寄予厚望的功能,最终没有成为 Windows 的长期组成部分。 什么是 Windows Subsystem for Android Windows Subsystem for Android 是微软为 Windows 11 提供的一套安卓运行环境。 它并不是简单地把手机画面投射到电脑上,也不是传统意义上的安卓模拟器。它会在 Windows 内部运行一套经过适配的 Android 系统环境,再让安卓应用以独立窗口的形式显示出来。 从用户角度看,安装后的安卓应用可以: 用户不需要每次先打开一个完整的安卓模拟器界面,再从模拟器内部启动应用。 这种使用方式更接近“安卓应用已经成为 Windows 应用的一部分”。 微软为什么使用亚马逊应用商店 …

从 KDocker 迁移到 KWin Minimize to Tray:KDE Plasma Wayland 下的托盘化改造

在 KDE Plasma 从 X11 迁移到 Wayland 之后,一些曾经依赖 X11 窗口属性的工具会逐渐失去作用。KDocker 就是典型例子:它可以在 X11 环境中把普通窗口“塞进”系统托盘,但面对原生 Wayland 窗口时,这种外部包装方式已经不再可靠。 本文记录一次完整迁移过程,目标是让两个应用在 KDE Plasma Wayland 下获得统一的托盘行为: 涉及的应用类型包括: 整个迁移过程遵循三个原则: 一、旧方案的问题在哪里 旧方案的结构大致如下: KDocker 在 X11 下通常通过窗口类、窗口 ID 和窗口管理协议操作应用窗口,达到以下效果: 这种方式在 X11 中相对直接,但 Wayland 的安全模型不同: 因此,在原生 Wayland 环境中继续维护 KDocker,不仅效果不稳定,还会引入额外的 XWayland 依赖和窗口识别问题。 正确方向不是继续修补 KDocker,而是: 二、迁移顺序非常重要 这类迁移最危险的操作顺序是: 一旦原有 Desktop entry 直接调用 KDocker,先卸载软件包就会让应用入口失效。 …

KDE Wayland 开机自动弹出屏幕共享窗口:定位到 Rocket.Chat 的一次排障记录

切换到 KDE Plasma Wayland 后,有时会遇到这样一种现象:每次登录桌面,系统都会自动弹出一个屏幕共享选择窗口,要求选择显示器,并显示类似以下名称: 窗口底部还可能出现: 乍看之下,很容易怀疑 KDE Portal、PipeWire 或 Wayland 配置出现了问题。但在这次排查中,真正的问题并不在 KDE,而是一个基于 Electron 的聊天客户端在启动时错误地申请了屏幕捕获权限。 本文记录完整的判断过程、定位方法以及最终解决方案。 一、现象:切换到 Wayland 后,每次开机都要求共享屏幕 系统环境大致如下: 窗口要求用户选择: 即使完全没有进行视频会议、录屏或远程桌面操作,这个窗口仍然会自动出现。 这种现象通常说明: 某个登录自启动应用,在启动过程中调用了 Wayland 的屏幕捕获接口。 二、为什么切换到 Wayland 后才出现 X11 和 Wayland 对屏幕内容访问的安全模型完全不同。 X11 的方式 在传统 X11 环境中,桌面应用通常可以直接读取屏幕内容。录屏软件、截图工具、远程桌面和视频会议程序不一定需要经过系统级授权。 这也意味着,理论上任何连接到 X Server 的程序都可能读取其他窗口内容。 Wayland 的方式 Wayland 不允许普通应用随意读取整个屏幕。 应用如果需要: 通常必须通过以下组件: 因此,切换到 Wayland …

Wayland 的缩放为什么如此自然:高分屏桌面终于接近“原生体验”

在高分辨率显示器上使用 Linux 桌面时,缩放一直是一个绕不开的问题。 屏幕分辨率越来越高,27 英寸 4K 显示器已经十分常见。如果完全按照 100% 比例显示,文字、图标和窗口控件往往会小得难以使用;但如果简单地把画面放大,又可能出现字体模糊、窗口尺寸异常、应用界面比例不一致等问题。 在传统 X11 环境中,这类问题长期存在。相比之下,Wayland 下的软件缩放已经能够呈现出一种非常接近原生的观感:界面不仅变大了,而且依然清晰、协调,甚至很难意识到系统正在进行缩放。 这种体验上的变化,并不只是“字体变大了一点”,而是整个桌面坐标体系和窗口绘制方式发生了改变。 一、高分屏真正的问题不是分辨率,而是像素密度 一块 27 英寸的 4K 显示器拥有 3840×2160 个物理像素。 如果桌面仍然按照传统 96 DPI 左右的尺寸逻辑显示,那么一个原本设计为 100 像素宽的按钮,在高像素密度屏幕上会变得非常小。虽然画面更加精细,但实际操作体验反而可能下降。 因此,高分屏系统需要同时处理两个概念: 例如,在 200% 缩放下,一个逻辑像素可以对应横向和纵向各两个物理像素。应用仍然认为自己绘制的是一个正常尺寸的窗口,但显示器会使用更多物理像素呈现它。 理想情况下,缩放后的窗口应该只是“更精细”,而不是“被拉大”。 Wayland 的优势,正是在于它能够更加系统地处理逻辑尺寸和物理尺寸之间的关系。 二、X11 缩放为什么经常显得不自然 X11 诞生于高分屏普及之前。它的许多核心设计都建立在较为固定的像素坐标基础上。 在 X11 环境中,窗口的位置和大小通常更接近物理像素概念。例如,一个窗口可能被明确放置在某个像素坐标,并拥有固定的像素宽度和高度。 当系统需要进行缩放时,桌面环境往往只能通过多个相互独立的机制进行补偿,例如: 这些方法并不是完全无效,但容易产生不一致。 典型问题包括: 因此,X11 下的高分屏配置往往像是在多个独立系统之间反复协调。 最终可以得到“能用”的结果,但很难真正做到统一。 三、Wayland 使用逻辑坐标管理桌面 …

KDE 窗口规则迁移到 Wayland:WM_CLASS、逻辑坐标与缩放陷阱

引言 KDE Plasma的窗口规则功能非常强大。 它可以让指定应用自动: 在X11环境中建立的大量窗口规则,切换到Wayland后可能出现: 原因通常集中在两个方面: 一、X11中的WM_CLASS X11窗口通常具有 WM_CLASS 属性。 可以使用: 点击窗口后获取类似: KDE窗口规则会使用这些信息识别应用。 规则文件中可能出现: 其中精确匹配意味着窗口身份必须完全一致。 二、Wayland中没有传统WM_CLASS 原生Wayland窗口不使用X11的 WM_CLASS。 应用会向合成器提供其他身份信息,例如应用ID。KWin会将这些信息映射到窗口规则界面中,仍可能显示为“窗口类”,但来源已经不同。 因此,同一个程序可能出现三种身份: 应用升级、切换启动参数或更换后端后,旧规则就可能无法匹配。 三、Electron和Chromium应用尤其容易变化 Electron和Chromium程序的窗口身份可能受到以下因素影响: 例如,同一个浏览器窗口可能分别呈现: 如果规则使用精确匹配: 任何细微变化都可能导致规则失效。 四、重新采集窗口属性 Wayland下不应继续依赖 xprop 获取原生窗口身份。 更合适的方法是: 然后点击目标窗口。 采集时应记录: 如果应用同时支持Wayland和XWayland,应确认当前窗口实际运行在哪种模式。 五、不要过度依赖窗口标题 窗口标题通常包含动态内容,例如: 如果规则使用精确标题匹配,很容易失效。 更合理的匹配优先级通常是: 六、Wayland使用逻辑坐标 假设显示器物理分辨率为: 缩放为: 逻辑桌面尺寸约为: Wayland下,KWin窗口位置和大小通常基于逻辑像素。 如果旧X11规则中写着: 这些值可能是按照4K物理像素设计的。 迁移到1.5倍缩放的Wayland后,同样数值会被解释为逻辑像素,窗口可能变得非常大,甚至超出屏幕边界。 七、如何换算旧坐标 简单情况下,可以使用: 例如: 原尺寸: …

切换到 Wayland 后,为什么仍然应该保留 XWayland

引言 在Linux桌面切换到Wayland后,经常会看到名为: 的进程。 这容易引发一个误解:既然已经使用Wayland,为什么系统里仍然运行X11组件?是否应该删除XWayland,才能获得“纯Wayland”环境? 答案通常是否定的。 XWayland不是完整的X11桌面会话,而是Wayland环境中的兼容层。保留它,并不会阻止原生Wayland应用运行,反而可以保证大量尚未完成迁移的应用继续正常使用。 一、XWayland是什么 传统X11应用需要连接X Server。 Wayland桌面没有传统意义上的全局X Server,因此需要一个兼容服务接收X11协议,再把窗口交给Wayland合成器显示。 这个兼容服务就是XWayland。 运行路径大致如下: 在KDE Plasma中,Wayland合成器是KWin。 因此,XWayland只是KWin管理下的一个兼容组件。 二、XWayland不等于X11桌面会话 完整X11桌面会话通常运行: Wayland会话运行: 即使Wayland会话中存在: 当前桌面仍然是Wayland。 可以检查: 如果结果为: 并且运行的是: 就说明整个桌面由Wayland管理。 三、为什么XWayland进程可能一直存在 某些桌面环境会在登录后提前启动XWayland,而不是等第一个X11应用出现后再启动。 因此: 只能证明兼容服务已经准备好,不能单独证明当前一定有X11应用正在运行。 判断是否存在实际X11客户端,还需要: 四、哪些应用可能仍然需要XWayland 1. 老旧X11程序 部分多年未更新的应用没有原生Wayland支持,只能连接X Server。 2. 部分Electron程序 较新的Electron可以使用Wayland,但一些应用可能: 3. Wine和特殊兼容程序 部分Wine应用、游戏启动器和旧图形工具仍可能通过XWayland工作。 4. 输入法兼容路径 某些旧程序仍通过XIM输入中文或日文。此时需要: 并依赖XWayland提供X11环境。 5. 旧自动化或窗口工具 某些脚本依赖: 它们可能只能操作XWayland窗口。 五、保留XWayland是否会降低Wayland安全性 …

KDE Plasma Wayland 下配置 Fcitx5:environment.d、KWin 与 XWayland

引言 在KDE Plasma从X11切换到Wayland后,Fcitx5输入法经常出现一种看似矛盾的状态: 问题的根源在于:Wayland、XWayland、Qt、GTK和XIM使用的输入法路径并不完全相同。 正确配置不应只是把所有变量都全局导出,而应明确每一条输入路径的用途。 一、原生Wayland输入法如何工作 在Wayland环境中,输入法通常通过Wayland输入法协议与合成器协作。 KDE Plasma中的合成器是KWin。 Fcitx5应在: 中启用。 这样KWin可以把Fcitx5作为Wayland输入法客户端启动,并为它提供需要的输入法协议连接。 这部分不是传统的XIM环境变量机制。 二、XWayland应用仍需要XMODIFIERS 旧X11应用运行在XWayland中时,通常仍然通过XIM与输入法通信。 因此需要: 注意模块名称是: 而不是: Fcitx5是程序的代际名称,但XIM和工具包模块使用的名字仍然是 fcitx。 三、为什么使用environment.d 推荐的用户级配置路径是: 例如创建: 内容: environment.d 是systemd提供的正式用户环境配置机制。 它适合Wayland桌面的原因包括: 修改后通常需要注销重新登录或重启,才能让新会话中的程序获得变量。 四、为什么不推荐全局设置GTK_IM_MODULE 传统配置经常包含: 这在X11环境中非常常见。 但在现代Wayland环境中,原生GTK应用可以通过Wayland输入法协议与Fcitx5配合。全局强制工具包模块,可能让原生Wayland应用绕过更合适的协议路径。 潜在问题包括: 因此,不应仅为了让变量“看起来完整”而全局设置。 五、为什么不推荐全局设置QT_IM_MODULE 同样,传统Qt配置常见: 但KDE原生Wayland应用通常应优先通过KWin和Wayland输入法协议工作。 全局强制 QT_IM_MODULE 可能导致: 更合理的原则是: 六、按应用设置兼容变量 某个旧Qt应用无法输入时,可以单独启动: 某个旧GTK应用无法输入时,可以使用: 如果应用通过桌面文件启动,可以复制相应 .desktop 文件到: 再修改 Exec=: 这样不会影响整个Wayland会话。 …