Skip to content

Layout of a xwayland client always becomes us (where jp expected) after version 1.9.0 #750

Description

@NaofumiHonda

My keyboard layout is jp. However, after version 1.9.0, keyboard layout of any client of xwayland becomes us under both kwin and labwc compositors, which works well before the version.

The problem is that, the compat/japan file has the following section:

default partial xkb_compatibility "japan" {                                                       
                                                                                                  
    interpret.repeat= False;                                                                      
                                                                                                  
    interpret Eisu_Shift+Lock {                                                                   
        action= NoAction();                                                                       
    };                                                                                            
                                                                                                  
    interpret Eisu_toggle+Lock {                                                                  
        action= NoAction();                                                                       
    };                                                                                            
                                                                                                  
    interpret Kana_Shift+Lock {                                                                   
        action= NoAction();                                                                       
    };                                                                                            
                                                                                                  
    interpret Kana_Lock+Lock {                                                                    
        action= NoAction();                                                                       
    };                                                                                            
};            

However, the corresponding output of xkbcli compile-keymap is:

       interpret Eisu_Shift+Exactly(Lock) {};                                                    
        interpret Eisu_toggle+Exactly(Lock) {};                                                   
        interpret Kana_Shift+Exactly(Lock) {};                                                    
        interpret Kana_Lock+Exactly(Lock) {};  

which seems illegal, for example, xkbcomp fails to compile it. Therefore Xwayland also rejects the code, and thus, client's layout becomes us as a fallback layout.

If you apply the patch below to src/xkbcomp/keymap-dump.c

*** src/xkbcomp/keymap-dump.c.org       2025-05-06 22:58:33.574868229 +0900                       
--- ./src/xkbcomp/keymap-dump.c 2025-05-06 22:59:37.118406899 +0900                               
***************                                                                                   
*** 613,619 ****                                                                                  
              buf->size -= sizeof(suffix) - 1; /* trailing comma */                               
              copy_to_buf(buf, "};");                                                             
              has_explicit_properties = true;                                                     
!         } else if (si->num_actions == 1) {                                                      
              if (!write_action(keymap, buf, &si->a.action,                                       
                                "\n\t\taction= ", ";"))                                           
                  return false;                                                                   
--- 613,619 ----                                                                                  
              buf->size -= sizeof(suffix) - 1; /* trailing comma */                               
              copy_to_buf(buf, "};");                                                             
              has_explicit_properties = true;                                                     
!         } else if (si->num_actions <= 1) {                                                      
              if (!write_action(keymap, buf, &si->a.action,                                       
                                "\n\t\taction= ", ";"))                                           
                  return false;            

then everything goes well.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    X11 legacy: compatibilityIndicate a need to ensure compatibility with X11keymap compilerIndicates a need for improvements or additions to keymap compilation

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions