Open Manu99it opened 3 months ago
On Windows if you hold [Alt Gr] and type a letter you can use the acute accent: é, á, í, ó, ú, ý
It is probably a Windows-specific behavior. Not all OS behave the same way (it is not a "limitation", it's just different dehaviors).
and similarly [Alt Gr] + 4 produces the eur symbol €
AltGr+e produces € (at least with a French layout).
@rom1v so I managed to try with a true physical keyboard and AltGr does in fact works correctly and behaves the same as Windows with the UK extended layout or any other layout. I think that when there is uhid setting enabled, scrcpy doesn't pass the AltGr key. Alt is the key you use for shortcuts, maybe it goes in conflict
What keyboard layout do you use on Android for UHID?
(press MOD+k while mirroring with UHID is enabled: https://github.com/Genymobile/scrcpy/blob/master/doc/keyboard.md#physical-keyboard-simulation)
What keyboard layout do you use on Android for UHID?
(press MOD+k while mirroring with UHID is enabled: https://github.com/Genymobile/scrcpy/blob/master/doc/keyboard.md#physical-keyboard-simulation)
As I said, I installed the app I mentioned that adds UK extended layout. But AltGr for me didn't work with ANY layout, even the default ones (I tried Italian (my language), France, etc. AltGr doesn't work)
Indeed, if you press a modifier key, it only set the modifier in the HID protocol (so it is taken into account for all my key combinations), but the scancode of the modifier key itself is never sent. Run with scrcpy -K -Vverbose --no-audio
:
VERBOSE: hid keyboard: key down scancode=e6 (230) mod=40
VERBOSE: input: UHID input [1] 40 00 00 00 00 00 00 00
VERBOSE: hid keyboard: key up scancode=e6 (230) mod=00
VERBOSE: input: UHID input [1] 00 00 00 00 00 00 00 00
That may be important for your use case.
Please test with this quick&dirty workaround:
diff --git a/app/src/hid/hid_keyboard.h b/app/src/hid/hid_keyboard.h
index ddd2cc91c..b5ffff04d 100644
--- a/app/src/hid/hid_keyboard.h
+++ b/app/src/hid/hid_keyboard.h
@@ -12,7 +12,7 @@
// Maybe SDL_Keycode is used by most people, but SDL_Scancode is taken from USB
// HID protocol.
// 0x65 is Application, typically AT-101 Keyboard ends here.
-#define SC_HID_KEYBOARD_KEYS 0x66
+#define SC_HID_KEYBOARD_KEYS 0xFF
extern const uint8_t SC_HID_KEYBOARD_REPORT_DESC[];
extern const size_t SC_HID_KEYBOARD_REPORT_DESC_LEN;
With it, the scancode is sent:
VERBOSE: hid keyboard: key down scancode=e6 (230) mod=40
VERBOSE: input: UHID input [1] 40 00 E6 00 00 00 00 00
VERBOSE: keys[e6] = false
VERBOSE: hid keyboard: key up scancode=e6 (230) mod=00
VERBOSE: input: UHID input [1] 00 00 00 00 00 00 00 00
VERBOSE: keys[e2] = false
Thank you for the prebuilt binary, I was going to rebuild everything 😅. However, nothing changed: old
New:
Now that I see it in the debugger, even with the old server scrcpy IS passing the AltGr key, right? Maybe it passes Alt_R instead of AltGr though
Sorry, I posted a server binary whereas the change was in the client 🤦 (doing several things at once…)
Now I'm on the phone so I will post a binary later.
Here is a binary:
scrcpy-win64-issue4948.zip
SHA-256: d9bdb90548b1ba3a93786fca32151ccbe8afe84226ab270375b0cb1fccbe312
This is the output. The AltGr key still seems to be not functioning
OK, so this scancode is not the source of the difference with the behavior you get with a keyboard.
Could you test with AOA instead of UHID? https://github.com/Genymobile/scrcpy/blob/master/doc/keyboard.md#aoa
It doesn't work either. Here is the console debug
I found a solution: holding AltGr, then pressing and releasing LCtrl does input the acute accent! I noted that scrcpy sends 2 keyboard events instead of one when pressing altgr, pressing LCtrl "deletes" that one and then AltGr works correctly
@rom1v I've scrolled back a few issues and noted #4725 so probably my issue is a duplicate of that one. And in AOA mode the behaviour is the same. If the sdl library won't patch this you could add a workaround for windows or hint windows users to pressing and releasing LCtrl while holding altgr for the correct behaviour on android
Oh yes, I should have thought of this AltGr problem with SDL on Windows (refs https://github.com/libsdl-org/SDL/issues/9201).
If the sdl library won't patch this
IIUC, it is intended to be fixed in SDL 3: https://github.com/libsdl-org/SDL/issues/5685
I found a solution: holding AltGr, then pressing and releasing LCtrl does input the acute accent! I noted that scrcpy sends 2 keyboard events instead of one when pressing altgr, pressing LCtrl "deletes" that one and then AltGr works correctly
Thank you! Maybe this workaround should be documented until SDL update?
Environment
Describe the bug I installed this app https://github.com/calin-darie/extra-keyboard-layouts to have the UK extended layout I use. On Windows if you hold [Alt Gr] and type a letter you can use the acute accent: é, á, í, ó, ú, ý. It doesn't behave like a dead key because you need to hold it. However on android [Alt Gr] + [vowel] does nothing. It's an Android limitation? Or app limitation? I am posting the issue here because I use the keyboard through scrcpy, and I can't test it directly on android because it has a proprietary connector (surface keyboard). If by scrcpy all is done correctly I'll post an issue on the app git. When using UK extended with italian it's needed for example, especially the 'é'. Also [Alt Gr] + backtick (grave accent) on windows produces ¦ and similarly [Alt Gr] + 4 produces the eur symbol €. On Android nothing happens, at least through scrcpy