惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
C
Cisco Blogs
The Hacker News
The Hacker News
T
Tor Project blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Register - Security
The Register - Security
云风的 BLOG
云风的 BLOG
Simon Willison's Weblog
Simon Willison's Weblog
P
Palo Alto Networks Blog
Vercel News
Vercel News
C
CERT Recently Published Vulnerability Notes
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
I
Intezer
aimingoo的专栏
aimingoo的专栏
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
Microsoft Security Blog
Microsoft Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
P
Proofpoint News Feed
P
Proofpoint News Feed
B
Blog
T
Threat Research - Cisco Blogs
博客园 - 叶小钗
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
Engineering at Meta
Engineering at Meta
G
Google Developers Blog
PCI Perspectives
PCI Perspectives
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
Application and Cybersecurity Blog
Application and Cybersecurity Blog
MyScale Blog
MyScale Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Schneier on Security
Schneier on Security
N
News | PayPal Newsroom
C
Cybersecurity and Infrastructure Security Agency CISA
H
Help Net Security
博客园 - 聂微东
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
GRAHAM CLULEY

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
如何修复Waybar微信图标错误
2024-01-08 · via mephisto.cc

Waybar 是 Sway 或者 Wayland compositors 的状态栏组件,状态栏在英文中叫 status bar,好比吧台上的酒水一样,方便取用?对于软件来说就是方便展示核心系统信息、快速和不同软件交互。

waybar

waybar 中有一个很重要的模块叫 taskbar,即任务栏,Windows 用户应该都知道,Mac 用户可以理解为 Dock,下图中间所示(wabar 可以配置为左/中/右显示)。

waybar taskbar

作用就是点击软件图标,切换不同软件到前台。

在我的 labwc 环境下,各种 Linux 的软件图标都显示正确,唯独 wine 的微信图标显示错误。waybar 和 wine system tray 并不能和谐共存,启动微信的时候,会单独展示个窗口(Gnome 环境没有问题)。

wine system tray wechat

明显跑偏了,好在可以关闭该窗口,问题不大。

回到正题,waybar 的 taskbar 中,微信图标显示错误,而且错得很离谱,会载入 synaptic 的图标,旧版本的 waybar 是载入另外一图标,反正都是错的。

经过几天的排查(不连续,有空到时候才想起来处理),终于找到了修复办法,下面是解决过程记录。

1. 首先确认到底载入了什么错误图标

遇到程序问题,情况允许的话,一般开启 debug 模式是个好习惯,waybar 也不例外。

终端直接运行上述命令,在标准输出中,逐行查看,即可看到载入了错误的 synaptic 图标。

1[2024-01-06 13:53:30.900] [debug] Task (12) overwriting app_id 'unknown' with 'wechat.exe'
2[2024-01-06 13:53:30.905] [debug] Task (12) 微信 [wechat.exe] <Amif> Loaded icon 'synaptic'
3[2024-01-06 13:53:30.905] [debug] Task (12) 微信 [wechat.exe] <Amif> changed
4[2024-01-06 13:53:30.905] [debug] Task (10) tmux ~ [Alacritty] <aMif> chang

修复后正确的载入是 E282_WeChat.0

1[2024-01-06 16:37:20.663] [debug] Task (7)  [unknown] <amif> Loaded icon from resource
2[2024-01-06 16:37:20.663] [debug] Task (0) overwriting app_id 'unknown' with 'wechat.exe'
3[2024-01-06 16:37:20.665] [debug] Task (0) 微信 [wechat.exe] <amif> Loaded icon 'E282_WeChat.0'
4[2024-01-06 16:37:20.665] [debug] Task (0) 微信 [wechat.exe] <amif> entered output 0x564841c811a0
5[2024-01-06 16:37:20.666] [debug] Task (0) 微信 [wechat.exe] <amif> now visible on eDP-1
6[2024-01-06 16:37:20.666] [debug] Task (0) 微信 [wechat.exe] <amif> changed

2. 如何修复

wine 微信在 waybar 下,app_id 被识别为 wechat.exe,具体怎么来的这要去翻看 waybar 的 C++源码,所谓少壮不努力,老大徒伤悲,C++上学时没有学好,看了个把小时,头晕眼花。一头扎进源码虽然治本,但是事后想还是有简便方法。

我按照自己理解的源码逻辑,把图标放在系统的各个位置都不起作用(肯定是代码理解错误了,也没办法回炉重造 😅)。反复试验,反复错误,仿佛走进了死胡同。

后来我想起 wofi 启动器里面图标正常显示,有了一些灵感。

wofi wechat

既然 wofi 识别没有问题,从.desktop 文件到图标的链路应该没有问题。

waybar 本身的嫌疑更大,但是从 debug 日志中也看不出来什么原因导致的,源码是看不动了。

lsof 查看系统图标缓存也是正常载入

