【免费下载链接】desktop✨ Liner is a desktop player for Windows and Linux that lets you pull your music and playlists from other platforms into one clean app. No ads and bloated features, just synced lyrics and your tracks without anything getting in the way.项目地址https://gitcode.com/gh_mirrors/desktop87/desktop点击查看免费下载LinerREADME.md是一款跨平台的 Linux/Windows 桌面音乐播放器它把各平台的音乐和歌单汇聚到一个干净的应用中主打同步歌词与无干扰播放。在 Linux 的 Wayland 环境下Electron 原生的全局快捷键和窗口置顶常常失效Liner 通过一套「Compositor Bridge」直接对话 Hyprland 和 Sway 窗口管理器实现了可靠的全局快捷键绑定与悬浮播放条的精准窗口定位。一、为什么 Wayland 下快捷键会变哑X11 时代应用可以轻松钩住系统级按键。而 Wayland 出于安全设计应用不能随意拦截其他窗口的按键事件Electron 的globalShortcut在纯 Wayland 会话下要么不可用、要么不可靠。Liner 的解法是不硬拦按键而是请求窗口管理器帮你绑定。当按键被触发时由 compositor 执行一条命令命令再把事件转发回 Liner。整个逻辑集中在 electron/compositor/ 目录中。二、会话检测先搞清楚你在哪个窗口管理器上入口文件 session.ts 通过环境变量判断当前环境判断条件结论非 Linux或没有WAYLAND_DISPLAY/XDG_SESSION_TYPEwayland非 Wayland走 Electron 原生方案存在HYPRLAND_INSTANCE_SIGNATUREHyprland存在SWAYSOCKSway其他 Wayland 会话原生globalShortcut兜底检测逻辑很简单直接Hyprland 会导出HYPRLAND_INSTANCE_SIGNATURESway 会导出SWAYSOCK两个变量正是各自 IPC 通道的门牌号。三、全局快捷键内幕命令管道 反向绑定1. 反向通信mkfifo 命令管道全局快捷键按下后compositor 执行的是外部 shell 命令如何把事件送进 Liner 进程答案在 commandPipe.ts在$XDG_RUNTIME_DIR下创建一个命名管道FIFO命名规则为liner-pid.cmd应用以非阻塞方式打开并持续监听管道内容绑定快捷键时生成的命令形如test -p /run/user/1000/liner-12345.cmd printf %s\n toggle-overlay 1/run/user/1000/liner-12345.cmd也就是说按下 AltShiftO 等价于往管道里写一行toggle-overlay主进程读到后由 overlay.ts 的handleCompositorAction分发——toggle-overlay切换悬浮播放条like-track触发点赞。管道随进程创建、随退出销毁dispose时rmSync干净利落。2. Hyprland 绑定直连 Socket支持 Lua 模式hyprlandIpc.ts 通过XDG_RUNTIME_DIR/hypr/signature/.socket.sock与 Hyprland 通信带 1.5 秒超时保护。绑定快捷键hyprlandBinds.ts分两种情况经典配置模式直接下发keyword bind Mod,Shift,O,exec,...绑定前先keyword unbind清理旧绑定Lua 配置模式新版 Hyprland 默认bind不可用返回失败快捷键改由 Electron 的globalShortcut兜底注册——这是 index.ts 里bindShortcut失败后自动回退到registerGlobalToggle的原因。另外还有一个巧妙的细节keys.ts 会把按键映射为按键代码keycode而非字符避免不同键盘布局下快捷键漂移overlay.ts 甚至内置了西里尔字母到 QWERTY 的映射表让俄语布局用户录制的AltShiftЩ也能被正确识别为AltShiftO。3. Sway 绑定swaymsg 命令行sway.ts 走的是外部命令路线查询swaymsg -r -t get_tree递归查找当前聚焦节点绑定bindsym --no-repeat --to-code Mod4ShiftO exec 命令--to-code同样是按物理键位绑定布局无关解绑精确unbindsym避免误伤同名绑定。所有swaymsg调用都设置了 1.5 秒超时防止命令卡死拖垮 UI。四、窗口定位内幕把悬浮条钉到屏幕顶部悬浮播放条Overlay是一个无边框、透明、320×56 的窗口。在平铺式窗口管理器里它不能被平铺打乱所以要浮起来并精确摆位。1. 工作区计算与锚点placement.ts 定义了三种锚点top-left/top-center/top-right并计算精确坐标含 20px 边距。Hyprland 侧还会从 hyprland.ts 的monitors接口读取焦点显示器的reserved区域为 dock 等预留的空间并按屏幕旋转、缩放换算出真正可用的工作区。2. Hyprland一批 dispatch 命令搞定placeHyprlandWindow把多条命令打包成[[BATCH]]一次性下发setfloating—— 悬浮化脱离平铺movewindowpixel exact x y—— 精确移动到计算好的坐标pin—— 按设置决定跨工作区置顶noborder / noshadow / rounding 0 / noblur—— 去掉一切装饰得到纯净的药丸形态最后把焦点交还给之前捕获的窗口captureFocus记录的previousFocus做到弹出但不抢焦点。3. Sway一条 criteria 命令链Sway 侧用[pidpid title^Liner Overlay$]精确定位窗口PID 标题双重校验然后[pid12345 title^Liner Overlay$] floating enable, sticky on, border none, move absolute position 640 20sticky对应跨工作区置顶move absolute position给出绝对坐标放置完成后[con_id旧焦点] focus恢复原焦点。五、用户体验细节这些代码带来的实际好处快捷键全局可用切到任何应用AltShiftO默认随时唤起悬浮播放条AltShiftL一键点赞当前曲目弹出无感Overlay 用showInactive显示、事后归还焦点看视频/写代码时不会打断当前输入设置实时生效前端的 overlaySettingsStore.ts 修改位置/快捷键后立即通知主进程重新绑定并重新定位窗口自动降级非 Hyprland/Sway 环境自动退回 Electron 原生globalShortcut与setAlwaysOnTop行为一致。六、常见问题Q我用的 GNOME/KDE Wayland 会话快捷键不生效Liner 目前只对 Hyprland 和 Sway 做深度集成其他 Wayland 会话依赖 Electron 原生全局快捷键可能受桌面环境限制。Q修改快捷键后没有反应确认应用窗口有焦点后在设置中保存Liner 会先unbind旧组合再bind新组合若与系统快捷键冲突会注册失败并打印日志。Q悬浮条位置不对位置由锚点 工作区 边距计算多显示器下以 Overlay 所在显示器为准可检查是否开启了独占全屏应用占用了 reserved 区域。延伸阅读会话与集成入口electron/compositor/index.ts悬浮条管理与快捷键注册electron/overlay.ts存储键说明liner_overlay_settings_v1等docs/STORAGE.md赞分享【免费下载链接】desktop✨ Liner is a desktop player for Windows and Linux that lets you pull your music and playlists from other platforms into one clean app. No ads and bloated features, just synced lyrics and your tracks without anything getting in the way.项目地址https://gitcode.com/gh_mirrors/desktop87/desktop点击查看免费下载相关推荐Hivemind自然语言处理构建理解团队意图的终极技能指南Hivemind自然语言处理构建理解团队意图的终极技能指南 Hivemind作为一款创新的多智能体协作平台核心功能在于实现One brain for al人工智能AI AgentAgent 记忆AI 技能RAGMCP 服务Yaak窗口位置快捷键快速定位到屏幕预设区域Yaak窗口位置快捷键快速定位到屏幕预设区域 你是否经常在多任务处理时反复拖拽窗口调整位置在YaakThe most intuitive desktop开发工具接口测试Linux Retroism Hyprland配置教程键位绑定、dwindle布局与窗口阴影完全指南Linux Retroism Hyprland配置教程键位绑定、dwindle布局与窗口阴影完全指南 Linux Retroism 是一款基于 Quicksh上一篇DBAN开源数据擦除工具完整使用指南下一篇Platinum-MD终极指南免费快速实现NetMD音乐传输革命创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?