Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bug(?): Keycastr sometimes only captures modifier keys when Discord is monitoring input #292

Open
jimschubert opened this issue Mar 11, 2024 · 1 comment

Comments

@jimschubert
Copy link

This is the weirdest issue I've experienced on Mac. I realize it's most likely a bug with the OS or Discord and not Keycastr, but I'm raising here for awareness and in case there are any additional checks or workarounds that can be done to resolve the issue.

I recently upgraded my machine and after setting up all streaming related applications, I was surprised to find that Keycastr no longer worked. My old machine was a 2017 Macbook Pro, while my new machine is a 2023 Macbook Pro w/M3 Pro chip.

From my initial setup, Keycastr would only capture modifier keys and no others. The default overlay would only show clicks/taps and no keys. The Svelte overlay would show modifier keys being pressed but no other keys.

I worked through all the troubleshooting and wiki guides to no avail. I attempted uninstalling and reinstalling Keycastr. I also reverted to older versions to see if there was maybe a newly introduced bug - nothing worked. I removed Keycastr from input monitoring between each trial. For each attempt, I downloaded the artifact from the GitHub Releases page and copied into Applications. Each time I reopened Keycastr was from Applications directly because using Spotlight would display Keycastr from Trash (which I deleted as well).

Viewing events via Console didn't display any errors from Keycastr, or any other errors aside from telemetry errors from various Apple apps due to my VPN.

Finally, I installed KeyLimePie via the App Store and found that it couldn't capture any keys.

This made me wonder if it was a conflict. The only other input monitoring app I have installed is Discord, which I didn't have installed on the older machine because I mainly use mobile Discord. I'm not sure why Discord requires input monitoring (maybe for voice chat), but I rarely use it so removed its input monitoring permissions. Removing Discord's permissions and reinstalling the binary didn't unblock Keycastr, but did unblock KeyLimePie. Removing Discord's permissions and re-installing Keycastr via Homebrew worked. After this, uninstalling Keycastr via Homebrew and installing the artifact manually also worked.

I realize a reproduction may be nearly impossible, so maybe a note on potential conflicts with other input monitoring in the readme would help. For example:

If issues persist after removing Keycastr permissions from Input Monitoring and re-installing, try toggling off all input monitoring applications. Then, ensure Keycastr is fully removed (e.g. Move to Trash then in Trash select Delete immediately). Install Keycastr, then enable input monitoring. Other input monitoring applications can then be re-enabled.

@akitchen
Copy link
Member

Thank you for opening an issue and describing this scenario. Yes, there are cases where other applications can interfere with input monitoring. There is also secure input to consider, which you can enable and test out in Terminal.app. Notice that KeyCastr won't receive events while Terminal is in the foreground and other apps in the menu bar might not even receive mouse clicks. I don't know if Discord is also using secure input, but it's possible. It's all a bit of a mess from an app developer's perspective.

Glad you got to the bottom of the issue. My guess is that KeyCastr needed to register its accessibility API permissions while Discord wasn't monitoring input, but it's also possible that something else happened during the sequence you described or Discord was doing something additional with the input. Regardless, some adjustment to the troubleshooting steps is warranted; thank you for the suggestion.

By the way, with input monitoring enabled, Discord (or any app) is able to snoop on all of your typing in other applications unless secure entry is being used by that app. It's probably there for some global keyboard shortcuts; who knows. I would only enable it for apps I absolutely trust and from which I benefit from input monitoring, which isn't many.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants