frontpage.
newsnewestaskshowjobs

Open Source @Github

fp.

Open in hackernews

Multiple Mouse Cursors in Wayland

https://blinry.org/multi-seat-wayland/
25•marvinborner•2h ago

Comments

QuaternionsBhop•55m ago
I've always thought this was a cool idea. It's obviously been on the minds of Wayland protocol developers since the beginning, otherwise it wouldn't be possible!
ben-schaaf•36m ago
To add to the long list of caveats: This also breaks assumptions GUI toolkit and applications make about only one of their windows being focused at a time: `gtk_application_get_active_window`, `QApplication::activeWindow`, etc.
ed_mercer•21m ago
I guess they could add a parameter cursorIndex defaulting to 0!
McGlockenshire•35m ago
The original title, "State of multi-player Wayland" is a much better summary of the article. This ain't just about the pointers! In fact, the author is very explicit about that:

> I think there could be a term that’s describing this concept even better – in the title of this post, I picked “multi-player”, to make clear that it’s mostly about multiple people who are collaborating. I’ve also seen “multi-cursor” or “multi-pointer” (which are missing the keyboard component).

evertheylen•33m ago
It's not as weird as you might think: laptops may have touchscreens (which can be multi-touch) on top of the "normal" cursor. IIRC, X.org can't really handle such cases cleanly.
kelnos•27m ago
That's not what this article is about. You still only have one mouse cursor in that case, but two things (the touchscreen and touchpad) drive it.

This is about actually having multiple, independent mouse cursors on the screen at once, with different input devices controlling different cursors.

minitech•13m ago
Sometimes that's true, but sometimes (imo the superior approach) the touchscreen is independent from the cursor. I think touchscreen Chromebooks are like that, for example.
nomel•31m ago
Another possible use case might be mixed reality/VR displays, for simultaneous mouse cursor + eye tracking/control.
kelnos•26m ago
I'm building a compositor now, and I've been thinking about multi-seat from the beginning, but I know there are lots of places that assume a single seat, and so this sort of thing won't work for me. It's actually a lot more work than you'd think to support this...
jauntywundrkind•2m ago
I keep thinking of trying to see how far I get re-doing Niri in River.

The one other constraint that I'd really like to see relaxed is about displays, about being able to merge and subdivide screens as I please. Having a huge ultra-wide display really would be so much better if I could divide it up somehow. This is kind of the headline feature of stilch, which is a pretty neat compositor, https://github.com/wegel/stilch .

Niri has some tickets on it too. Merging monitors into a big display, and splitting a display (moments before the multi-pointer ticket was filed in Niri), https://github.com/niri-wm/niri/discussions/1285 https://github.com/niri-wm/niri/discussions/3160

There's been all kinds of rough incredibly hard things going on with Niri just trying to figure out how to handle some of the more interesting copy-paste scenarios, and with really weird sequencing issues across basically ephemeral inputs, that have really plagued the project and made life incredibly bad for downstream apps. This is just my opinion, man, but I think the lack of ambition about these ridiculous over the top features eventually starts hampering what turns out to be relatively prosaic asks. Better models for multi-seat, multi-cursor help scenarios like remote-desktop, and video-chat remote control, that at first don't seem needed, but are fundamentals that pay dividends if you shoot for them.

jchw•5m ago
On the note of the two different kinds of seats, a tangent: better multi physical seat support is something I am passionate about, specifically, I want Windows-style "Fast User Switching" on Linux with RDP. Today's Linux RDP support usually acts like screen mirroring; you get a mirror of a physical seat. With GNOME I believe there is also now support to do remote login: you can log in remotely, and even disconnect and reconnect to a remote login session. But what you can't do is continue a physical session remotely or a remote session physically, and the reason why is sorta to do with seats. Sort of.

See, when you start a graphical session on modern systemd-based Linux, a new logind session is created, and it is immutably tied to a seat. So you can't just remove the seat from a running logind session and then make it remote, or add the seat to a running logind session and make it physical. I actually tried patching systemd-logind to do this, but when I proposed it upstream, Lennart Poettering himself actually took the time to explain that this wasn't the intended way to do it: instead, you would actually just create a new logind session and drop the old one entirely, or literally whatever you want.

Which to me sounded perposterous, but then I realized that it really wasn't that ridiculous. As it was, when you boot a desktop using systemd-logind, the desktop itself doesn't typically run much of anything directly in the session context anyway - the compositor and almost all services actually run as user services, as in systemd-land having more than one active desktop session per user isn't really supported. Okay so we can do this!

And so I set out to prototype this with KDE, but there are still a few issues...

- First and foremost, $XDG_SESSION_ID. Believe it gets set by the systemd PAM module somehow? I don't fully recall. Either way, it gets used by various programs to determine the current logind session, but if our graphical session can "roam" between them we need a mechanism that can handle changing over time. I propose we stuff the current logind session ID into a file in $XDG_RUNTIME_DIR instead.

- Secondly, compositors need to be redesigned to handle this. Compositors today can hotplug displays and input devices - that's a good start. Unfortunately, at least kwin can't switch backends at runtime. You can really go one of two ways, and I tried a bit of both and either can work but both are a bit ugly: one is to make a single backend that can handle either case and the other is to allow switching the backend at runtime. Either way, when running remotely the card* DRM nodes are unavailable so you need to switch to renderD* nodes instead. You can also use both, and only use card* for scanout when available, but it seems a bit trickier.

- Finally, I genuinely have no idea how this could or should be handled in non-systemd environments. I have admittedly forgotten how that all works. It would be rather lame to simply require logind for this to work, but sadly it is the path of least resistance at least at first.

