AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1537309
Accepted
Tina Russell
Tina Russell
Asked: 2025-01-06 08:13:13 +0800 CST2025-01-06 08:13:13 +0800 CST 2025-01-06 08:13:13 +0800 CST

Meu layout de teclado personalizado XKB não funciona mais após a reinicialização

  • 772

Então, algumas semanas atrás, consegui fazer meu layout de teclado XKB personalizado funcionar com o Ubuntu. Segui as instruções aqui: https://who-t.blogspot.com/2020/09/user-specific-xkb-configuration-putting.html e baixei o script ao qual ele se vincula, aqui: https://gitlab.freedesktop.org/whot/xkblayout Depois de executar o script (esqueci os detalhes das opções que usei e o quanto foi gerado automaticamente, mas mostrarei os resultados em breve) e editar o ~/.config/xkb/symbols/usarquivo resultante (e possivelmente o ~/.config/xkb/rules/evdev.xmlarquivo resultante, não me lembro se tive que editar manualmente ou se foi tudo feito pelo script), de repente meu layout de teclado personalizado, "Inglês - Interna-Tina-l (teclas mortas AltGr)", estava aparecendo no aplicativo Configurações (ao selecionar um novo layout de teclado, usando Configurações -> Teclado -> seção "Fontes de entrada" -> botão "Adicionar fonte de entrada"; meu novo layout foi listado entre as variantes mostradas ao selecionar "Inglês (Estados Unidos)"). Selecionei o layout e, de repente, ele funcionou, e eu estava digitando alegremente com minhas teclas personalizadas. (Também configurei a opção "Tecla de caracteres alternativos", nas configurações do teclado, para "Super esquerda". Imaginei que isso faria mais sentido do que defini-la no meu layout.)

Então, dois dias atrás, meu sistema travou. Não sei por que e não acho que seja relevante para isso (só direi que estava tentando copiar e colar algo no Emacs, esperando um comportamento normal, e em vez disso meu computador inteiro travou, e como parecia estar um pouco quente, imaginei que minha única opção era Alt+PrtSc+REISUO e desligar a coisa para que pudesse esfriar um pouco), mas o ponto é que tive que desligar e ligar novamente mais tarde. Então, para meu horror, depois de fazer login no Ubuntu, descobri que meu layout de teclado personalizado não funcionava mais! De repente, ele estava usando o layout "Inglês (intl., com teclas mortas AltGr)", do qual meu layout herda (mas faz mudanças significativas, o suficiente para que tentar digitar neste layout, ou em qualquer outro que não seja meu, seja enlouquecedor).

O que era mais desconcertante, no entanto, era que, se eu entrasse nas configurações do teclado, ele ainda dizia que eu estava usando meu layout personalizado! Tentei adicionar explicitamente o layout "Inglês (intl., com teclas mortas AltGr)" como uma segunda fonte de entrada, para poder alternar entre os dois layouts (com Super+Espaço) e, esperançosamente, atualizar a ideia do meu sistema sobre qual layout estou digitando. Mas, se eu alternar para esse layout e depois voltar para o meu, ainda estarei digitando como se estivesse usando aquele outro layout!

O que também pode ser relevante é que se eu tentar usar setxkbmap -querypara ver qual mapa de teclas estou usando no momento de acordo com setxkbmap, ele diz isso, mesmo que eu esteja definitivamente usando meu layout personalizado de acordo com as configurações do teclado e o indicador da barra de tarefas:

rules:      evdev
model:      pc105
layout:     us
variant:    altgr-intl

("altgr-intl" refere-se ao layout "Inglês (intl., com teclas AltGr mortas)", como você deve ter adivinhado.)

(O que provavelmente também é relevante é que a opção "Tecla de caracteres alternativos" ainda está definida como "Super esquerda" nas configurações do teclado, mas a Super esquerda não funciona mais como uma "Tecla de caracteres alternativos"; em vez disso, Alt direito (AltGr) funciona para isso, que é o padrão para o layout "Inglês (intl., com teclas mortas AltGr)"/"altgr-intl".)

Além disso, se eu tentar usar setxkbmap -variant tina, que eu acho que é como eu deveria direcionar setxkbmappara escolher minha variante personalizada, ele simplesmente diz Error loading new keyboard descriptione sai. Hrmph.

