Idea for joystick support in sandbox/SDL

Bastien Nocera hadess at hadess.net
Mon Jun 20 21:41:03 UTC 2016


On Mon, 2016-06-20 at 22:16 +0200, Alexander Larsson wrote:
> On mån, 2016-06-20 at 17:39 +0200, Bastien Nocera wrote:
> > Hey,
> > 
> > I've been looking at how we can support joysticks in flatpak,
> > inside
> > the sandbox[1]. As udev's API is a private/system API, and not one
> > stable enough for sandboxed applications to use, and the fact that
> > even
> > though they're input devices their events don't go through the
> > compositor itself, we need to find a way to enumerate joysticks,
> > signal
> > additions and removals, and proxy opening them.
> > 
> > My idea was for the compositor offering this D-Bus API:
> > 
> > - Method:
> > ao ListJoysticks()
> > 
> > - Signals
> > JoystickAdded(o)
> > JoystickRemoved(o)
> > 
> > And on the object path for each joystick:
> > 
> > - Method:
> > fd OpenJoystick()
> > 
> > Signal:
> > JoystickRemoved()
> > 
> > Properties:
> > s HapticsFeatures [2]
> 
> The way I understand thing there are two kinds of joystick devices,
> some supporting the "old" jsN API, and some supporting a more modern
> generic input device API. Is that true, and if so, which fd:s are
> these?

It is true, but the "new" API is around 17 years old, and the "old" API
is usually disabled (the module for it is in kernel-modules-extra in
Fedora IIRC, not installed on my machine).

In short, we don't care about the old API.

> Also, one option we considered at the hackfest was to create a fuse
> filesystem with files in them that "look like" device nodes (but are
> regular files). Operations on these then cause the same operation on
> the backing device node. That way you can emulate the ABI and run
> games
> unchanged. On the other hand, that adds a context switch to every js
> operation, which is not ideal. And also, forwarding ioctls needs
> device-type specific code.

And that won't make SDL or other apps support hotplugging, which would
be a deal-breaker for me.

> > To avoid one application taking the joystick and doing things with
> > it
> > (rumble to death?), we'd revoke the fd given to an application when
> > the
> > application loses focus.
> 
> Do we support revoke for this?

Look in the kernel log for:

commit c7dc65737c9a607d3e6f8478659876074ad129b8
Author: David Herrmann <dh.herrmann at gmail.com>
Date:   Sat Sep 7 12:23:05 2013 -0700

    Input: evdev - add EVIOCREVOKE ioctl

Reading the commit log, it seems to me it was exactly made for this
purpose.

>  Also, how would we track focus?

If the service is implemented in the compositor, is the window <->
sandbox association going to be difficult to implement?

> > Is this doable? Is this good API?
> 
> Probably doable, except maybe revoke.
> 
> > [2]: As used in src/haptic/linux/SDL_syshaptic.c in SDL. Maybe a
> > string
> > list might be better, or a bitmask?
> 
> array of strings is the more dbus/extensible thing to do.

Noted.



More information about the xdg-app mailing list