microsoft / wslg

Enabling the Windows Subsystem for Linux to include support for Wayland and X server related scenarios
MIT License
10.11k stars 304 forks source link

Can not switch input languages #296

Open speller opened 3 years ago

speller commented 3 years ago

Environment

Windows build number: 21390.1010
Your Distribution version: Ubuntu 20.04
Your WSLg version: 1.0.22

I have multiple input languages installed in my system (English and Russian). But in WSL GUI apps, I only have Russian and can't switch to English.

hideyukn88 commented 3 years ago

@speller, thank you for reporting the issues. How do you switch input languages? Do you switch at Windows side? [Figure 1] If so, would you please check /mnt/wslg/weston.log? There should be logging like below and please check LanguageID/KeyboardLayout is 0x419 and matchng layout is "ru" when switch to Russian, and LanguageID/KeyboardLayout is 409 and matching layout is "us" for English. While I don't understand Russian, but as far as I tried, it seems language switch is working by switching language from Language bar at Windows's taskbar. Thanks!

1: When input language is switched to Russian.

[11:18:36.619] Client: LanguageImeInfo: ProfileType: 2 (TF_PROFILETYPE_KEYBOARDLAYOUT) [11:18:36.619] Client: LanguageImeInfo: LanguageID: 0x419 [11:18:36.619] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_NULL [11:18:36.619] Client: LanguageImeInfo: ProfileGUID: GUID_NULL [11:18:36.619] Client: LanguageImeInfo: KeyboardLayout: 0x419 [11:18:36.619] convert_rdp_keyboard_to_xkb_rule_names: matching layout=ru variant=(null)

2: When input language is switch back to English

[11:18:29.836] Client: LanguageImeInfo: ProfileType: 2 (TF_PROFILETYPE_KEYBOARDLAYOUT) [11:18:29.837] Client: LanguageImeInfo: LanguageID: 0x409 [11:18:29.837] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_NULL [11:18:29.837] Client: LanguageImeInfo: ProfileGUID: GUID_NULL [11:18:29.837] Client: LanguageImeInfo: KeyboardLayout: 0x409 [11:18:29.837] convert_rdp_keyboard_to_xkb_rule_names: matching layout=us variant=(null)

[Figure 1] image

speller commented 3 years ago

@hideyukn88 I have no file /mnt/wslg/weston.log:

$ cat /mnt/wslg/weston.log
cat: /mnt/wslg/weston.log: No such file or directory
onomatopellan commented 3 years ago

@speller what's the output for mount | grep -i wslg ?

thiagoa commented 2 years ago

I have the same issue. Within an X11 app (Emacs / gvim), I can't switch my keyboard layout on the fly with Alt + shift. Even if I quit the app and reopen it, it doesn't pick up my alternate keyboard layout if active. It seems to always pick up the first one.

speller commented 2 years ago

what's the output for mount | grep -i wslg ?

$ mount | grep -i wslg
none on /wslg type tmpfs (rw,relatime)
none on /wslg/versions.txt type overlay (rw,relatime,lowerdir=/,upperdir=/system/rw/upper,workdir=/system/rw/work)
none on /wslg/doc type overlay (rw,relatime,lowerdir=/,upperdir=/system/rw/upper,workdir=/system/rw/work)
hideyukn88 commented 2 years ago

@speller, if you don't see /mnt/wslg/weston.log, it's possible weston is not starting, can you share /mnt/wslg/stderr.txt and versions.txt?

@thiagoa, what are the keyboard layouts do you switch from/to?

Thanks!

onomatopellan commented 2 years ago

@speller In your case the file to check should be /wslg/weston.log

thiagoa commented 2 years ago

@hideyukn88

Tested with a standard GTK application, Geany, and the issue remains. I can't input accented characters; the layout behaves as if it were US.

hideyukn88 commented 2 years ago

@thiagoa, thank you very much for info. I will add support for KBD_UNITED_STATES_INTERNATIONAL, it allows input of accented characters with right ALT key. Thanks!

thiagoa commented 2 years ago

@hideyukn88 Thank you for taking on this! I also use the Brazilian ABNT2 layout, which allows accented characters as well and some shortcuts for Brazilian users.

speller commented 2 years ago

I didn't use WSLg for a while and now language switching seems to be working fine for me.

afilp commented 2 years ago

Hi, I am on Windows 10, with GWSL2. While the keyboard switching works in the terminal (from US to Greek and vice-verca), it does not work in any GUI app, for example in Ubuntu Chrome. I am using ALT-SHIFT.

I do not have any such folder: /mnt/wslg

I have /mnt/wsl and inside it are only docker files.

Is there something I can do?

onomatopellan commented 2 years ago

@afilp This repo is for WSLg users in Windows 11. In your case you are using another solution that is not from Microsoft so you should ask in https://github.com/Opticos/GWSL-Source/issues instead.

afilp commented 2 years ago

Ok, thanks, unfortunately Microsoft does not allow me to upgrade to Win11, just because of the CPU generation is a little older than the minimum requirement, despite the PC is pretty strong (Dell Alienware, everything works great and fast).

yeya commented 2 years ago

Hi @hideyukn88 Can you add support for Hebrew too? Thanks in advance...

Windows build number: 10.0.22000.556 Distribution version: 20.04 WSLg version: 1.0.26

Swith to english

[14:46:56.502] Client: LanguageImeInfo: ProfileType: 2 (TF_PROFILETYPE_KEYBOARDLAYOUT)
[14:46:56.502] Client: LanguageImeInfo: LanguageID: 0x409
[14:46:56.502] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_NULL
[14:46:56.502] Client: LanguageImeInfo: ProfileGUID: GUID_NULL
[14:46:56.502] Client: LanguageImeInfo: KeyboardLayout: 0x409
[14:46:56.502] convert_rdp_keyboard_to_xkb_rule_names: matching layout=us variant=(null) options=(null)

Switch to Hebrew

[14:47:09.789] Client: LanguageImeInfo: ProfileType: 2 (TF_PROFILETYPE_KEYBOARDLAYOUT)
[14:47:09.789] Client: LanguageImeInfo: LanguageID: 0x40d
[14:47:09.789] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_NULL
[14:47:09.789] Client: LanguageImeInfo: ProfileGUID: GUID_NULL
[14:47:09.789] Client: LanguageImeInfo: KeyboardLayout: 0x2040d
[14:47:09.789] convert_rdp_keyboard_to_xkb_rule_names: matching layout=(null) variant=(null) options=(null)
[14:47:09.789] rail_client_LanguageImeInfo_callback: Failed to switch to kbd_layout:0x2040d kbd_type:0x4 kbd_subType:0x0
RiccardoManzan commented 2 years ago

Hi, could you add support for United States-International (INTL)? Corresponding ubuntu keyboard is English(US) - English(US, intl., with dead keys)

Switching to this layout i get this logs:

[14:27:38.546] Client: ClientGetAppidReq: pid:28722 appId:jetbrains-idea
[14:27:38.573] Client: LanguageImeInfo: ProfileType: 2 (TF_PROFILETYPE_KEYBOARDLAYOUT)
[14:27:38.573] Client: LanguageImeInfo: LanguageID: 0x409
[14:27:38.580] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_NULL
[14:27:38.580] Client: LanguageImeInfo: ProfileGUID: GUID_NULL
[14:27:38.580] Client: LanguageImeInfo: KeyboardLayout: 0x20409
[14:27:38.580] convert_rdp_keyboard_to_xkb_rule_names: matching layout=(null) variant=(null) options=(null)
[14:27:38.580] rail_client_LanguageImeInfo_callback: Failed to switch to kbd_layout:0x20409 kbd_type:0x4 kbd_subType:0x0
hideyukn88 commented 2 years ago

@RiccardoManzan, the US international keyboard is supported by https://github.com/microsoft/weston-mirror/pull/57, please update WSL from aka.ms/wslstorepage and try again, thanks!

RiccardoManzan commented 2 years ago

Hi, i didn't installed WSL via ms store, so i tried updating WSL using wsl.exe --upgrade obtaining this output:

Checking for updates...
No updates are available.
Kernel version: 5.10.102.1

Am i missing something? I am still not able to switch between italian layout and us-intl

Thanks for your help.

hideyukn88 commented 2 years ago

@RiccardoManzan, you need to one time manual update from aka.ms/wslstorepage, then newer version of wsl.exe will check update from Store. There is a plan to update Windows's version of wsl.exe with Store version of wsl.exe, but it hasn't been released to public yet. If you are on Windows's insider program, then your wsl.exe should check update from Store, thanks!

ParSal123 commented 2 years ago

Hi @hideyukn88 Can you add support for Persian too?

Windows version : 21H2 Build 22000.978 Also I don't know where to see wsl/wslg version. When I try wsl --version it shows help as if command is invalid.

Switching to Persian:

[11:35:29.676] Client: LanguageImeInfo: ProfileType: 2 (TF_PROFILETYPE_KEYBOARDLAYOUT)                                                                                                                          
[11:35:29.676] Client: LanguageImeInfo: LanguageID: 0x429                                                                                                                                                       
[11:35:29.676] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_NULL                                                                                                                                         
[11:35:29.676] Client: LanguageImeInfo: ProfileGUID: GUID_NULL                                                                                                                                                  
[11:35:29.676] Client: LanguageImeInfo: KeyboardLayout: 0x50429                                                                                                                                                 
[11:35:29.676] convert_rdp_keyboard_to_xkb_rule_names: matching layout=(null) variant=(null) options=(null)                                                                                                    
[11:35:29.676] rail_client_LanguageImeInfo_callback: Failed to switch to kbd_layout:0x50429 kbd_type:0x4 kbd_subType:0x0

And just out of curiosity, does it have to be an issue/comment per language support or is there any other way?:D Thank you

hideyukn88 commented 2 years ago

@ParSal123, Persian keyboard layout is supported by https://github.com/microsoft/weston-mirror/pull/32, and it looks you are on very older version of WSL/WSLg, please update it from aka.ms/wslstorepage, thanks!

mehdi-benallegue commented 1 year ago

Hello,

This is my feedback when I switch to Japanese Latin Keyboard (Microsoft IME)

[09:13:46.185] Client: LanguageImeInfo: ProfileType: 1 (TF_PROFILETYPE_INPUTPROCESSOR)
[09:13:46.185] Client: LanguageImeInfo: LanguageID: 0x411
[09:13:46.185] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_JPNIME
[09:13:46.185] Client: LanguageImeInfo: ProfileGUID: GUID_PROFILE_MSIME_JPN
[09:13:46.185] Client: LanguageImeInfo: KeyboardLayout: 0x0
[09:13:46.185] convert_rdp_keyboard_to_xkb_rule_names: matching model=pc105 layout=us variant=(null) options=(null)

The layout should be like this one image

I don't want to write Japanese letters, I just need to write in latin with this layout (for example SHiFT+6 gives & instead of ^).

related to https://github.com/microsoft/wslg/issues/658

Thank you

a-sorochak commented 1 year ago

I have the same issue when trying to use Ukrainian keyboard layout in WSLg apps. Could you please add it?

Entry in /mnt/wslg/weston.log:

[21:33:40.966] Client: LanguageImeInfo: ProfileType: 2 (TF_PROFILETYPE_KEYBOARDLAYOUT)
[21:33:40.967] Client: LanguageImeInfo: LanguageID: 0x422
[21:33:40.967] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_NULL
[21:33:40.967] Client: LanguageImeInfo: ProfileGUID: GUID_NULL
[21:33:40.967] Client: LanguageImeInfo: KeyboardLayout: 0x20422
[21:33:40.967] convert_rdp_keyboard_to_xkb_rule_names: matching model=pc105 layout=(null) variant=(null) options=(null)
[21:33:40.967] rail_client_LanguageImeInfo_callback: Failed to switch to kbd_layout:0x20422 kbd_type:0x4 kbd_subType:0x0

WSL version:

WSL version: 1.1.3.0
Kernel version: 5.15.90.1
WSLg version: 1.0.49
MSRDC version: 1.2.3770
Direct3D version: 1.608.2-61064218
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.19044.2364
pustomytnyk commented 1 year ago

Same as above, Ukrainian (Enhanced) Layout doesn't work in GUI apps. Default one works fine.

Ukrainian (Enhanced) Layout:

[22:27:03.373] Client: LanguageImeInfo: ProfileType: 2 (TF_PROFILETYPE_KEYBOARDLAYOUT)
[22:27:03.373] Client: LanguageImeInfo: LanguageID: 0x422
[22:27:03.373] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_NULL
[22:27:03.373] Client: LanguageImeInfo: ProfileGUID: GUID_NULL
[22:27:03.373] Client: LanguageImeInfo: KeyboardLayout: 0x20422
[22:27:03.373] convert_rdp_keyboard_to_xkb_rule_names: matching model=pc105 layout=us variant=(null) options=(null)
[22:27:03.375] rail_client_LanguageImeInfo_callback: new keyboard layout: 0x20422

I prefer UkrainianUnicode layout which outputs this:

[22:21:05.478] Client: LanguageImeInfo: ProfileType: 2 (TF_PROFILETYPE_KEYBOARDLAYOUT)
[22:21:05.478] Client: LanguageImeInfo: LanguageID: 0x422
[22:21:05.478] Client: LanguageImeInfo: LanguageProfileCLSID: GUID_NULL
[22:21:05.478] Client: LanguageImeInfo: ProfileGUID: GUID_NULL
[22:21:05.478] Client: LanguageImeInfo: KeyboardLayout: 0xa0000422
[22:21:05.478] convert_rdp_keyboard_to_xkb_rule_names: matching model=pc105 layout=us variant=(null) options=(null)
[22:21:05.490] rail_client_LanguageImeInfo_callback: new keyboard layout: 0xa0000422
pustomytnyk commented 1 year ago

@hideyukn88 does my PR make sense?