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

如何通过Bash命令获取系统托盘内最小化的应用程序?

识别系统托盘内最小化应用的可行方案

嘿,我懂你想给lemonbar、rofi或者dmenu做个专用命令,抓取系统托盘里最小化的应用——wmctrl和xdotool搞不定确实挺闹心的,试试下面这些工具和方法,应该能解决你的问题:

1. 用gdbus查询现代托盘应用(推荐)

现在绝大多数桌面环境的系统托盘都遵循Freedesktop StatusNotifierItem规范,这类应用会通过DBus注册自己,用gdbus就能直接枚举和获取它们的信息:

  • 先列出所有注册到托盘的应用:
    gdbus call --session --dest org.freedktop.DBus --object-path /org/freedktop/DBus --method org.freedktop.DBus.ListNames | grep -E 'org\.freedesktop\.StatusNotifierItem|org\.kde\.StatusNotifierItem'
    
  • 要获取某个应用的具体信息(比如窗口标题),把上面输出的<item-name>替换进去:
    gdbus call --session --dest <item-name> --object-path /StatusNotifierItem --method org.freedktop.StatusNotifierItem.GetTitle
    
  • 还能获取图标路径、窗口状态等更多信息,只需要调用对应的DBus方法就行,适合你后续给rofi/lemonbar做格式化输出。

2. 用xprop+xwininfo兼容旧版XEmbed托盘

有些老软件还在用传统的XEmbed托盘协议,这时候可以用X11工具链来抓取:

  • 先找到系统托盘的窗口ID:
    xprop -root | grep _NET_WM_SYSTEM_TRAY
    
  • 列出托盘里的所有子窗口(这些就是最小化到托盘的应用窗口):
    xwininfo -children -id <tray-window-id>
    
  • 再用xprop获取子窗口的详细信息,比如应用名称:
    xprop -id <child-window-id> | grep _NET_WM_NAME
    

3. 专用工具:systrayctl或trayiconviewer

如果不想自己写脚本解析,直接用专门的托盘管理工具更省心:

  • systrayctl:轻量级命令行工具,直接运行systrayctl list就能输出托盘里的所有应用,格式简洁,很适合直接喂给rofi/dmenu;还支持触发窗口恢复操作。
  • trayiconviewer:同样是命令行工具,能列出托盘图标对应的应用信息,输出可定制。

你可以根据自己的需求选择方案,比如用gdbus的话,配合awk/sed就能把输出整理成rofi需要的菜单格式,结合图标路径还能在lemonbar里显示托盘图标~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:20:24