开发Cinnamon任务栏applet:如何重载代码使JS修改生效
Cinnamon 任务栏 JS Applet 高效代码重载方案
Cinnamon 加载 Applet 后会通过 GJS 引擎缓存已读取的 JS 模块,单纯移除再重新添加 Applet 只会销毁/创建实例,不会清理模块缓存,因此不会加载磁盘上的新代码,也完全不需要通过注销重登的方式验证修改,可按场景选择以下重载方案:
日常开发首选:单 Applet 定向重载(无桌面闪烁,速度最快)
这个方案只会重载你正在开发的目标 Applet,不影响其他桌面组件和运行中的程序:
- 第一步:查询当前运行的所有 Applet 列表,终端执行命令:
返回结果格式为元组列表,每个元组对应一个运行中的 Applet,结构为gdbus call --session --dest org.Cinnamon --object-path /org/Cinnamon --method org.Cinnamon.ListApplets(applet数字ID, 'applet的uuid', 所在面板区域编号),找到你开发的 Applet 对应的数字ID。 - 第二步:执行定向重载命令,将命令中的
<YOUR_APPLET_ID>替换为上一步查到的数字ID即可:gdbus call --session --dest org.Cinnamon --object-path /org/Cinnamon --method org.Cinnamon.ReloadApplet <YOUR_APPLET_ID>
如果嫌每次查ID麻烦,可以直接写个一键重载命令,把命令里的your-applet-uuid@dev替换成你自己的Applet的uuid,还可以存成shell别名,改完代码敲一次命令1秒内就能看到效果:
gdbus call --session --dest org.Cinnamon --object-path /org/Cinnamon --method org.Cinnamon.ReloadApplet $(gdbus call --session --dest org.Cinnamon --object-path /org/Cinnamon --method org.Cinnamon.ListApplets | grep -oP "[0-9]+(?=, 'your-applet-uuid@dev')")
全量重载场景:修改元数据/配置 schema 时使用
如果你修改了 Applet 的metadata.json/applet.json元数据、配置schema文件、注册了全局快捷键/DBus接口等定向重载无法完全清理残留的场景,不用注销重登:
- 直接按
Alt+F2调出Cinnamon的运行命令对话框,输入r后按回车,整个Cinnamon桌面运行时会在2秒内完成重启,所有组件都会从磁盘重新加载最新代码,已经打开的所有窗口完全不受影响,比重登效率高很多。
额外开发技巧
- 如果只修改了
stylesheet.css样式文件,完全不需要重载Applet,执行以下命令即可立刻刷新样式生效:gdbus call --session --dest org.Cinnamon --object-path /org/Cinnamon --method org.Cinnamon.LoadTheme - 开发阶段建议把Applet放在用户目录
~/.local/share/cinnamon/applets/下,不要放在系统目录/usr/share/cinnamon/applets/,前者修改代码不需要root权限,重载也不会出现权限问题。
内容的提问来源于stack exchange,提问作者user1658543
相关产品推荐
相关产品推荐

