You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否自定义GNOME Shell底部Panel?求实现代码(44.3版本)

在GNOME Shell 44.3中创建自定义底部Panel

完全可以实现——GNOME Shell的JS API支持直接创建独立的Panel容器,并且能通过配置让系统预留出面板空间,确保应用窗口不会覆盖它。下面是具体实现方案:

完整扩展代码

把以下代码作为GNOME Shell扩展的extension.js内容(适配GNOME 44.x版本),可以创建一个底部Panel,同时保留原有的左侧Dock和顶部面板:

const { Clutter, GObject, St } = imports.gi;
const Main = imports.ui.main;
const Panel = imports.ui.panel;

// 自定义底部Panel类
var BottomPanel = GObject.registerClass(
class BottomPanel extends Panel.Panel {
    _init() {
        super._init({
            style_class: 'bottom-panel',
            anchor: Clutter.ActorAnchor.BOTTOM, // 锚定到屏幕底部
            reactive: true,
            can_focus: true,
        });

        // 添加示例组件(这里是一个文本标签,你可以换成按钮、状态栏组件等)
        const demoLabel = new St.Label({
            text: '我的底部Panel',
            style: 'color: #ffffff; padding: 0 12px;'
        });
        this.add_child(demoLabel);

        // 将面板加入全局布局,关键配置确保窗口不覆盖
        Main.layoutManager.addChrome(this, {
            affectsStruts: true, // 核心:告知系统面板占用空间,调整窗口可用区域
            trackFullscreen: true, // 全屏应用时自动隐藏面板
        });

        // 适配屏幕尺寸变化
        this._resizeToMonitor();
        Main.layoutManager.connect('monitors-changed', () => this._resizeToMonitor());
    }

    _resizeToMonitor() {
        const primaryMonitor = Main.layoutManager.primaryMonitor;
        // 设置面板宽度为屏幕宽度,高度自定义(这里是32px)
        this.set_size(primaryMonitor.width, 32);
        this.set_position(0, primaryMonitor.height - 32);
    }
});

// 扩展激活时创建面板
function enable() {
    global.bottomPanel = new BottomPanel();
}

// 扩展禁用时销毁面板
function disable() {
    if (global.bottomPanel) {
        global.bottomPanel.destroy();
        global.bottomPanel = null;
    }
}

可选:自定义面板样式

在扩展的stylesheet.css文件中添加以下代码,可修改底部Panel的外观:

.bottom-panel {
    background-color: rgba(30, 30, 30, 0.9); /* 深灰半透明背景 */
    border-top: 1px solid rgba(255, 255, 255, 0.15); /* 顶部细边框 */
}

关键注意点

  • affectsStruts: true是必须的:这个参数让GNOME Shell将底部Panel的区域从窗口工作区中排除,彻底避免应用窗口覆盖面板。
  • 代码兼容GNOME Shell 44.3版本,不会影响原有的左侧Dock和顶部面板。
  • 你可以替换示例中的demoLabel,添加自己需要的组件(比如窗口列表、快捷按钮等),用法和你之前用Main.panel.addToStatusArea添加组件类似。

内容的提问来源于stack exchange,提问作者ladno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:56:18