1➜  ~ lsof -p 183863 |grep -i icon
2waybar  183863 mephisto  mem       REG               0,27    44472  904982 /usr/share/icons/hicolor/icon-theme.cache
3waybar  183863 mephisto  mem       REG               0,27   327184  160612 /usr/share/icons/Humanity/icon-theme.cache
4waybar  183863 mephisto  mem       REG               0,27   186604  503138 /usr/share/icons/Yaru/icon-theme.cache
5waybar  183863 mephisto  mem       REG               0,27   117372  852152 /usr/share/icons/Adwaita/icon-theme.cache
6waybar  183863 mephisto  mem       REG               0,27     6900  503298 /usr/share/icons/Yaru-purple/icon-theme.cache

最终,我想到了 strace,排查启动时到底按照什么顺序载入了什么文件。

上面会输出成吨的日志文件,还好我停止得快,更科学的用法参考这个文章

strace wechat

运气好搜索关键字 wechat 发现,waybar 一直在查找 wechat.exe.desktop 文件,而 wine 微信 启动文件叫 WeChat.desktop,找不到指导文件,载入奇怪图标也就不足为奇了。

最终解决办法是,按照 waybar 的逻辑重命名文件 😅

 1➜  applications pwd
 2/home/mephisto/.local/share/applications
 3➜  applications mv WeChat.desktop wechat.exe.desktop
 4➜  applications cat wechat.exe.desktop
 5[Desktop Entry]
 6Name=WeChat
 7Exec=env WINEPREFIX="/home/mephisto/.wine" wine C:\\\\ProgramData\\\\Microsoft\\\\Windows\\\\Start\\ Menu\\\\Programs\\\\WeChat\\\\WeChat.lnk
 8Type=Application
 9StartupNotify=true
10Path=/home/mephisto/.wine/dosdevices/c:/Program Files/Tencent/WeChat
11Icon=E282_WeChat.0
12StartupWMClass=wechat.exe

至于为什么 app_id 被识别为 wechat.exe,经测试和 StartupWMClass=wechat.exe 没有关系,一般来说 app_id 由 wayland compositors 传给 waybar, waybar 后续怎么操作得看它的源码。改不了 app_id,就只能改 desktop 文件名了。

waybar 根据 app_id wechat.exe 查找 desktop 文件,desktop 文件中的 Icon 决定载入的图标,再从 系统的各种 icons 路径中载入正确的图标。

wofi 是直接读取的 desktop 文件,启动文件的时候,搜索 desktop 中的 Name,启动对应程序,不存在找不到 desktop 文件的问题,启动器设计的时候,天生就是去找 desktop 文件。

waybar 的逻辑链路是:app_id > desktop file > icon,结合之前写得 快速隐藏和呼出终端,可见 app_id 是 wayland 下标识各种应用的,很关键,taskbar 自然也是通过 app_id 控制软件的各种行为。

结论,Linux 生态中 C 和 C++的成分很大,如果没有学好,碰到问题的时候,要走的弯路很多,如果能读懂源码,解决问题会快速精准很多,这才是真本事,当然只有部分人做 Linux 相关开发;另外,strace 命令在查找软件载入什么文件的时候很好用,往往有惊喜,输出很多的时候最好要先想办法过滤,而不是海量输出信息中搜索。

问题每天都会遇到,功夫在平时,分享出来,不是什么高深内容,但是的确填补了中文世界的小小空白,对后人有益。

2026 年 1 月 10 添加以下更新:

1. 先确认当前被识别的 app_id 是什么

使用 wlrctl window list 或者 wlrctl toplevel list 查看被窗口管理器识别的 app_id, 冒号前的就是对应的值。

1➜  ~ wlrctl window list
2dev.zed.Zed: mephisto.cc — waybar-wechat-icon.md
3firefox: 如何修复Waybar微信图标错误 |mephisto.cc — Mozilla Firefox
4com.mitchellh.ghostty: Godlike
5➜  ~ wlrctl toplevel list
6dev.zed.Zed: mephisto.cc — waybar-wechat-icon.md
7firefox: 如何修复Waybar微信图标错误 |mephisto.cc — Mozilla Firefox
8com.mitchellh.ghostty: Godlike

比如上面的输出中 ghostty 被识别的 app_id 为 com.mitchellh.ghostty

2. 确保 desktop 文件目中有对应的 desktop 文件

1➜  ~ fd com.mitchellh.ghostty.desktop ~/.local/share/applications/ /usr/share/applications/
2/usr/share/applications/com.mitchellh.ghostty.desktop

上面的 /usr/share/applications/com.mitchellh.ghostty.desktop 存在,图标就不会错误。假设 cs2 图标显示错误,通过 wlrctl 确定 cs2 是 app_id 的话,那么就在 desktop 目录中创建 cs2.desktop 文件,这样 waybar 就不会读错图标。

steam、dota2 和 cs2 图标错误,我都是这么修复的。