ValveSoftware / SteamOS

SteamOS community tracker
1.58k stars 70 forks source link

On screen keyboard tab and arrows not working in desktop mode #1325

Open Florin-Popescu opened 9 months ago

Florin-Popescu commented 9 months ago

Your system information

Please describe your issue in as much detail as possible:

Tab and arrow keys of on screen keyboard do not work correctly in some tools in Desktop Mode. I've had this issue since getting the Steam Deck months ago and over many SW updates. Never had issues with any physical keyboard.

Steps for reproducing this issue:

  1. In Konsole the left key seems to do a ctrl+c while right key does a ctrl+d (closes window). However tab and up/down work as expected.
  2. In vscode editor window and terminal (which goes to bash, same as Konsole), tab does nothing, but all 4 arrow keys work correctly.
  3. I ran xev to find out which keys are detected as pressed from the virtual keyboard and results are:

tab key:

KeyPress event, serial 40, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13543639, (240,223), root:(791,521),
    state 0x0, keycode 156 (keysym 0x1000009, (no name)), same_screen YES,
    XLookupString gives 1 bytes: (09) " "
    XmbLookupString gives 1 bytes: (09) "       "
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13543639, (240,223), root:(791,521),
    state 0x0, keycode 156 (keysym 0x1000009, (no name)), same_screen YES,
    XLookupString gives 1 bytes: (09) " "
    XFilterEvent returns: False

up key:

KeyPress event, serial 58, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13652120, (55,418), root:(606,716),
    state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 58, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13652120, (55,418), root:(606,716),
    state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

down key:

KeyPress event, serial 58, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13720198, (132,367), root:(683,665),
    state 0x0, keycode 116 (keysym 0xff54, Down), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 58, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13720199, (132,367), root:(683,665),
    state 0x0, keycode 116 (keysym 0xff54, Down), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

left key:

KeyPress event, serial 58, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13830974, (58,370), root:(609,668),
    state 0x0, keycode 113 (keysym 0xff51, Left), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 58, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13830974, (58,370), root:(609,668),
    state 0x0, keycode 113 (keysym 0xff51, Left), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 58, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13830976, (58,370), root:(609,668),
    state 0x0, keycode 156 (keysym 0x1000003, (no name)), same_screen YES,
    XLookupString gives 1 bytes: (03) ""
    XmbLookupString gives 1 bytes: (03) ""
    XFilterEvent returns: False

KeyRelease event, serial 58, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 13830976, (58,370), root:(609,668),
    state 0x0, keycode 156 (keysym 0x1000003, (no name)), same_screen YES,
    XLookupString gives 1 bytes: (03) ""
    XFilterEvent returns: False

right key:

KeyPress event, serial 76, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 14112784, (76,324), root:(627,622),
    state 0x0, keycode 114 (keysym 0xff53, Right), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 76, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 14112784, (76,324), root:(627,622),
    state 0x0, keycode 114 (keysym 0xff53, Right), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 76, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 14112785, (76,324), root:(627,622),
    state 0x0, keycode 156 (keysym 0x1000004, (no name)), same_screen YES,
    XLookupString gives 1 bytes: (04) ""
    XmbLookupString gives 1 bytes: (04) ""
    XFilterEvent returns: False

KeyRelease event, serial 76, synthetic NO, window 0x1e200001,
    root 0x529, subw 0x0, time 14112786, (76,324), root:(627,622),
    state 0x0, keycode 156 (keysym 0x1000004, (no name)), same_screen YES,
    XLookupString gives 1 bytes: (04) ""
    XFilterEvent returns: False

There's also a lot of repeated events like this for the tab and left/right keys:

MappingNotify event, serial 58, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 156, count 1

I can't figure out what those keysims 0x100000n or keycode 156 are but it looks like they are non-standard and some apps can't process them correctly. I've looked at xkb but can't figure out how the keycode 156 gets mapped to those keysyms or how to change it. Those keys are especially useful in the terminal where it's crazy slow to type everything by hand without autocomplete (tab key). Would it be possible to have the on screen keyboard output standard keycodes only? Or is there some way to remap those keys on my side?

bertogg commented 9 months ago

I can reproduce this easily with build 20240104.1 opening a Konsole and pressing the left button. Is this a thing of the Steam client @lostgoat ?

Jefferson-tan commented 1 month ago

Still an issue as of September 6th, 2024 on the stable branch