And maybe some more, but otherwise the concept does indeed broadly work. I mainly have only tested it in virtual machines with DRM native context, but I can see everything working switching in either direction at least once before things start to get screwed up. Even OpenGL clients and audio playback can move seamlessly! It's just like what Windows accomplished over 20 years ago!

Aside from convenience and being cool, it would also solve a couple problems. No need to worry about the limit of only one session per user: just move your session with you. No need to worry about your physical session being unlocked when remotely connected: when you log in this way your physical seat gets disconnected from the session entirely and the display manager takes it back over.

I actually would really like to at least make some progress on ground work that would be needed to make this happen, although I'm not really that sure that anybody cares. But either way this post's brief discussion about physical vs logical seats activated a few neurons so I couldn't help but dump this out.

jauntywundrkind•1m ago
On the web, PointerEvents and touch events both support multiple different cursors. https://developer.mozilla.org/en-US/docs/Web/API/Touch_event... https://developer.mozilla.org/en-US/docs/Web/API/PointerEven...

Codex Security

https://github.com/openai/codex-security
376•bakigul•6h ago•114 comments

Show HN: I was tired of opening 2 tabs for every HN link, so I made a userscript

https://github.com/twalichiewicz/HNewhere
163•twalichiewicz•5h ago•53 comments

LearnVector – Andrew Ng's AI company building one‑to‑one learning experiences

https://learnvector.ai/
36•ajhai•1h ago•20 comments

Half-Life ported to Mac OS 9

https://mac-classic.com/news/half-life-ported-to-mac-os-9/
170•freediver•6h ago•86 comments

Substack writers, you need a website

https://elizabethtai.com/2026/06/10/substack-writers-you-need-a-website/
436•speckx•10h ago•215 comments

Truth is not a direction: a Tarski attack on LLM probes

https://abeljansma.nl/2026/07/10/truth-is-not-a-direction.html
31•abelaer•1d ago•2 comments

Teach yourself programming in ten years (1998)

https://www.norvig.com/21-days.html
65•vinhnx•2d ago•23 comments

Chip stocks slide in US and Asia as AI jitters rattle investors

https://www.bbc.com/news/articles/cly8zng43npo
13•yogthos•1h ago•3 comments

Hubble: Open-source notetaking app for you and your agents

https://www.hubble.md/
54•handfuloflight•3h ago•9 comments

Steel Bank Common Lisp version 2.6.7

https://sbcl.org/all-news.html?2.6.7
203•tmtvl•10h ago•85 comments

ReFrame – The EPaper Camera

https://reframe.camera/
46•phil294•3h ago•13 comments

Kimi K3 Architecture Overview and Notes

https://sebastianraschka.com/blog/2026/kimi-k3-architecture-notes.html
333•ModelForge•11h ago•51 comments

Multiple Mouse Cursors in Wayland

https://blinry.org/multi-seat-wayland/
25•marvinborner•2h ago•12 comments

Does every question mark deserve a Betteridge?

https://dynomight.net/betteridge/
5•zdw•46m ago•2 comments

Hooray for the Sockets Interface

https://blog.apnic.net/2026/07/28/hooray-for-the-sockets-interface/
5•jruohonen•50m ago•3 comments

Delayed Gratification – Proud to Be 'Last to Breaking News'

https://www.slow-journalism.com/
248•speerer•11h ago•146 comments

Lightweight Spring Boot Monitoring Without Prometheus and Grafana

https://pvrlabs.xyz/articles/lightweight-spring-boot-monitoring.html
16•ejboy•2h ago•1 comments

Beyond Greece and Rome

https://aeon.co/essays/uncovering-a-global-ancient-history-beyond-greece-and-rome
5•diodorus•1d ago•0 comments

Interview with Boris Cherny [video]

https://www.youtube.com/watch?v=qyPCVqFUyDo
42•knighthacker•1d ago•40 comments

The Difference Between a Button and a Link

https://unplannedobsolescence.com/blog/buttons-vs-links/
43•alexpetros•3h ago•18 comments

The iPhone Upgrade Program is being replaced by Apple Upgrade

https://www.apple.com/shop/iphone/iphone-upgrade-program
146•lkurtz•9h ago•285 comments

Show HN: Manim (3Blue1Brown's animation engine) in the browser via WebGPU

https://studio.academa.ai/
29•sinaatalay•3h ago•10 comments

Zig's Incremental Compilation Internals

https://mlugg.co.uk/posts/incremental-compilation-internals/
206•garyhtou•11h ago•142 comments

Discovering Cryptographic Weaknesses with Claude

https://www.anthropic.com/research/discovering-cryptographic-weaknesses
189•gslin•9h ago•132 comments

Pacing the frontier

https://www.pacingthefrontier.com/
96•reducesuffering•7h ago•91 comments

Show HN: Lean4 Datalog DSL Based on Google Zanzibar for AI Projects

https://github.com/jagg-ix/zil-lean
3•kbradero•53m ago•0 comments

The Fabled Flatbreads of Uzbekistan (2015)

https://www.aramcoworld.com/articles/2015/the-fabled-flatbreads-of-uzbekistan
84•jxub•4d ago•61 comments

Kimi Linear: An Expressive, Efficient Attention Architecture (2025)

https://arxiv.org/abs/2510.26692
289•ronfriedhaber•16h ago•123 comments

New HIV vaccine shows unprecedented success in preclinical study

https://www.lji.org/news-events/news/post/new-hiv-vaccine-shows-unprecedented-success-in-preclini...
583•codebyaditya•14h ago•245 comments

Una GPS smart watch – Repairable, USB-C charging, developer-friendly

https://unawatch.com/
147•pimterry•12h ago•95 comments