<div dir="ltr"><div dir="ltr">Hi,</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 20 Jul 2023 at 21:41, Jonas Ådahl <<a href="mailto:jadahl@gmail.com" target="_blank">jadahl@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, Jul 20, 2023 at 01:47:47PM -0500, Matt Hoosier wrote:<br>
> Hi,<br>
> <br>
> For a while now, I’ve been hoping to see some commercial solutions like<br>
> <a href="https://symless.com/synergy" rel="noreferrer" target="_blank">https://symless.com/synergy</a> that implement keyboard and mouse sharing<br>
> finally add support for running on DEs that use Wayland.<br>
> <br>
> It seems to be forever on their feature roadmaps but never really getting<br>
> closer.<br>
> <br>
> I assume the problem is lack of a good way to snoop on the input events and<br>
> (maybe; not sure how these commercial solutions implement it) rewrite or<br>
> suppress certain input events when they’re talking to a typical DE<br>
> compositor like Mutter.<br>
> <br>
> I had a quick look through the current set of things in wayland-protocols,<br>
> and nothing jumped out at me as work in that direction.<br>
> <br>
> Does anybody know of something underway in the upstream compositors that<br>
> might not have filtered down to wayland-protocols yet, which would be<br>
> useful for securely implementing mouse/keyboard sharing across separate<br>
> machines? Maybe I could point these vendors to it.<br>
<br>
There is an ongoing, effort to achieve this with xdg-desktop-portal<br>
APIs, where the intention is to allow a sandboxed input-leap (or in<br>
theory synergy) to be able to act as both a server and client in a<br>
Wayland session, while still actively requiring user consent. The pieces<br>
that I know of that currently have implementations that ties it all<br>
together are input-leap, xdg-desktop-portal, the GNOME portal backend<br>
(xdg-desktop-portal-gnome & mutter).<br>
<br>
The portals in question are input capture[1], for capturing the input<br>
from a display server (to the input leap *server*), and remote<br>
desktop[2], for remote controlling / injecting input events to a display<br>
server (from the input leap *client*). The portal APIs rely on libei[3]<br>
for input event transmission - the portals are there to negotiate<br>
consent and to set up sessions.<br>
<br><br>
<br>
<br>
Jonas<br>
<br>
[1] <a href="https://github.com/flatpak/xdg-desktop-portal/pull/714" rel="noreferrer" target="_blank">https://github.com/flatpak/xdg-desktop-portal/pull/714</a><br>
[2] <a href="https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.RemoteDesktop" rel="noreferrer" target="_blank">https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.RemoteDesktop</a><br>
[3] <a href="https://gitlab.freedesktop.org/libinput/libei" rel="noreferrer" target="_blank">https://gitlab.freedesktop.org/libinput/libei</a></blockquote><div><br></div><div>To complement what Jonas said, the merge request to add support for this in InputLeap is [4] and the code seems to have been kept updated since then AFAICS [5].</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">It should be possible to use input-leap with mouse/keyboard sharing with<br>all the building blocks manually compiled, but nothing has shipped in<br>distributions yet.</blockquote><div><br></div><div>FWIW, as a teaser internally, I made a video a few months ago of this working on a local build here [6] between two laptops (please make sure to turn the sound down, apologies for that!) :-)</div><div><br></div><div>The relevant bits for this (and more) are all linked from that libEI issue [7].</div><div><br></div><div>Cheers</div><div>Olivier</div><div><br></div><div>[4] <a href="https://github.com/input-leap/input-leap/pull/1594" target="_blank">https://github.com/input-leap/input-leap/pull/1594</a><br>[5] <a href="https://github.com/input-leap/input-leap/pulls?q=libei" target="_blank">https://github.com/input-leap/input-leap/pulls?q=libei</a></div><div>[6] <a href="https://youtu.be/8XUUFuwsDWQ" rel="noreferrer" target="_blank">https://youtu.be/8XUUFuwsDWQ</a></div><div>[7] <a href="https://gitlab.freedesktop.org/libinput/libei/-/issues/1">https://gitlab.freedesktop.org/libinput/libei/-/issues/1</a></div></div></div>