# gxde-top-panel-datebar **Repository Path**: ca1e/gxde-top-panel-datebar ## Basic Information - **Project Name**: gxde-top-panel-datebar - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-09-22 - **Last Updated**: 2026-10-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # datebar — GXDE 顶栏日期插件 *top-panel2.0已经内置自定义时钟格式支持日期显示,本插件归档* 在 GXDE OS 顶栏时钟左边显示 `2026年9月22日 周二`。 为什么需要它:系统自带的顶栏时钟插件 `/usr/lib/gxde-top-panel/plugins/libdatetime-top-panel.so` 只绘制 `HH:mm`。上游源码(`gitee.com/GXDE-OS/gxde-top-panel-plugins` 分支 `d20`, `plugins/datetime-top-panel/datetimewidget.cpp` 第 166-168 行)里日期绘制那段是被注释掉的, gsettings(`com.deepin.dde.toppanel` 的 `plugin-settings`)、dconfig、控制中心都没有能打开它的开关。 插件装在用户目录,不需要 root,不覆盖任何系统文件: ``` ~/.local/lib/gxde-top-panel/plugins/libdatebar.so ``` ## 免构建:直接用仓库里的预编译二进制 `prebuilt/libdatebar.so` 由本仓库同一份源码构建,装上去即可用: ```sh mkdir -p ~/.local/lib/gxde-top-panel/plugins cp prebuilt/libdatebar.so ~/.local/lib/gxde-top-panel/plugins/ ./restart-panel.py $(pgrep -x gxde-top-panel | head -1) ``` 构建环境:GXDE OS 25.5(Debian trixie 底)、Qt 6.8.2、x86-64 ELF、未 strip。运行时需要 Qt6 同主版本(`libqt6core6` / `libqt6gui6` / `libqt6widgets6`,GXDE/DDE 桌面自带)。 发行版或 Qt 主版本不一致时请按下面「构建」自行编译。 SHA256 校验: ``` 2e1b6706bd7378489b1290c3a6f832cfb51fc676ac1e0c5c68afd3314cc7dce2 prebuilt/libdatebar.so ``` ## 依赖 `qt6-base-dev`、`g++`、`qmake6`、`make`。用 qmake 构建,不需要 cmake,也不需要 DTK (接口是纯虚类,只需 Qt6 Widgets)。 插件接口头文件随仓库提供在 `inc/`(来源见文末「许可」),所以克隆下来即可构建; 也可以 `apt install gxde-top-panel-dev`,改用 `/usr/include/gxde-top-panel`。 ## 构建 ```sh qmake6 datebar.pro && make -j4 # 产物 build/libdatebar.so ``` ## 安装 / 更新 ```sh mkdir -p ~/.local/lib/gxde-top-panel/plugins cp build/libdatebar.so ~/.local/lib/gxde-top-panel/plugins/ ./restart-panel.py $(pgrep -x gxde-top-panel | head -1) ``` 面板只在启动时扫描插件目录(没有目录监视),换了 `.so` 必须重启面板。 `restart-panel.py` 取旧面板进程的环境变量(`/proc//environ`)来启动新面板, 保证 DBus、显示等变量一致,并双重 fork + setsid 脱离当前终端,日志追加到 `/tmp/gxde-top-panel.log`(面板输出很啰嗦——全局菜单每刷新一次就打几行——所以日志超过 5 MB 会自动轮转成 `/tmp/gxde-top-panel.log.1`,上限可用环境变量 `PANEL_LOG_MAX_BYTES` 调整)。 加 `--dump-env` 会额外把旧环境变量转存到 `/tmp/panel_env.json` (含会话变量,排查完请删掉)。不要用 `killall` 之后就地在终端里启动:那样新面板挂在 终端进程下,终端一关面板就没了。 **k9 看门狗**:GXDE 的 gxde-k9 每 5 秒检查面板在不在(脚本 `~/.local/share/GXDE/gxde-k9/slimy/gxde-top-panel.slimy`,PID 文件在 `/tmp/GXDE/gxde-k9//gxde-top-panel.pid`)。手动 kill 后面板换了 PID,PID 文件即失效, k9 会尝试自己再拉起一个面板;而那个新实例会被 DTK 的单实例机制挡掉、立刻退出,于是形成 每 5 秒一次的失败启动循环,日志几分钟就能涨到几 MB。`restart-panel.py` 会在新面板起来后 把 PID 写回该文件,所以别绕过它手工 kill。 **「忽略 dde-dock」会把底栏顶到屏幕顶部**:gxde-top-panel 1.0.8 的 `TopPanelSettings::resetFrontendGeometry()`(`frame/util/TopPanelSettings.cpp`)里, 只要 `ignoreDock == true` 就会调用 dock daemon 的 `setPosition(Top)`、`setHideMode(KeepShowing)` 和 `SetFrontendWindowRect()`——而这是个布局重算函数,顶栏每次启动、切主题、改任意设置都会走到, 于是底栏被推到顶部,位置还会持久化进 gsettings(`com.deepin.dde.dock position` 由 `bottom` 变成 `top`),只能手动改回来。装插件必须重启顶栏,所以先关掉顶栏设置里的「忽略 dde-dock」 (即 `~/.config/dde-top-panel/top-panel.conf` 里 `windowControl/ignoreDock=false`)。 关掉它的唯一影响是:底栏竖在左/右侧时顶栏会缩短让出底栏宽度;底栏在底部时两者没有差别。 若已中招,改回来:`busctl --user set-property top.gxde.daemon.dock /top/gxde/daemon/dock top.gxde.daemon.dock Position i 2`。 ## 改显示格式 `datebar.cpp` 里改格式串那一行即可(Qt 格式;必须用 `QLocale::system()`, `QDateTime::toString()` 是 C locale,会输出英文 `Tue`): | 格式串 | 显示 | | --- | --- | | `yyyy年M月d日 ddd` | 2026年9月22日 周二 ← 默认 | | `ddd M月d日` | 周二 9月22日 | | `MM-dd ddd` | 09-22 周二 | | `dddd M月d日` | 星期二 9月22日 | 改完重新 `qmake6 && make`、覆盖 `.so`、重启面板。 ## 位置 `datebar.cpp` 的 `SORT_KEY_DEFAULT = 4`。插件项按 `itemSortKey` 升序从左到右排列, 内置时钟插件(datetime)缺省是 5,因此 4 落在时钟紧左边;其它内置插件用 1~3 和缺省 1。 想让日期更靠左就把这个值调小。字号在 `TEXT_PIXEL_SIZE = 14`。 字色每秒从面板调色板重取一次(取法与内置时钟一致),跟随深/浅色主题,切主题不用重启面板。 ## 行为 - 悬停:显示完整日期(`QLocale::LongFormat`)。 - 单击:`dbus-send` 调用 `com.deepin.Calendar.RaiseWindow`,打开/置顶 GXDE 日历(与点时钟一致)。 - 面板的插件设置里可以禁用(`enable` 键,缺省显示)。 - 已知限制:拖动排序不会持久化(未实现 `setSortKey`)。要固定顺序就改源码里的 `SORT_KEY_DEFAULT` 重建。 ## 卸载 ```sh rm ~/.local/lib/gxde-top-panel/plugins/libdatebar.so ./restart-panel.py $(pgrep -x gxde-top-panel | head -1) ``` ## 验证记录(2026-09-22,GXDE OS 25.5 / Qt 6.8.2) - 面板日志出现 `"DockPlugin" init plugin: "datebar"`、`init plugin finished: "datebar"`、 `load plugins item: "datebar" "datebar" QLabel(0x...)`。 - 抓屏确认顶栏右侧顺序为:CPU/MEM → 输入法图标 → 托盘 → `2026年9月22日 周二` → `11:00`, 无裁剪、无重叠,字色字号与内置时钟一致。 - 日志里 `Cannot find gsettings, schema_id: "com.deepin.dde.dock.module.datebar"` 无害: datetime、tray、power 等每个插件都有同一行。 - `prebuilt/libdatebar.so`(SHA256 `2e1b6706…`)已装进用户插件目录实测加载:面板日志出现 `load plugins item: "datebar"`,抓屏可见日期,且与本地构建产物哈希一致。 - 未验证:悬停提示的实际渲染、单击唤出日历(`/usr/share/dbus-1/services/com.deepin.Calendar.service` 存在,命令可用)。 ## 许可 本插件以 **GPL-3.0-or-later** 发布,全文见 `LICENSE`。 `inc/` 下的三个接口头文件(`pluginsiteminterface.h`、`pluginproxyinterface.h`、`constants.h`) 取自 GXDE/DEEPIN 的 `gxde-top-panel-dev` 1.0.8 包(版权归 Deepin Technology 等所有,GPL-3), 随仓库提供只为免 root 直接构建;文件内保留原始版权与许可声明。