最近在开发一个跨平台小工具, 需要调用系统能力, 例如 "获取其他窗口句柄" "激活其他窗口" "模拟按键执行粘贴" "注册全局热键" 这些功能在 Windows 和 Mac 都可以通过调用系统 API 或系统脚本(Mac 上需要授权)的方式实现, 总体上比较舒服好用.
当准备适配 Linux 的时候, 却发现发现麻烦大了. 原以为以 Linux 的开放程度, 适配过程应该是很轻松的, 结果却恰恰相反. 查阅资料, 都说 Wayland 正在替代 X11, 所以毫无疑问优先适配 Wayland . 但是在 Wayland 上连改变自身窗口位置的功能都无权实现. 也没办法注册全局热键. 更别提上述的的敏感功能了.
其实我可以理解这些行为的敏感, 容易被恶意利用. 但是可以像 MAC 一样授权呀, 一刀切的不提供, 实在不知道桌面软件要怎么开发. 如果用 xcb 兼容模式运行也无法实现所有功能.
如果只兼容 X11, 失去 Wayland 的用户, 真的挺遗憾的, 也不完美.
还有办法么......
1
mgrddsj 1 天前
“注册全局热键”在 Wayland 下其实是有的,应该是要调用 org.freedesktop.portal.GlobalShortcuts 这个 API 。不过 GNOME 在今年发布的 48 版本才支持这功能( Ubuntu 24 LTS 的 GNOME 版本才 46 ),所以我也不知道为什么主流发行版和桌面环境都这么着急拥抱 Wayland 这个混乱的半成品。
激活其它窗口这个的话,可能确实没有通用的/跨桌面环境的实现。我用着 GNOME 桌面,可以用 "Activate Window By Title" 这个 GNOME 拓展 + 自定义快捷键执行一个 gdbus call 命令来实现一键激活微信窗口。 不过要不是 X11 对触控板的支持不好( Chromium 系软件无法双指缩放、惯性滚动),我也不会用 Wayland ,简直是戴着脚镣跳舞。 |
2
Cooky 1 天前 别拿那么高雅的词来形容 Wayland ,Wayland 就是烂,只不过是相比起 x11 支持新的特性,老特性该有的一样没有
|
3
stinkytofux OP @mgrddsj #1 很难搞, 即便我想带 Linux 玩, 现实也不允许了.
|
4
lumia1020 1 天前 前年做一个工业显示屏,要为应用程序实现一个视频外挂窗口,这个视频窗口要顶层显示和自定义位置,发现系统不支持,费老大劲了。好就好在是开源,通过修改 Wayland 源代码来实现了。
|
5
Greendays 1 天前
之前 Windows 不是有那种骗小白的重装系统镜像,安装完了以后要你扫码付款的那个,就是利用了全屏接口来强制全屏的吧。这类权限被限制还是有道理的。
|
7
ergouli848 1 天前
那就开发 X11 呗,不是有 XWayland 这个兼容层么。
|
8
xtreme1 1 天前 并非封闭, 而是真空中的球形标准.
你一问就是我们还要考虑没有 XY 坐标的窗口管理器. 我草. KISS 原则不知道扔到火星去了. |
9
yyzh 1 天前 via Android Wayland 就是烂+1.装了新版 ubuntu 25.10 之后进设置开远程桌面居然会死程序。被迫换旧版 ubuntu 了
|
10
stinkytofux OP @ergouli848 #7 兼容层不行, 达不到效果. 研究了一下午, 放弃了, 决定只适配 X11 了.
|
11
muxueqz 1 天前
这些功能可以提供 CLI, 由用户自己在 DE/WM 中配置快捷键
|
12
pckillers 1 天前 远程键鼠重度用户表示 Wayland 就是个残缺品。 继续 X11+XFCE 。 直到哪天开机自动接入远程键鼠控制与剪贴板共享能用了。
|
13
crysislinux 1 天前 via Android
开放是开放源码不是开放 feature ,所以。
|
14
zzzsy 1 天前
开放是你可以加上这个 API
|
15
willm 1 天前 不是封闭,就是单纯的挫
|
17
emonc 1 天前
封闭是它有但是不给你。
|
18
passive 23 小时 27 分钟前 via Android
刚出 Gnome3 的时候巨烂,KDE4 也烂得没法用,Pulseaudio 能关就关,ChromeOS 就是自启动一个 chrome ,Python3 的生态也没法用……
这些现在成熟的软件都是这么过来的。 只有 terminal ,vi 和一系列 shell 下的文字处理工具在我从业之后没怎么变。哦,Perl 也没人用了,pcre 还活着。 |
19
sudo123 21 小时 51 分钟前
你说对了,Windows 才是生态开放系统……
|
20
L4Linux 21 小时 39 分钟前 via Android
你可以研究研究 GIMP 怎么做的,甚至直接问它的开发者。
|
21
yolee599 20 小时 31 分钟前 via Android 不是封闭,就是单纯的功能没做出来,Wayland 相当于推翻原来的 X11 重做了
|
22
crackidz 20 小时 27 分钟前 大哥封闭是权限封闭的意思吗?你的意思是随意提权的系统才是“开放的”系统?那么病毒和恶意软件作者可要笑嘻了
|
23
Danswerme 20 小时 25 分钟前 Wayland 发展这么缓慢呀,记得 N 年前我研究怎么安装 ArchLinux 时许多人就推荐 Wayland ,说它才是未来,这么些年过去了还是没彻底取代 X11
|
24
sir283 20 小时 22 分钟前 不是封闭,是压根没有,但是你可以拉取 Wayland 的源码,自己搞一套这样的通用标准,然后提 pr 过去,我相信如果你的代码水平过关的话,他们肯定很愿意接受你的 pr ,那样的话,在下个版本,他们就会加上你的这个标准了,那样就可以适配 Linux 端了,你说是吧?#(滑稽)
|
27
bruce0 20 小时 16 分钟前
我之前一直用 X11,上周不知道为啥,更新 apt upgrade 了一次,然后就是桌面无限卡死,用的 Debian13+gnome,没办法换到 wayland 了,缺点就是不支持搜狗输入法了,换到 rime 了,clion 里偶发的弹窗只显示黑框,重新打开可能就好了
|
28
stinkytofux OP @crackidz #22 "随意提权"这个帽子扣大了, 例如注册全局热键是很基本的需求, 在 mac 甚至都不需要授权. 很遗憾在 Wayland 完全没办法实现.
|
29
Narcissu5 19 小时 55 分钟前 Wayland 也出来好多年了,这些问题不是“不成熟”,而是项目组脑子有💩,这个很多地方都有吐槽
|
30
realpg PRO wayland 的开放指的是我可以让你看到我的屎山是怎么写的
|
32
kapr1k0rn 19 小时 44 分钟前
11 楼是正解,OP 属于用 Windows 的 UI 思维去套 linux 了
|
33
minami 19 小时 42 分钟前 @sir283 说明你没跟 wayland 开发团队打过交道,他们就是一群脑子有病的人,社区写好的 pr 都被他们拒绝多少次了,问就是不符合他们的哲学
|
34
wwwz 19 小时 41 分钟前 不需要适配,不能理解使用 Linux 桌面的人
|
35
w568w 18 小时 55 分钟前 天下苦 Wayland 久矣。X11 是太开放导致安全漏洞多,那 Wayland 就是太封闭导致什么也做不了:
1. 宁愿提供一个个独立的、随意设计的 Protocol ,也不愿意像 macOS 那样设计一个统一的权限系统。 现状就是:有的功能需要用户显式授权、有的功能需要请求后 Compositor 自行实现(例如移动窗口)、有的功能不需要授权可以直接调用。设计选择完全看协议发起者的心情; 2. 通过新协议的速度慢得令人发指。 人人参与讨论的结果就是人人都不满意,一个协议讨论五六年仍然有「原教旨开发者」会反对(例如屏幕截图 ext-image-copy-capture-1 、置顶显示 wlr-layer-shell-unstable-v1 、全局热键 hyprland-global-shortcuts-v1 ); 3. 碎片化。 由于上一点中所说的原因,很多协议把社区开发者熬走了都还没 merge ,各家 WM/DE 只能自行实现私有协议。目前 wlr 、KDE 、Hyprland 、COSMIC 、Weston 、Treeland 、AGL ,只要你能叫出名的 WM/DE/framework ,都有一大批自家的协议来补充那些 Wayland 不合并的功能。另外还有一些已经合并但下游开发者不想/不能及时支持的功能。 |
36
Aixtuz 18 小时 49 分钟前
允许但之前没人修这条路 vs 你想修但不允许你修,这是两回事。
|
37
LokiSharp 18 小时 36 分钟前
你直接去给 Wayland 写个 PR ,通不过就开个分支不就好了
|
38
Esec 18 小时 16 分钟前 via Android
不要有太多包袱,该 root 就上,怕收不住就留个自毁按钮吧
|
39
blumia 17 小时 59 分钟前 现阶段还是只兼容 X11 吧,Wayland 的无障碍支持是惨不忍睹状态,你甚至都无法控制自己窗口所在位于屏幕上的位置,甚至无法置顶自己的窗口。自动化的功能全靠桌面环境(对应的合成器)有没有提供相关的辅助功能,非常碎片化。
|
40
takeshima 14 小时 29 分钟前 via iPhone x11 确实太落后了,比如两个显示器用不同缩放比例、不同分辨率,x11 支持不了,wayland 可以。但是 wayland 目前状况就是个半成品,很多该有的基础功能还没做好,只能说 Linux 桌面这块儿目前确实不太行
|
41
moooxin 14 小时 21 分钟前 刚被 Wayland 折磨过的人来说。。 真的是 SB 。。。 为了所谓的安全。。?? 就降低的电动车的标准吗??
|
42
cyp0633 14 小时 7 分钟前 就现在各种应用在 Wayland 上功能缺失、Electron/Chromium 这种活跃的开源项目的输入法支持都才做好没多久来看,很难说 Wayland 真的在为开发者着想,虽然它确实某种程度上解决了 X11 的一些问题
|
43
mouyase 14 小时 2 分钟前
不是封闭,而是没有规范
|
44
MindMindMax 12 小时 54 分钟前
同意 24 楼的观点。你可以实现,PR 一个。 开放 = 碎片化 = 烂尾多 = 佛系 or 自力更生。
|
46
kuanat 2 小时 55 分钟前
我感觉大多数人可能并不了解一个桌面系统是要有多复杂,所以会产生误解。之前我写过一篇介绍 wayland 合成器的,等有空我完整写一下关于桌面的。
简单回答一下这个帖子里提到的一些问题。我不是为了评价它是好是坏,只是尽量补充些信息。 - 全局热键 底层逻辑是非焦点应用不能获得键盘输入。所以 wayland 核心协议( foundation )没有,实际 org.freedesktop.portal.GlobalShortcuts 是属于 XDG Desktop Portal 的一部分,之前是 flatpak 沙盒环境的实现。或者再底层一点,wayland 只涉及二进制高性能 IPC ,其他的都走 dbus 。目前 KWin/Mutter 都支持了,hyprland/sway 虽然不直接支持,但对于用户来说反倒更简单,只是对应用来说缺少注册机制。 - 应用获知自己的位置,XY 坐标系 底层逻辑是窗口位于哪里是用户和合成器的事情,而不是应用程序的事情。安全考量是防止 UI 欺骗和覆盖攻击。这个问题协议层面无解,但作为合成器来说以私有协议方式实现这个功能不难,至于为什么不做可以去问开发者。 - 远程键鼠 X11 的方式是无限制的事件注入。Wayland 认为这种无鉴权无溯源的方式不安全。目前有两个解决思路,一个是走 XDG Portal 通过 libei(emulated input) 完成,另一个是 uinput 创建虚拟设备。这个只能说是软件更新没跟上,至少我用的 wayvnc 和 gnome rdp 都很正常。 - 类 macOS 统一权限/碎片化 历史原因不存在这个基础,实际上现在 systemd/dbus/wayland 这三个支柱,80% 代码都是 RH 出钱雇人做的,最大公约数就这水平了。不同于现实世界的标准之争,资本或者组织先确定标准,再去搞实现。Wayland 的现状是反正总有人不满意,纸面上的协议没什么意义,一堆私有协议最后卷剩下的那个才是真正的标准。 - 输入法 这个提过很多次了,fcitx5 实现了所有可以支持的协议,主要合成器也都支持至少一种协议,剩下就是软件自己的问题了。问题是输入法这协议都是老外最早设计的,他们根本不懂,所以只能我辈努努力改变现状了。 PS 我知道很多人有 RPA 或者自动化的需求,如果是开发者,在合成器基础上手搓“私有协议”不是很难的事情,如果是普通用户,基于 sway IPC 可以达到几乎任意想要的效果。如果是楼主这种开发应用发现没有办法适配我能理解,如果只是单纯抱怨那就没意思了。 |