diff --git a/src/xpra/client/gobject_client_base.py b/src/xpra/client/gobject_client_base.py index 8a55030d19..6e578252bd 100644 --- a/src/xpra/client/gobject_client_base.py +++ b/src/xpra/client/gobject_client_base.py @@ -122,7 +122,7 @@ def __init__(self, opts): #don't bother with many of these things for one-off commands: for x in ("ui_client", "wants_aliases", "wants_encodings", "wants_versions", "wants_features", "wants_sound", "windows", - "webcam", + "webcam", "keyboard", "mouse", ): self.hello_extra[x] = False diff --git a/src/xpra/client/ui_client_base.py b/src/xpra/client/ui_client_base.py index 3f8d870a4e..b0b71afdf4 100644 --- a/src/xpra/client/ui_client_base.py +++ b/src/xpra/client/ui_client_base.py @@ -352,6 +352,7 @@ def make_hello(self): "share" : self.client_supports_sharing, "lock" : self.client_lock, }) + caps.update({"mouse" : True}) caps.update(self.get_keyboard_caps()) for c in CLIENT_BASES: caps.update(c.get_caps(self)) diff --git a/src/xpra/server/source/input_mixin.py b/src/xpra/server/source/input_mixin.py index cf65b374dc..5c412613b3 100644 --- a/src/xpra/server/source/input_mixin.py +++ b/src/xpra/server/source/input_mixin.py @@ -18,6 +18,12 @@ """ class InputMixin(StubSourceMixin): + @classmethod + def is_needed(cls, caps : typedict) -> bool: + #the 'input' capability was only added in v4, + #so we have to enable the mixin by default: + return caps.boolget("keyboard", True) or caps.boolget("mouse", True) + def init_state(self): self.pointer_relative = False self.keyboard_config = None