mirror of
https://github.com/games-on-whales/wolf.git
synced 2026-10-15 21:12:08 +00:00
[GH-ISSUE #272] Gamepad input blocked by Artemis client due to missing permission flag #190
Labels
No labels
🧠 1 - 🤖 999
AMD
bug
bug
cannot reproduce
documentation
duplicate
easy
enhancement
enhancement
enhancement
fixed?
fixed?
good first issue
hard
help wanted
Intel
invalid
LXC
medium
moonlight-protocol
Multi GPU
nixos
not a bug
nvidia
pull-request
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
games-on-whales/wolf#190
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @zeedif on GitHub (Oct 15, 2025).
Original GitHub issue: https://github.com/games-on-whales/wolf/issues/272
I've encountered a compatibility issue when using the Artemis client (a popular Moonlight fork) with Wolf. Specifically, gamepad/joystick input from the client is completely blocked and does not work during a streaming session. Mouse and keyboard inputs work as expected.
Environment:
moonlight-noirbranch) on Android.Root Cause
Artemis is a fork of Moonlight primarily designed for Apollo (a Sunshine fork), which has implemented a detailed permission system.
When an Artemis client connects, it expects the server to send a
<Permission>tag in the initial XML response from/serverinfo. This tag is a bitmask that tells the client what inputs are allowed (controller, mouse, keyboard, etc.).Since Wolf implements the standard GameStream protocol, it does not send this
<Permission>tag. As a result, Artemis defaults to a state where it doesn't have explicit permission for controller input and therefore blocks it.Supporting Evidence from Artemis Source Code
The relevant code in Artemis that checks for this permission can be found in the
moonlight-noirbranch:The
permissionfield inComputerDetails.java, which defaults to-1(indicating no permissions are set) and includes constants for different input types likeinput_controller.app/src/main/java/com/limelight/nvstream/http/ComputerDetails.javaThe parsing logic in
NvHTTP.javawhich actively looks for the<Permission>tag in the server's XML response.app/src/main/java/com/limelight/nvstream/http/NvHTTP.javaSupporting Evidence from Apollo (Server) Source Code
To further support this, we can look at the Apollo (Sunshine fork) source code, which confirms that sending the
<Permission>tag is a deliberate part of its protocol.The
serverinfofunction in Apollo actively adds the<Permission>tag to its XML response. The permission value is retrieved from the authenticated client's stored data.src/nvhttp.cppThe permission bitmask itself is defined in Apollo's
crypto.hfile. This is where the flags forinput_controllerand the_allmask originate.src/crypto.hThis confirms that the absence of the
<Permission>tag in Wolf's response is the reason for the incompatibility with Artemis clients. Adding this tag, as proposed, would align Wolf's behavior with the expectations of the Apollo/Artemis ecosystem for full input compatibility.Proposed Solution
To resolve this and improve compatibility with Artemis/Apollo, Wolf could include the
<Permission>tag in its/serverinforesponse.For a straightforward initial implementation, granting all permissions would be sufficient and would solve the issue completely for Artemis users. The bitmask for all permissions (
_all) in the Artemis/Apollo protocol is0x71F1F00.Adding the following line to the XML response in
wolf/src/moonlight-protocol/moonlight.cppwithin theserverinfofunction would likely fix the issue entirely:(This is the decimal representation of
0x71F1F00).This would be a great enhancement for users who prefer the Artemis client. Thank you for your amazing work on Wolf and for considering this
@ABeltramo commented on GitHub (Oct 15, 2025):
Thanks for the very detailed issue, adding support for that extra
Permissionfield seems straightforward enough.It just makes you wonder though, why have they decided to introduce a non-breaking change and then just limit the Moonlight client when used with a server that's not Apollo? I would expect that Artemis would already default to allow all inputs for a server that doesn't implement their own variation of the protocol.. The same issue that you've opened for Wolf is also valid for Sunshine, right?
Have you tried opening an issue about this on Artemis? It feels that that's the best place to change this behaviour.
@ClassicOldSong commented on GitHub (Oct 15, 2025):
https://github.com/ClassicOldSong/moonlight-android/issues/438#issuecomment-3407990793
@ClassicOldSong commented on GitHub (Oct 15, 2025):
These evidences don't contribute to the conclusion that Artemis uses these flags to block inputs. Actually Artemis only display these info, but not limiting the client side requests, since limiting them client side is pointless.
@ABeltramo commented on GitHub (Oct 15, 2025):
@ClassicOldSong thanks for looking into this, I haven't tried Artemis myself, so I was just basing my comment on the words of @zeedif. Are we all being played by an LLM hallucinating things? 😅
@ClassicOldSong commented on GitHub (Oct 15, 2025):
I think we are...
@ClassicOldSong commented on GitHub (Oct 15, 2025):
The most possible cause is Artemis and Apollo uses a modified moonlight-common-c for some customized packet types, but these should be ignored by incompatible hosts as the original protocol allows.
@ClassicOldSong commented on GitHub (Oct 15, 2025):
But so far there're no reports about compatibility issues of Artemis with Sunshine, and there're user requests about adding specific features to Artemis and they're using it with a Linux host.
@ABeltramo commented on GitHub (Oct 15, 2025):
I see, the root cause is most likely something else then, thanks @ClassicOldSong !
I'm going to close this, @zeedif feel free to open up a new issue with the details of your Wolf installation,
docker runcommand and full logs, and we can look into what's the issue with the gamepad that you are facing..