用JSON脚本控制合成器:driftwm IPC与driftwm msg命令完全参考
【免费下载链接】driftwmA trackpad-first infinite canvas Wayland compositor.项目地址https://gitcode.com/gh_mirrors/dr/driftwm点击查看免费下载driftwm 是一款触控板优先的无限画布 Wayland 合成器它通过IPC进程间通信暴露了一个 Unix 域套接字让你能用一行纯JSON查询或控制正在运行的合成器内置客户端就是driftwm msg子命令——17 个命令覆盖相机、缩放、窗口焦点、截图、书签与订阅推送任何语言都能直接对接这套线协议。本文是面向新手和普通用户的 driftwm IPC 完全参考。 为什么需要 driftwm IPC传统合成器只靠键盘快捷键驱动而 driftwm 的无限画布天然适合程序化操作状态栏/仪表盘想显示当前聚焦窗口、相机位置、缩放级别自动化脚本批量整理窗口、定时截图整块画布、按应用名关闭进程跨语言集成线协议是一行一个 JSON 请求、一行一个 JSON 应答Python、Node、Rust 甚至socat都能说。协议细节见 docs/ipc.md命令的完整参数与 JSON 应答形状由 docs/cli.md 自动生成维护。 快速上手driftwm msg 第一条命令在 driftwm 会话内直接运行它会自动通过WAYLAND_DISPLAY找到本会话的套接字路径为$XDG_RUNTIME_DIR/driftwm/ipc-WAYLAND_DISPLAY.sock见 src/ipc/mod.rsdriftwm msg state # 打印相机、缩放与全部窗口清单 driftwm msg --json state # 原始 JSON 应答供脚本解析三个通用约定记住它们就掌握了 80% 的用法源码入口见 src/main.rs 的Msg分支约定说明无参读、有参写camera/zoom/focus/move/resize/opacity/pin/bookmark不带参数时是查询带参数时是设置--json打印原始 JSON 应答。默认输出是人类可读文本不是稳定格式脚本请解析--json失败即非零退出值非法、无聚焦窗口、匹配不到目标时输出 stderr 并以非零码退出脚本可直接if driftwm msg ...分支 命令速查表17 个 driftwm msg 子命令命令作用示例state倾倒相机、缩放、窗口清单、各输出视口driftwm msg statesubscribe流式推送状态快照每变化一次一事件driftwm msg --json subscribefocus查询/切换聚焦窗口聚焦时自动平移相机driftwm msg focus firefoxmove查询/移动窗口到x y中心点Y 向上driftwm msg move -400 200 --id 5resize查询/调整窗口可视框架尺寸driftwm msg resize 800 600 --id 5close关闭聚焦窗口或指定窗口driftwm msg close firefoxopacity查询/设置不透明度0 透明 ~ 1 不透明driftwm msg opacity 0.85 --id 5pin查询/固定窗口到屏幕空间driftwm msg pin on --id 5suspend挂起窗口留下合成器绘制的占位块driftwm msg suspend firefoxrelaunch从占位块重新启动被挂起的应用driftwm msg relaunch firefoxcamera查询/平移画布相机driftwm msg camera 500 300zoom查询/设置缩放级别动画过渡driftwm msg zoom 0.5bookmark列出/设置/删除画布书签driftwm msg bookmark inbox 500 300layout打印当前键盘布局driftwm msg layout --shortaction执行任意配置动作字符串driftwm msg action switch-layout nextscreenshot重新渲染画布并输出 PNG可捕获屏外内容driftwm msg screenshot --scale 2 -o ~/c.pngdebug-counters打印内部集合大小诊断内存泄漏键不稳定driftwm msg debug-counters窗口目标选择器数字是 id字符串是 app_id窗口类命令用选择器指定目标JSON 数字是state给出的稳定--id字符串是大小写不敏感的app_id子串。小部件widget没有app_id只能通过--id触达。 四个实用配方1. 实时跟随聚焦窗口subscribe 推送无需轮询driftwm msg --json subscribe \ | jq --unbuffered -r .State.windows[] | select(.is_focused) | .app_idsubscribe每次状态变化推送一个完整快照动画期间为逐帧推送无变化时不推送——比轮询状态文件省得多的开销。2. 一键整理窗口网格state返回的size是可视框架尺寸含标题栏与边框脚本可直接按网格摆放无需关心窗口是自绘还是服务器装饰。3. 高分辨率画布截图screenshot是重新渲染而非截屏能捕获屏外内容window子命令单独合成单窗口带阴影与边框region直接吃$(slurp)的选择框。4. 挂起与恢复suspend把窗口换成占位块省内存relaunch凭.desktop条目重启并继承原几何位置机制详见 docs/session.md。 直接用 JSON 线协议任何语言都能说套接字上一行一个 JSON 请求应答固定为{Ok: ...}或{Err: ...}SOCK$XDG_RUNTIME_DIR/driftwm/ipc-$WAYLAND_DISPLAY.sock echo {Camera:[500,300]} | socat -t1 -UNIX-CONNECT:$SOCK echo State | socat -t1 -UNIX-CONNECT:$SOCK常用请求形状一览完整版见 docs/ipc.md请求发送内容设相机{Camera:[500,300]}null为读取设缩放{Zoom:0.5}设聚焦{Focus:alacritty}或{Focus:5}关窗口{Close:alacritty}/{Close:5}书签{Bookmark:{name:home,to:[0,0]}}截图{Screenshot:{target:Viewport,scale:1.0,path:/abs/shot.png}}状态State订阅Subscribe只读轮询还有更轻的选择driftwm 以约 10 Hz 把keyvalue快照写入$XDG_RUNTIME_DIR/driftwm/state状态栏读它即可完全不走套接字字段表见 docs/ipc.md。⚠️ 三个必须知道的注意事项套接字是全量控制面不是只读的action可以exec/spawn、quit、reload-config。它保持0600权限正是为此——不要放宽权限更不要把它桥接到网络上警告原文见 docs/ipc.md。坐标约定中心点 Y 向上move 0 0是居中到原点正y在上方所有尺寸描述的是含边框的可视框架。全屏窗口的读写不对称读camera/zoom永远安全但写会先退出全屏再应用——轮询回写相机的脚本会把用户从全屏视频里拽出来。 参考资料与源码路径资料路径IPC 与线协议文档docs/ipc.md命令自动生成参考docs/cli.mdIPC 服务端实现src/ipc/mod.rs请求/应答类型定义src/ipc/protocol.rsmsg客户端实现src/ipc/client.rs窗口挂起与恢复机制docs/session.md喜欢这个项目的话官方周边 T 恤的设计也出自这套视觉语言赞分享【免费下载链接】driftwmA trackpad-first infinite canvas Wayland compositor.项目地址https://gitcode.com/gh_mirrors/dr/driftwm点击查看免费下载相关推荐FanControl 风扇控制免费完整指南画一条温度-转速曲线10 分钟把噪音管住FanControl 风扇控制免费完整指南画一条温度 转速曲线10 分钟把噪音管住 机箱风扇忽高忽低地响CPU 温度却只涨了两度——问题多半出在出厂写死的桌面应用智能硬件Polybar 进程间通信IPC完全指南polybar-msg、模块动作与命令控制Polybar 进程间通信IPC完全指南polybar msg、模块动作与命令控制 导读 IPCInter Process Messaging进程间通桌面应用Zed 命令行工具CLI完全参考打开文件、集成 Git 与脚本化控制 ZedZed 命令行工具CLI完全参考打开文件、集成 Git 与脚本化控制 Zed Zed 自带的 zed 命令行工具CLI允许你在终端中打开文件和目录、将开发工具代码编辑器桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考