V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
stinkytofux
6.09D
V2EX  ›  Linux

原来 Linux 桌面才是最封闭的系统.

  •  1
     
  •   stinkytofux · 1 天前 · 5602 次点击

    最近在开发一个跨平台小工具, 需要调用系统能力, 例如 "获取其他窗口句柄" "激活其他窗口" "模拟按键执行粘贴" "注册全局热键" 这些功能在 Windows 和 Mac 都可以通过调用系统 API 或系统脚本(Mac 上需要授权)的方式实现, 总体上比较舒服好用.

    当准备适配 Linux 的时候, 却发现发现麻烦大了. 原以为以 Linux 的开放程度, 适配过程应该是很轻松的, 结果却恰恰相反. 查阅资料, 都说 Wayland 正在替代 X11, 所以毫无疑问优先适配 Wayland . 但是在 Wayland 上连改变自身窗口位置的功能都无权实现. 也没办法注册全局热键. 更别提上述的的敏感功能了.

    其实我可以理解这些行为的敏感, 容易被恶意利用. 但是可以像 MAC 一样授权呀, 一刀切的不提供, 实在不知道桌面软件要怎么开发. 如果用 xcb 兼容模式运行也无法实现所有功能.

    如果只兼容 X11, 失去 Wayland 的用户, 真的挺遗憾的, 也不完美.

    还有办法么......

    46 条回复    2025-12-17 02:33:32 +08:00
    mgrddsj
        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 ,简直是戴着脚镣跳舞。
    Cooky
        2
    Cooky  
       1 天前   ❤️ 5
    别拿那么高雅的词来形容 Wayland ,Wayland 就是烂,只不过是相比起 x11 支持新的特性,老特性该有的一样没有
    stinkytofux
        3
    stinkytofux  
    OP
       1 天前
    @mgrddsj #1 很难搞, 即便我想带 Linux 玩, 现实也不允许了.
    lumia1020
        4
    lumia1020  
       1 天前   ❤️ 1
    前年做一个工业显示屏,要为应用程序实现一个视频外挂窗口,这个视频窗口要顶层显示和自定义位置,发现系统不支持,费老大劲了。好就好在是开源,通过修改 Wayland 源代码来实现了。
    Greendays
        5
    Greendays  
       1 天前
    之前 Windows 不是有那种骗小白的重装系统镜像,安装完了以后要你扫码付款的那个,就是利用了全屏接口来强制全屏的吧。这类权限被限制还是有道理的。
    john6lq
        6
    john6lq  
       1 天前
    @Greendays 不是限不限制的问题,现在是根本没有这个 API 。
    ergouli848
        7
    ergouli848  
       1 天前
    那就开发 X11 呗,不是有 XWayland 这个兼容层么。
    xtreme1
        8
    xtreme1  
       1 天前   ❤️ 6
    并非封闭, 而是真空中的球形标准.
    你一问就是我们还要考虑没有 XY 坐标的窗口管理器. 我草. KISS 原则不知道扔到火星去了.
    yyzh
        9
    yyzh  
       1 天前 via Android   ❤️ 1
    Wayland 就是烂+1.装了新版 ubuntu 25.10 之后进设置开远程桌面居然会死程序。被迫换旧版 ubuntu 了
    stinkytofux
        10
    stinkytofux  
    OP
       1 天前
    @ergouli848 #7 兼容层不行, 达不到效果. 研究了一下午, 放弃了, 决定只适配 X11 了.
    muxueqz
        11
    muxueqz  
       1 天前
    这些功能可以提供 CLI, 由用户自己在 DE/WM 中配置快捷键
    pckillers
        12
    pckillers  
       1 天前   ❤️ 1
    远程键鼠重度用户表示 Wayland 就是个残缺品。 继续 X11+XFCE 。 直到哪天开机自动接入远程键鼠控制与剪贴板共享能用了。
    crysislinux
        13
    crysislinux  
       1 天前 via Android
    开放是开放源码不是开放 feature ,所以。
    zzzsy
        14
    zzzsy  
       1 天前
    开放是你可以加上这个 API
    willm
        15
    willm  
       1 天前   ❤️ 1
    不是封闭,就是单纯的挫
    levelworm
        16
    levelworm  
       1 天前   ❤️ 1
    @Cooky #2
    但是我在论坛上问了一位原 X11 开发人员现 Wayland 开发人员,似乎 X11 的历史包袱实在是太重了,所以只能推倒从头再来。
    emonc
        17
    emonc  
       1 天前
    封闭是它有但是不给你。
    passive
        18
    passive  
       23 小时 27 分钟前 via Android
    刚出 Gnome3 的时候巨烂,KDE4 也烂得没法用,Pulseaudio 能关就关,ChromeOS 就是自启动一个 chrome ,Python3 的生态也没法用……
    这些现在成熟的软件都是这么过来的。
    只有 terminal ,vi 和一系列 shell 下的文字处理工具在我从业之后没怎么变。哦,Perl 也没人用了,pcre 还活着。
    sudo123
        19
    sudo123  
       21 小时 51 分钟前
    你说对了,Windows 才是生态开放系统……
    L4Linux
        20
    L4Linux  
       21 小时 39 分钟前 via Android
    你可以研究研究 GIMP 怎么做的,甚至直接问它的开发者。
    yolee599
        21
    yolee599  
       20 小时 31 分钟前 via Android   ❤️ 1
    不是封闭,就是单纯的功能没做出来,Wayland 相当于推翻原来的 X11 重做了
    crackidz
        22
    crackidz  
       20 小时 27 分钟前   ❤️ 1
    大哥封闭是权限封闭的意思吗?你的意思是随意提权的系统才是“开放的”系统?那么病毒和恶意软件作者可要笑嘻了
    Danswerme
        23
    Danswerme  
       20 小时 25 分钟前   ❤️ 1
    Wayland 发展这么缓慢呀,记得 N 年前我研究怎么安装 ArchLinux 时许多人就推荐 Wayland ,说它才是未来,这么些年过去了还是没彻底取代 X11
    sir283
        24
    sir283  
       20 小时 22 分钟前   ❤️ 1
    不是封闭,是压根没有,但是你可以拉取 Wayland 的源码,自己搞一套这样的通用标准,然后提 pr 过去,我相信如果你的代码水平过关的话,他们肯定很愿意接受你的 pr ,那样的话,在下个版本,他们就会加上你的这个标准了,那样就可以适配 Linux 端了,你说是吧?#(滑稽)
    tolbkni
        25
    tolbkni  
       20 小时 22 分钟前
    @Danswerme #23 也就今年才有全面取代 X11 的苗头
    Cooky
        26
    Cooky  
       20 小时 21 分钟前   ❤️ 2
    @levelworm 屁的历史包袱,Wayland 现在都一堆包袱
    bruce0
        27
    bruce0  
       20 小时 16 分钟前
    我之前一直用 X11,上周不知道为啥,更新 apt upgrade 了一次,然后就是桌面无限卡死,用的 Debian13+gnome,没办法换到 wayland 了,缺点就是不支持搜狗输入法了,换到 rime 了,clion 里偶发的弹窗只显示黑框,重新打开可能就好了
    stinkytofux
        28
    stinkytofux  
    OP
       20 小时 11 分钟前
    @crackidz #22 "随意提权"这个帽子扣大了, 例如注册全局热键是很基本的需求, 在 mac 甚至都不需要授权. 很遗憾在 Wayland 完全没办法实现.
    Narcissu5
        29
    Narcissu5  
       19 小时 55 分钟前   ❤️ 4
    Wayland 也出来好多年了,这些问题不是“不成熟”,而是项目组脑子有💩,这个很多地方都有吐槽
    realpg
        30
    realpg  
    PRO
       19 小时 51 分钟前
    wayland 的开放指的是我可以让你看到我的屎山是怎么写的
    minami
        31
    minami  
       19 小时 44 分钟前   ❤️ 1
    @levelworm 红帽故意打压 Xorg 罢了
    kapr1k0rn
        32
    kapr1k0rn  
       19 小时 44 分钟前
    11 楼是正解,OP 属于用 Windows 的 UI 思维去套 linux 了
    minami
        33
    minami  
       19 小时 42 分钟前   ❤️ 4
    @sir283 说明你没跟 wayland 开发团队打过交道,他们就是一群脑子有病的人,社区写好的 pr 都被他们拒绝多少次了,问就是不符合他们的哲学
    wwwz
        34
    wwwz  
       19 小时 41 分钟前   ❤️ 1
    不需要适配,不能理解使用 Linux 桌面的人
    w568w
        35
    w568w  
       18 小时 55 分钟前   ❤️ 7
    天下苦 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 不合并的功能。另外还有一些已经合并但下游开发者不想/不能及时支持的功能。
    Aixtuz
        36
    Aixtuz  
       18 小时 49 分钟前
    允许但之前没人修这条路 vs 你想修但不允许你修,这是两回事。
    LokiSharp
        37
    LokiSharp  
       18 小时 36 分钟前
    你直接去给 Wayland 写个 PR ,通不过就开个分支不就好了
    Esec
        38
    Esec  
       18 小时 16 分钟前 via Android
    不要有太多包袱,该 root 就上,怕收不住就留个自毁按钮吧
    blumia
        39
    blumia  
       17 小时 59 分钟前   ❤️ 2
    现阶段还是只兼容 X11 吧,Wayland 的无障碍支持是惨不忍睹状态,你甚至都无法控制自己窗口所在位于屏幕上的位置,甚至无法置顶自己的窗口。自动化的功能全靠桌面环境(对应的合成器)有没有提供相关的辅助功能,非常碎片化。
    takeshima
        40
    takeshima  
       14 小时 29 分钟前 via iPhone   ❤️ 1
    x11 确实太落后了,比如两个显示器用不同缩放比例、不同分辨率,x11 支持不了,wayland 可以。但是 wayland 目前状况就是个半成品,很多该有的基础功能还没做好,只能说 Linux 桌面这块儿目前确实不太行
    moooxin
        41
    moooxin  
       14 小时 21 分钟前   ❤️ 1
    刚被 Wayland 折磨过的人来说。。 真的是 SB 。。。 为了所谓的安全。。?? 就降低的电动车的标准吗??
    cyp0633
        42
    cyp0633  
       14 小时 7 分钟前   ❤️ 1
    就现在各种应用在 Wayland 上功能缺失、Electron/Chromium 这种活跃的开源项目的输入法支持都才做好没多久来看,很难说 Wayland 真的在为开发者着想,虽然它确实某种程度上解决了 X11 的一些问题
    mouyase
        43
    mouyase  
       14 小时 2 分钟前
    不是封闭,而是没有规范
    MindMindMax
        44
    MindMindMax  
       12 小时 54 分钟前
    同意 24 楼的观点。你可以实现,PR 一个。 开放 = 碎片化 = 烂尾多 = 佛系 or 自力更生。
    duzhuo
        45
    duzhuo  
       8 小时 30 分钟前
    @cyp0633 至少安全了 XD
    kuanat
        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 可以达到几乎任意想要的效果。如果是楼主这种开发应用发现没有办法适配我能理解,如果只是单纯抱怨那就没意思了。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   891 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 21:28 · PVG 05:28 · LAX 13:28 · JFK 16:28
    ♥ Do have faith in what you're doing.