使用符合 XDG 标准的配置文件(2024)

Hacker News Top 工具

摘要

wxWidgets 现在默认使用符合 XDG 标准的配置文件位置,并为现有应用程序提供迁移功能,从而在保持向后兼容性的同时提升了 Linux 兼容性。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/08 21:20

# 使用符合 XDG 标准的配置文件 - wxWidgets 来源:https://wxwidgets.org/blog/2024/01/using-xdg-compliant-config-files/ 发布于 2024 年 1 月 7 日 XDG 基础目录规范(https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)早已成为 Linux 下组织应用程序数据文件的标准。但不幸的是,wxWidgets 历史更为悠久:早在 1997 年添加配置文件支持时,通用的做法仍然是将这些所谓的“点文件”直接放在用户主目录下。因此,一个名为 `myapp` 的应用程序默认会使用 `~/.myapp` 作为配置文件,并且这个默认行为无法轻易更改——因为一旦改动,已有应用程序就会“丢失”其配置文件,从而激怒用户。 不过,如果这不是问题,应用程序可以(这其实也不是新功能,该函数已存在多年——感谢 Martin Kögler 的贡献)调用: `` wxStandardPaths::Get().SetFileLayout(wxStandardPaths::FileLayout_XDG); `` 从而将新创建的文件放在符合 XDG 规范的 `~/.config` 目录下(当然,如果定义了 `$XDG_CONFIG_HOME` 变量,则使用该变量指定的路径)。 对于新程序而言,这是一种简单且推荐的方式来使用标准位置。但问题并未完全解决:你首先需要知道这个函数才能在新应用中添加该调用;而对于已有应用,如何处理它们现有的安装依然是个麻烦问题。 那么,好消息来了:wxWidgets 近期有两项改动,终于彻底解决了这一问题。首先,从 wxWidgets 3.3.0 开始,即使没有使用 `FileLayout_XDG`,`wxFileConfig` 也默认将新文件创建在 `~/.config` 下——前提是主目录中不存在已有的点文件。与全局更改所有函数的文件布局不同,这一改动在大多数情况下向后兼容:如果主目录中已有点文件,仍会使用该文件。但若应用程序首次在新系统上运行,它将正确行事,避免用文件污染主目录,而是将文件创建在 `~/.config` 下。 其次,如果你希望即使对于应用的现有用户,也将其配置文件位置改为推荐路径,现在只需调用新的 `wxFileConfig::MigrateLocalFile()` 函数(https://docs.wxwidgets.org/latest/classwx_file_config.html#a11ccb0d85d3d5982130372b9a653d66d)即可:该函数如其名所示,将现有的本地配置文件迁移到新位置。它不仅限于此,但其预期用途当然是为尚未使用 XDG 的应用传入 `wxCONFIG_USE_XDG` 标志来调用它,如下所示: `` // 在应用程序启动早期执行此操作,在全局 wxConfig 对象创建之前。 const auto res = wxFileConfig::MigrateLocalFile("myapp", wxCONFIG_USE_XDG); `` 如果不存在现有的 `~/.config/.myapp` 文件,则此操作不执行任何动作;如果该文件存在,则会将其移动到新位置,即 `~/.config/myapp/myapp.conf`。或者说,它会尝试移动,但可能失败,因此你还需要检查错误,例如: `` if ( !res.oldPath.empty() ) { if ( res.error.empty() ) wxLogMessage("配置文件已从 \"%s\" 移动到 \"%s\"", res.oldPath, res.newPath); else wxLogWarning("迁移旧配置文件失败:%s。", res.error); } `` 如果迁移成功(通常应该如此),`wxFileConfig` 将默认使用新位置(符合 XDG 规范)的文件,你无需再做任何特殊处理。 --- 总之,`wxFileConfig` 的默认行为现已更改为大多数人所期望的样子:在正确位置创建新文件无需任何额外努力;而将现有文件移动到该位置也只需添加一个函数调用。然而,如果出于某种原因你希望保留旧行为,则需要在创建 `wxFileConfig` 时指定新的 `wxCONFIG_USE_HOME` 标志,以强制使用主目录存放配置文件,而不管其他设置。 希望这能帮助 wx 应用程序在 2024 年停止使用主目录中的配置文件! ## 评论

相似文章

你好,重获新生的“项目”目录

Lobsters Hottest

xdg-user-dirs 0.20 版本在 Linux 桌面环境中默认启用“项目”目录,为不属于其他类别的项目文件提供标准位置。该版本还包括对 Meson 构建系统的支持及安全修复。

使用 Wails 进行交叉编译(2025)

Hacker News Top

一位开发者在 Ubuntu 上测试交叉编译 Wails v2.11.0 Svelte 应用,成功构建了 Windows 和 Linux 的可执行文件/安装程序,并指出了 Linux 静态链接的问题。

Xfwl4 的首个预览版发布

Lobsters Hottest

Brian Tarricone 宣布推出 xfwl4 的首个预览版,这是 Xfce 的 Wayland 合成器,经过了六个月的工作,详细说明了已知缺失的功能和未来计划。

Hyprland 0.55 宣布将配置文件切换为 Lua

Hacker News Top

Hyprland 0.55 切换到基于 Lua 的配置文件,引入用户自定义布局、ICC 配置文件支持,以及各种滚动和渲染改进,同时包含若干破坏性变更。

使用 LXC 增强 X11 应用程序安全性

Hacker News Top

一份技术指南,介绍如何使用非特权 LXC 容器隔离 X11 应用程序(如网页浏览器),通过将容器 UID/GID 映射到未使用的主机范围来增强安全性。