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

AwesomeWM:统计系统托盘图标数量并隐藏空托盘

解决空系统托盘占用空间的问题

要实现空托盘时自动隐藏,核心是实时监控托盘内图标数量,根据数量切换托盘可见性,以下是具体实现方案:

1. 统计托盘图标数量

系统托盘遵循Freedesktop规范,可通过X11工具查询图标数量:

  • 用xprop获取托盘窗口的_NET_CLIENT_LIST属性,该属性包含所有嵌入托盘的图标窗口ID,统计ID数量就是图标数:
    # 先通过wmctrl找到托盘窗口ID(替换为你的托盘窗口名称,比如Polybar-tray)
    TRAY_WINDOW_ID=$(wmctrl -l | grep "Polybar-tray" | awk '{print $1}')
    # 统计图标数量
    TRAY_ICON_COUNT=$(xprop -id $TRAY_WINDOW_ID _NET_CLIENT_LIST | wc -w)
    
  • 部分桌面环境也可以通过专属工具查询,但基于X11属性的查询是通用可靠方案。

2. 自动切换托盘可见性

以i3+Polybar为例,写个监控脚本自动调整托盘模块的可见性:

#!/bin/bash
CONFIG_PATH=~/.config/polybar/config.ini
TRAY_WINDOW_NAME="Polybar-tray"

while true; do
    TRAY_WINDOW_ID=$(wmctrl -l | grep "$TRAY_WINDOW_NAME" | awk '{print $1}')
    if [ -z "$TRAY_WINDOW_ID" ]; then
        sleep 2
        continue
    fi
    TRAY_ICON_COUNT=$(xprop -id $TRAY_WINDOW_ID _NET_CLIENT_LIST | wc -w)
    
    if [ $TRAY_ICON_COUNT -eq 0 ]; then
        sed -i 's/^visibility = true/visibility = false/' $CONFIG_PATH
    else
        sed -i 's/^visibility = false/visibility = true/' $CONFIG_PATH
    fi
    # 刷新Polybar使配置生效
    polybar-msg cmd restart
    sleep 2
done

将脚本保存为tray-monitor.sh,添加可执行权限后,加入i3启动项(在~/.config/i3/config中加exec --no-startup-id ~/tray-monitor.sh)。

如果你用的是Python的pystray库,直接通过API操作更简单:

import pystray
import time
from threading import Thread
from PIL import Image

def monitor_tray(tray):
    while True:
        # 直接获取托盘内图标数量
        if len(tray.icon_list) == 0:
            tray.visible = False
        else:
            tray.visible = True
        time.sleep(1)

# 初始化托盘示例(替换为你的实际初始化逻辑)
icon = Image.open("icon.png")
tray = pystray.Icon("test", icon)

# 启动监控线程
Thread(target=monitor_tray, args=(tray,), daemon=True).start()

# 运行托盘
tray.run()

关键提示

  • 不同托盘工具的窗口名称/属性可能不同,需要根据自己的环境调整wmctrl的过滤条件。
  • 监控间隔设为1-3秒即可,避免过度占用系统资源。

内容的提问来源于stack exchange,提问作者Mario Davó

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:18:23