De qualquer forma, aqui eu vou mostrar meus arquivos de layout personalizados, para que você possa decidir por si mesmo se há algo errado com eles, mas tenha em mente que tudo isso funcionou perfeitamente antes de eu reiniciar meu computador . Eu realmente não tenho ideia do que está errado.

(Tenha em mente que as linhas comentadas no meio são partes que costumavam estar no layout do meu teclado, mas por algum motivo não estão mais; estou incluindo-as apenas para completar, porque embora eu não consiga imaginar por que as linhas comentadas causariam problemas, não tenho ideia do que realmente está causando problemas.)

~/.config/xkb/symbols/us:

// $XKeyboardConfig$

partial alphanumeric_keys modifier_keys
xkb_symbols "tina" {
    name[Group1]= "English - Interna-Tina-l (AltGr dead keys)";

    include "us(altgr-intl)"
    
//    include "level3(ralt_alt)"
//    include "level3(win_switch)"
//    key <CAPS> {
//      type[Group1]="ONE_LEVEL",
//      symbols[Group1] = [ ISO_Level5_Shift ]
//      };
//    modifier_map Mod3   { ISO_Level5_Shift };
    
//    key.type[Group1]="EIGHT_LEVEL"

    key <TLDE> { [       grave,  asciitilde, dead_abovedot,  dead_tilde ] };
    key <CAPS> { [   parenleft, ISO_Next_Group, Greek_lambda, Greek_phi ] };
    key <BKSL> { [  parenright,         bar,     backslash,   brokenbar ] };
    key  <TAB> { [        Tab, ISO_Left_Tab, XF86BackForward,   notsign ] };

    key <AE01> { [           1,      exclam,   onesuperior,       U203C ] };
    key <AE04> { [           4,      dollar,          cent,    sterling ] };
    key <AE05> { [       5,     percent,      EuroSign,         yen ] };
    key <AE06> { [           6, asciicircum, onequarter,dead_circumflex ] };
    key <AE07> { [       7,   ampersand,       onehalf,   dead_horn ] };
    key <AE08> { [           8,    asterisk, threequarters, dead_ogonek ] };
    key <AE09> { [       9,   parenleft,   bracketleft,   braceleft ] };
    key <AE10> { [       0,  parenright,  bracketright,  braceright ] };
    key <AE11> { [   minus,  underscore,        emdash,      endash ] };

    key <AB03> { [       c,           C,      ccedilla,    Ccedilla ] };
    key <AB04> { [       v,           V,     copyright,  registered ] };
    key <AC04> { [       f,           F,         U017f,       U2122 ] };
    key <AC10> { [ leftsinglequotemark,  leftdoublequotemark, dead_grave, degree ] };
    key <AC11> { [rightsinglequotemark, rightdoublequotemark, dead_acute, dead_diaeresis ] };
    
    key <AB08> { [      comma,     less,        dead_ogonek,     dead_caron ] };
    key <AB09> { [     period,  greater,           ellipsis,  dead_abovedot ] };
    key <AD11> { [  semicolon,    colon, enfilledcircbullet, guillemotright ] };
    key <AD12> { [ apostrophe, quotedbl,   enopencircbullet,  guillemotleft ] };
    
    key <I151> { [ Menu ] };
};

~/.config/rules/evdev:

// generated by xkblayout templates

// Note: no rules file entries are required for for a custom layout

// Include the system 'evdev' file
! include %S/evdev

~/.config/rules/evdev.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xkbConfigRegistry SYSTEM "xkb.dtd">
<!-- generated by xkblayout -->
<xkbConfigRegistry version="1.1">

  <layoutList>
    <layout>
      <configItem>
        <name>us</name>
        <!-- Keyboard indicator for English layouts -->
        <shortDescription>en</shortDescription>
        <description>English (US)</description>
        <countryList>
          <iso3166Id>US</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>

      <variantList>
        <variant>
          <configItem>
            <name>tina</name>
            <shortDescription>tina</shortDescription>
            <description>English - Interna-Tina-l (AltGr dead keys)</description>
          </configItem>
        </variant>
      </variantList>

    </layout>
  </layoutList>

</xkbConfigRegistry>

Além disso, o script xkblayout gerou alguns diretórios vazios: ~/.config/xkb/compat, ~/.config/xkb/keycodes/e ~/.config/xkb/types.

Estou usando o Ubuntu 24.04 em um Thinkpad P53 Workstation. Não acho que nenhuma atualização de pacote tenha causado isso; na verdade, nem o Software Updater nem o gerenciador de pacotes Synaptic (depois de escolher "Reload" e "Mark All Upgrades") mostraram nenhum pacote atualizável para mim em semanas, o que parece estranho para mim, mas essa é uma outra discussão. (Talvez o 24.04 tenha se tornado estável o suficiente para não precisar de atualizações constantes?)

keyboard-layout
  • 1 1 respostas
  • 41 Views

1 respostas

  • Voted
  1. Best Answer
    Tina Russell
    2025-01-07T00:56:25+08:002025-01-07T00:56:25+08:00

    Certo, então acho que encontrei uma solução paliativa para esse problema. (Eu apreciaria se alguém com mais conhecimento de XKB do que eu pudesse me dar uma solução mais elegante, mas aqui está o que estou fazendo por enquanto.)

    Primeiro, vou contar como cheguei à solução. Dei uma olhada nos detalhes da implementação em https://altgr-weur.eu/ (este layout de teclado já está incluído por padrão no Ubuntu 24.04, mas eu queria ver o conselho sobre como instalá-lo no seu .configdiretório). Percebi que havia outro arquivo para o qual não havia nada análogo no meu layout personalizado: ~/.config/xkb/map. Então, criei um semelhante ao deles e salvei como ~.config/xkb/mapna minha máquina:

    xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"  };
        xkb_compat    { include "complete"  };
        xkb_symbols   { include "pc+us(tina)+inet(evdev)"   };
        xkb_geometry  { include "pc(pc105)" };
    };
    

    (Reescrevi a xkb_symbols includedeclaração com base na saída de setxkbmap -v -variant tina; o resto é o mesmo que para altgr-weur.)

    Então, eu poderia executar este comando, que é como o site altgr-weur recomenda que você instale o layout de teclado:

    xkbcomp -w 0 -I$HOME/.config/xkb $HOME/.config/xkb/map $DISPLAY
    

    Os resultados foram:

    Error:            No Symbols named "altgr-intl" in the include file "us"
                      Exiting
                      Abandoning symbols file "tina"
                      Abandoning symbols file "(null)"
    Error:            success in unknown
                      Couldn't write keyboard description to :1
    

    Neste ponto, eu concluí (corrija-me se estiver errado) que o problema era que eu tinha um ~/.config/xkb/symbols/usarquivo que estava efetivamente substituindo o de /etc/X11/xkb/symbols/us, e então xkbcompnão estava vendo o último arquivo que tem definições que estão incluídas no arquivo anterior. Então, eu copiei as definições relevantes do último arquivo para o anterior. Agora, meu ~/.config/xkb/symbols/usarquivo estava assim:

    // $XKeyboardConfig$
    
    partial alphanumeric_keys
    xkb_symbols "intl" {
    
        name[Group1]= "English (US, intl., with dead keys)";
    
        key <TLDE> { [dead_grave, dead_tilde,         grave,       asciitilde ] };
        key <AE01> { [     1,     exclam,    exclamdown,      onesuperior ] };
        key <AE02> { [     2,         at,   twosuperior, dead_doubleacute ] };
        key <AE03> { [     3, numbersign, threesuperior,      dead_macron ] };
        key <AE04> { [     4,     dollar,      currency,         sterling ] };
        key <AE05> { [     5,    percent,      EuroSign,     dead_cedilla ] };
        key <AE06> { [    6, dead_circumflex,    onequarter,      asciicircum ] };
        key <AE07> { [     7,  ampersand,       onehalf,    dead_horn ] };
        key <AE08> { [     8,   asterisk, threequarters,      dead_ogonek ] };
        key <AE09> { [     9,  parenleft, leftsinglequotemark, dead_breve ] };
        key <AE10> { [     0, parenright, rightsinglequotemark, dead_abovering ] };
        key <AE11> { [     minus, underscore,           yen,    dead_belowdot ] };
        key <AE12> { [     equal,       plus,      multiply,         division ] };
    
        key <AD01> { [     q,          Q,    adiaeresis,       Adiaeresis ] };
        key <AD02> { [     w,          W,         aring,            Aring ] };
        key <AD03> { [     e,          E,        eacute,           Eacute ] };
        key <AD04> { [     r,          R,    registered,        trademark ] };
        key <AD05> { [     t,          T,         thorn,            THORN ] };
        key <AD06> { [     y,          Y,    udiaeresis,       Udiaeresis ] };
        key <AD07> { [     u,          U,        uacute,           Uacute ] };
        key <AD08> { [     i,          I,        iacute,           Iacute ] };
        key <AD09> { [     o,          O,        oacute,           Oacute ] };
        key <AD10> { [     p,          P,    odiaeresis,       Odiaeresis ] };
        key <AD11> { [ bracketleft,  braceleft,  guillemotleft, leftdoublequotemark ] };
        key <AD12> { [bracketright, braceright, guillemotright, rightdoublequotemark ] };
    
        key <AC01> { [     a,          A,        aacute,           Aacute ] };
        key <AC02> { [     s,          S,        ssharp,          section ] };
        key <AC03> { [     d,          D,           eth,              ETH ] };
        key <AC04> { [     f,          F,    ediaeresis,       Ediaeresis ] };
        key <AC05> { [     g,          G,             g,                G ] };
        key <AC06> { [     h,          H,             h,                H ] };
        key <AC07> { [     j,          J,    idiaeresis,       Idiaeresis ] };
        key <AC08> { [     k,          K,            oe,               OE ] };
        key <AC09> { [     l,          L,        oslash,           Oslash ] };
        key <AC10> { [ semicolon,      colon,     paragraph,           degree ] };
        key <AC11> { [dead_acute, dead_diaeresis, apostrophe,        quotedbl ] };
    
        key <AB01> { [     z,          Z,            ae,               AE ] };
        key <AB02> { [     x,          X, periodcentered,     dead_stroke ] };
        key <AB03> { [     c,          C,     copyright,             cent ] };
        key <AB04> { [     v,          V,             v,                V ] };
        key <AB05> { [     b,          B,             b,                B ] };
        key <AB06> { [     n,          N,        ntilde,           Ntilde ] };
        key <AB07> { [     m,          M,            mu,        plusminus ] };
        key <AB08> { [     comma,       less,      ccedilla,         Ccedilla ] };
        key <AB09> { [    period,    greater, dead_abovedot,       dead_caron ] };
        key <AB10> { [     slash,   question,  questiondown,        dead_hook ] };
        key <BKSL> { [ backslash,        bar,       notsign,        brokenbar ] };
    
        key <LSGT> { [ backslash,   bar,            backslash,      bar ] };
    
        include "level3(ralt_switch)"
    };
    
    partial alphanumeric_keys
    xkb_symbols "altgr-intl" {
    
       include "us(intl)"
       name[Group1]= "English (intl., with AltGr dead keys)";
    
    // five dead keys moved into level3:
    
       key <TLDE> { [    grave, asciitilde,  dead_grave,   dead_tilde      ] };
       key <AC11> { [apostrophe,quotedbl,    dead_acute,   dead_diaeresis  ] };
    
    // diversions from the MS Intl keyboard:
    
       key <AE01> { [        1, exclam,      onesuperior,  exclamdown      ] };
       key <AD04> { [        r, R,           ediaeresis,   Ediaeresis      ] };
       key <AC04> { [        f, F,           f,            F               ] };
       key <AB02> { [        x, X,           oe,           OE              ] };
       key <AB04> { [        v, V,           registered,   trademark       ] };
       key <AB05> { [        b, B,         periodcentered, dead_stroke     ] };
    
    // onequarter etc (not in iso8859-15) moved to get three unshifted deadkeys:
    
       key <AE06> { [        6, asciicircum, dead_circumflex, onequarter    ] };
       key <AE07> { [        7, ampersand,   dead_horn,       onehalf       ] };
       key <AE08> { [        8, asterisk,    dead_ogonek,     threequarters ] };
    
       include "level3(ralt_switch)"
    };
    
    partial alphanumeric_keys modifier_keys
    xkb_symbols "tina" {
        name[Group1]= "English - Interna-Tina-l (AltGr dead keys)";
    
        include "us(altgr-intl)"
        
    //    include "level3(ralt_alt)"
    //    include "level3(win_switch)"
    //    key <CAPS> {
    //      type[Group1]="ONE_LEVEL",
    //      symbols[Group1] = [ ISO_Level5_Shift ]
    //      };
    //    modifier_map Mod3   { ISO_Level5_Shift };
        
    //    key.type[Group1]="EIGHT_LEVEL"
    
        key <TLDE> { [       grave,  asciitilde, dead_abovedot,  dead_tilde ] };
        key <CAPS> { [   parenleft, ISO_Next_Group, Greek_lambda, Greek_phi ] };
        key <BKSL> { [  parenright,         bar,     backslash,   brokenbar ] };
        key  <TAB> { [        Tab, ISO_Left_Tab, XF86BackForward,   notsign ] };
    
        key <AE01> { [           1,      exclam,   onesuperior,       U203C ] };
        key <AE04> { [           4,      dollar,          cent,    sterling ] };
        key <AE05> { [       5,     percent,      EuroSign,         yen ] };
        key <AE06> { [           6, asciicircum, onequarter,dead_circumflex ] };
        key <AE07> { [       7,   ampersand,       onehalf,   dead_horn ] };
        key <AE08> { [           8,    asterisk, threequarters, dead_ogonek ] };
        key <AE09> { [       9,   parenleft,   bracketleft,   braceleft ] };
        key <AE10> { [       0,  parenright,  bracketright,  braceright ] };
        key <AE11> { [   minus,  underscore,        emdash,      endash ] };
    
        key <AB03> { [       c,           C,      ccedilla,    Ccedilla ] };
        key <AB04> { [       v,           V,     copyright,  registered ] };
        key <AC04> { [       f,           F,         U017f,       U2122 ] };
        key <AC10> { [ leftsinglequotemark,  leftdoublequotemark, dead_grave, degree ] };
        key <AC11> { [rightsinglequotemark, rightdoublequotemark, dead_acute, dead_diaeresis ] };
        
        key <AB08> { [      comma,     less,        dead_ogonek,     dead_caron ] };
        key <AB09> { [     period,  greater,           ellipsis,  dead_abovedot ] };
        key <AD11> { [  semicolon,    colon, enfilledcircbullet, guillemotright ] };
        key <AD12> { [ apostrophe, quotedbl,   enopencircbullet,  guillemotleft ] };
        
        key <I151> { [ Menu ] };
    
        include "level3(ralt_alt)"
        include "level3(win_switch)"
    };
    

    Então eu pude executar o xkbcomp -w 0 -I$HOME/.config/xkb $HOME/.config/xkb/map $DISPLAYcomando novamente, e de repente meu layout personalizado estava funcionando! Viva!

    (Uma última observação: essas duas últimas linhas, antes do ponto e vírgula de fechamento, eu adicionei porque a opção “Left Super” como “Alternate Characters Key” ainda não estava funcionando, antes de eu adicioná-las e executar o xkbcompcomando novamente. Você notará que elas correspondem a duas dessas linhas comentadas que estão mais acima... ainda bem que mantive essas linhas para referência.)

    Marcarei isso como resolvido se ainda funcionar após uma reinicialização, mas estou postando isso agora enquanto ainda tenho todas as informações relevantes na minha janela de terminal e tal. Ainda assim, como eu disse, uma solução mais elegante/compatível com versões futuras seria apreciada, se você tiver uma!

    Editar: ok, então, depois de reiniciar, voltou ao comportamento original, onde a barra de tarefas dizia que eu estava usando meu layout personalizado “tina”, mas a digitação deixou claro que eu estava usando o layout “altgr-intl”. Então, acabei de adicionar xkbcomp -w 0 -I$HOME/.config/xkb $HOME/.config/xkb/map $DISPLAYao final do meu ~/.profile, reiniciei e posso confirmar que meu layout personalizado funciona, agora. Então, certo, minha solução já deselegante agora é ainda mais deselegante, mas pelo menos funciona. Eu adoraria saber a maneira “correta” de fazer tudo isso!

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve