Como obter A com pontos no Dvorak do Ubuntu 16.04?

8

Quero digitar A com pontos ( Ä/ ä) como atalho de teclado de um nível no teclado do Macbook Air 2013-meados de Ubuntu 16.04, saída desetxkbmap -query

rules:      evdev
model:      pc105
layout:     us,us
variant:    dvorak,
options:    ctrl:nocaps

Por padrão, não há AltGrno teclado, apenas dois Alts. Este comando torna seu alt direito a tecla de composição ( AltGr), mas mantém suas próprias configurações de teclado personalizadas, tendo o Capslock como CTRL por caps:ctrl_modifier, veja aqui

gsettings set org.gnome.desktop.input-sources xkb-options \
    "$(gsettings get org.gnome.desktop.input-sources xkb-options \ 
    | sed "s/]/, 'compose:ralt']/")"

Seria realmente ótimo ter xmodmapuma solução independente se isso for alterado, porque será depreciado.

Abordagem de combinação de teclas em dois níveis

Só podemos fazer uma abordagem de ligação de chave de dois níveis com o Dvorak International com chaves mortas.

  • A resposta do SeverusTux é um comando de dois níveis como AltGr- Shift- Q+ A, que funciona apenas em us-drovak, international with deadkeys.
  • SeverusTux. Ctrl+ Shift+ u+ e4+ Enterfunciona e dá a você ä. Como você pode mapear isso para uma combinação de teclas de um nível Alt- a?

Eu faço onde você vê que a GUI faz a alteração em outro lugar. Eu realmente quero saber onde

masi@masi:~$ cat /usr/share/X11/locale/en_US.UTF-8/Compose > /home/masi/Desktop/test1
% I make here a change in the GUI as proposed by Severus: compose key = right Alt
masi@masi:~$ cat /usr/share/X11/locale/en_US.UTF-8/Compose > /home/masi/Desktop/test2
masi@masi:~$ diff /home/masi/Desktop/test1 /home/masi/Desktop/test2
[ no output ]

Isso mostra que o xserver não atualiza rapidamente. Você precisa mudar o teclado para outra coisa e voltar para a alteração.

Abordagem de vinculação de teclas em um nível

Eu quero um comando de nível como AltGr- Apor äe AltGr- Shift- Apara Äem Inglês (US-Dvorak). Eu faço xev -e keyboard e pressionoAltGr

[ignore the beginning; press AltGr]
KeyPress event, serial 28, synthetic NO, window 0x4400001, 
root 0xd6, subw 0x0, time 13661220, (186,522), root:(186,574), 
state 0x0, keycode 108 (keysym 0xffea, Alt_R), same_screen YES, 
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False 

KeyRelease event, serial 28, synthetic NO, window 0x4400001, 
root 0xd6, subw 0x0, time 13661284, (186,522), root:(186,574), 
state 0x8, keycode 108 (keysym 0xffea, Alt_R), same_screen YES, 
XLookupString gives 0 bytes: 
XFilterEvent returns: False

Você pode obter todas as opções possíveis, more /usr/share/X11/xkb/rules/xorg.lst | grep lv3mas estamos interessados ​​apenas emlv3:ralt_switch

  lv3:switch           Right Ctrl
  lv3:menu_switch      Menu
  lv3:win_switch       Any Win key
  lv3:lwin_switch      Left Win
  lv3:rwin_switch      Right Win
  lv3:alt_switch       Any Alt key
  lv3:lalt_switch      Left Alt
  lv3:ralt_switch      Right Alt
  lv3:ralt_switch_multikey Right Alt, Shift+Right Alt key is Compose
  lv3:ralt_alt         Right Alt key never chooses 3rd level
  lv3:enter_switch     Enter on keypad
  lv3:caps_switch      Caps Lock
  lv3:bksl_switch      Backslash
  lv3:lsgt_switch      <Less/Greater>
  lv3:caps_switch_latch Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
  lv3:bksl_switch_latch Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
  lv3:lsgt_switch_latch <Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser

Meus layouts de teclado testados, mas o inglês principal (dvorak dos EUA)

insira a descrição da imagem aqui

Solução final [Sneetsher]

Defino A com pontos em inglês (dvorak) por AltGr- a. Mesclar as alterações /usr/share/X11/xkb/symbols/us; agora alemão-dvorak porque funciona muito bem também para os idiomas escandinavos ( daqui )

// based on a keyboard map from an 'xkb/symbols/dk' file
// Added A with dots and O with dots for AltGr-A and AltGr-O, respectively. Sneether and Masi, 17-June-2016.

partial alphanumeric_keys
xkb_symbols "dvorak" {

    name[Group1]= "English (Dvorak)";

    key <TLDE> { [       grave, asciitilde, dead_grave, dead_tilde      ] };

    key <AE01> { [          1,  exclam          ]       };
    key <AE02> { [          2,  at              ]       };
    key <AE03> { [          3,  numbersign      ]       };
    key <AE04> { [          4,  dollar          ]       };
    key <AE05> { [          5,  percent         ]       };
    key <AE06> { [          6,  asciicircum, dead_circumflex, dead_circumflex ] };
    key <AE07> { [          7,  ampersand       ]       };
    key <AE08> { [          8,  asterisk        ]       };
    key <AE09> { [          9,  parenleft,  dead_grave] };
    key <AE10> { [          0,  parenright      ]       };
    key <AE11> { [ bracketleft, braceleft       ]       };
    key <AE12> { [ bracketright, braceright,  dead_tilde] };

    key <AD01> { [  apostrophe, quotedbl, dead_acute, dead_diaeresis    ] };
    key <AD02> { [      comma,  less,   dead_cedilla, dead_caron        ] };
    key <AD03> { [      period, greater, dead_abovedot, periodcentered  ] };
    key <AD04> { [          p,  P               ]       };
    key <AD05> { [          y,  Y               ]       };
    key <AD06> { [          f,  F               ]       };
    key <AD07> { [          g,  G               ]       };
    key <AD08> { [          c,  C               ]       };
    key <AD09> { [          r,  R               ]       };
    key <AD10> { [          l,  L               ]       };
    key <AD11> { [      slash,  question        ]       };
    key <AD12> { [      equal,  plus            ]       };

    key <AC01> {[ a,          A,    adiaeresis,       Adiaeresis ]      };
    key <AC02> {[ o,          O,    odiaeresis,       Odiaeresis ]      };
    key <AC03> { [ e, E, ediaeresis, Ediaeresis ] };
    key <AC04> { [ u, U, udiaeresis, Udiaeresis ] };
    key <AC05> { [          i,  I               ]       };
    key <AC06> { [          d,  D               ]       };
    key <AC07> { [          h,  H               ]       };
    key <AC08> { [          t,  T               ]       };
    key <AC09> { [          n,  N               ]       };
    key <AC10> { [ s, S, ssharp ] };
    key <AC11> { [      minus,  underscore      ]       };

    key <AB01> { [   semicolon, colon, dead_ogonek, dead_doubleacute ] };
    key <AB02> { [          q,  Q               ]       };
    key <AB03> { [          j,  J               ]       };
    key <AB04> { [          k,  K               ]       };
    key <AB05> { [          x,  X               ]       };
    key <AB06> { [          b,  B               ]       };
    key <AB07> { [          m,  M               ]       };
    key <AB08> { [          w,  W               ]       };
    key <AB09> { [          v,  V               ]       };
    key <AB10> { [          z,  Z               ]       };

    key <BKSL> { [  backslash,  bar             ]       };

    include "level3(ralt_switch)"
};

Ou use o script que ainda é de buggy

# restore your current keyboard settings 
sudo apt-get install --reinstall xkb-data
gsettings set org.gnome.desktop.input-sources xkb-options "['compose:ralt', 'caps:ctrl_modifier']"

sudo sed -i.bak 's/[[ \t]*a,[ \t]*A[ \t]*]/[ a,          A,    adiaeresis,       Adiaeresis ]/g;' /usr/share/X11/xkb/symbols/us; 
sudo sed -i.bak 's/[[ \t]*o,[ \t]*O[ \t]*]/[ o,          O,    odiaeresis,       Odiaeresis ]/g;' /usr/share/X11/xkb/symbols/us; 
# German-Dvorak feels better
#sudo sed -i.bak 's/[[ \t]*e,[ \t]*E[ \t]*]/[ e,          E,    ediaeresis,       Ediaeresis ]/g;' /usr/share/X11/xkb/symbols/us; 
#sudo sed -i.bak 's/[[ \t]*u,[ \t]*U[ \t]*]/[ u,          U,    udiaeresis,       Udiaeresis ]/g;' /usr/share/X11/xkb/symbols/us; 
#sudo sed -i.bak 's/[[ \t]*s,[ \t]*S[ \t]*]/[ s,          S,    ssharp ]/g;' /usr/share/X11/xkb/symbols/us; 

# add     include "level3(ralt_switch)" to the end of the environment
# https://unix.stackexchange.com/a/290407/16920
# https://unix.stackexchange.com/q/290405/16920
pos=( $( sed -n -f - /usr/share/X11/xkb/symbols/us <<END_SED
    /xkb_symbols "dvorak" {/,/^};/{
            /xkb_symbols "dvorak" {/=
            /^};/=
    }
END_SED
) )
sudo sed -i.bak "${pos[1]}i\    include \"level3(ralt_switch)\"" /usr/share/X11/xkb/symbols/us

sudo dpkg-reconfigure xkb-data
# Change your keyboard. Change Back. Should work. But some bug. I cannot get the script works stably. 

Insetos

  1. Problema TODO ao recarregar o teclado novamente no xserver https://unix.stackexchange.com/q/290449/16920 A alteração manual nem sempre funciona.
  2. Complicações: O Xserver não carrega essas chaves rapidamente e nem em todos os casos após a reinicialização / logout.

Sistemas: Ubuntu 16.04
Kernel Linux: 4.4 - 4.6
Modelo de teclado: pc105
Layout do teclado para abordagem de combinação de teclas em dois níveis: US-dvorak international with deadkeys
Layout do teclado para abordagem em nível de combinação de teclas: Inglês (Dvorak) = US-dvorak , mas também inglês (Dvorak clássico)

Léo Léopold Hertz 준영
fonte
1
Pressione ctrl+shift+ue digite e4e pressione Enter. Se isso funcionar, você pode tentar obter uma chave simples para isso.
Severo Tux
Eu escrevi uma resposta para o que eu disse anteriormente, por favor deixar um comentário se você tiver quaisquer dúvidas
Severo Tux

Respostas:

8
  • Para digitar ä, unicode é U00E4

  • Para digitar Ä, o unicode é U00C4

Se você quiser os unicodes de outros personagens, poderá obtê-los em gucharmap

Para inseri-lo manualmente, pressione ctrl+ shift+ ue seguido de 00e4 e pressione Enter, isso deve digitar ä

Mas há uma maneira melhor de fazer isso usando Teclas de composição .

Se você deseja definir sua Right alt chave de composição usando a linha de comando: basta executar o seguinte:

gsettings set org.gnome.desktop.input-sources xkb-options "['compose:ralt']"

Se você deseja configurá-lo processando a GUI:

Ative a tecla de composição acessando Configurações do sistema -> Teclado -> Digitando -> Alt direito . (você pode escolher uma chave diferente, se desejar)

insira a descrição da imagem aqui

Isso é tudo !!

Agora vá ao seu editor de texto favorito e faça o seguinte:

Pressione e libere Right Alt, "seguido de a. agora você deve ver ä .

O mesmo pode ser feito para Ä , Press and release, Right Altseguido por "seguido porA

NOTA: pode ser necessário pressionar Shift+ 'para obter"

GORJETA:

Se você deseja ver todos os atalhos semelhantes, visualize este arquivo: /usr/share/X11/locale/en_US.UTF-8/Compose

Severus Tux
fonte
@Masi Esse arquivo é apenas uma lista de todos os combos de teclas de Composição. Apenas informações extras.
UniversallyUniqueID
@ Mas como você não precisa editar esse arquivo ou substituir nada sed, isso é uma informação extra, como disse @BharadwajRaju, você pode simplesmente visualizá-lo se quiser a tecla de atalho para outro símbolo especial. Isso é uma enorme lista de todos esses atalhos
Severo Tux
1
@ Masi então você só quer definir a tecla de composição usando a linha de comando em vez de usar a GUI?
Severo Tux
@Masi Answer updated :-) você não precisa de nenhum script para fazer isso. apenas um comando simples fará o truque. espero que isso é o que você queria
Severo Tux
O que você usou para criar esse gif incrível? Bom toque.
Bhikkhu Subhuti
7

Inglês (Dvorak, internacional com chaves mortas) - dvorak-intl funciona bem!

Eu posso digitar Äusando ShiftAltGrqcom a configuração padrão. Veja o arquivo em /usr/share/X11/xkb/symbols/usque a qchave declarada como

key <AB02> { [ q, Q, adiaeresis, Adiaeresis ] };

e com level3(ralt_switch)na parte inferior para usar Right Alt/ AltGrcomo mudança de terceiro nível, de modo que

  • 1ª coluna qq
  • 2ª coluna QShiftq
  • 3ª coluna äAltGrq
  • 4ª coluna ÄShiftAltGrq

Visualização

Níveis de layout X11 XKB

  • dvorak-intl define apenas 4 níveis, eu desenho todos os 8 níveis que o XKB suporta para que você possa ter uma visão geral.
  • Shifté uma mudança de nível 2 padrão, AltGré a mudança de nível 3 padrão para a maioria dos layouts que precisam dos níveis 3 e 4. Apenas alguns layouts definem os níveis5,6,7,8 e, portanto, a tecla shift de nível5, usei RCtrlapenas para explicação.
  • Todas as 4 linhas que definem <AB02>chave são equivalentes.

Configuração äe Äno 3º e 4º nível de achave em inglês (Dvorak) - dvoraklayout

Mais öe Öna ochave. (Ele não aparece na captura de tela, como foi adicionado após a captura de tela)

O mesmo que dvorak-intl, podemos fazer a mesma configuração para dvorak.

  1. Limpar modificações anteriores

    sudo apt-get install --reinstall xkb-data
    gsettings set org.gnome.desktop.input-sources xkb-options "[]"
    
  2. Ponto de Verificação

    • Aprenda inglês (Dvorak, internacional com chaves mortas) - dvorak-intl

      AltGrqimprime ä. Se não funcionar, será o mesmo problema com esta configuração. Há algo que impede o Right Alt de funcionar como mudança de nível3.

      Inglês (Dvorak, internacional com chaves mortas)

    • Verifique o mapa atual de dvorak

      Inglês (Dvorak)

    • Verifique o mapeamento Alt direito, deve ser Alt_R

      $ xev -e keyboard
      [ignore start things; press AltGr]
      
      KeyPress event, serial 28, synthetic NO, window 0x3400001,
          root 0x281, subw 0x0, time 1855861, (769,284), root:(834,336),
          state 0x10, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
          XLookupString gives 0 bytes: 
          XmbLookupString gives 0 bytes: 
          XFilterEvent returns: False
      
      KeyRelease event, serial 28, synthetic NO, window 0x3400001,
          root 0x281, subw 0x0, time 1855965, (769,284), root:(834,336),
          state 0x18, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
          XLookupString gives 0 bytes: 
          XFilterEvent returns: False
      
  3. Modificar amapa

    $ sudo vim /usr/share/X11/xkb/symbols/us +224
    
    key <AD11> { [      slash,  question        ]       };
    key <AD12> { [      equal,  plus            ]       };
    
    key <AC01> { [          a,  A, adiaeresis, Adiaeresis ]       };
    key <AC02> { [          o,  O, odiaeresis, Odiaeresis ]       };
    key <AC03> { [          e,  E               ]       };
    
  4. Definir Alt direito como mudança de nível3

    $ sudo vim /usr/share/X11/xkb/symbols/us +248
    
        key <AB09> { [          v,  V               ]       };
        key <AB10> { [          z,  Z               ]       };
    
        key <BKSL> { [  backslash,  bar             ]       };
    
        include "level3(ralt_switch)"
    };
    
    // Dvorak international with dead keys
    

    Existem muitas chaves que podem ser usadas como ISO_Level3_Shift. Verifique as opções disponíveis

    $ more /usr/share/X11/xkb/rules/xorg.lst | grep lv3:
      lv3:switch           Right Ctrl
      lv3:menu_switch      Menu
      lv3:win_switch       Any Win key
      lv3:lwin_switch      Left Win
      lv3:rwin_switch      Right Win
      lv3:alt_switch       Any Alt key
      lv3:lalt_switch      Left Alt
      lv3:ralt_switch      Right Alt
      lv3:ralt_switch_multikey Right Alt, Shift+Right Alt key is Compose
      lv3:ralt_alt         Right Alt key never chooses 3rd level
      lv3:enter_switch     Enter on keypad
      lv3:caps_switch      Caps Lock
      lv3:bksl_switch      Backslash
      lv3:lsgt_switch      &lt;Less/Greater&gt;
      lv3:caps_switch_latch Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
      lv3:bksl_switch_latch Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
      lv3:lsgt_switch_latch &lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
    

    Por exemplo, se você quiser usar o Caps Lock como a mudança de nível3, insira em include "level3(caps_switch)"vez de include "level3(ralt_switch)".

  5. Forçar o recarregamento de layouts

    sudo dpkg-reconfigure xkb-data
    

    Mude para outro layout e depois volte.

  6. Ponto de verificação

    • Verifique o mapa atual de dvorak

      Inglês (Dvorak)

    • Verifique o mapeamento Alt direito. Deveria serISO_Level3_Shift

      $ xev -e keyboard
      
      KeyPress event, serial 35, synthetic NO, window 0x3600001,
          root 0x281, subw 0x0, time 4755266, (154,154), root:(219,206),
          state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
          XKeysymToKeycode returns keycode: 92
          XLookupString gives 0 bytes: 
          XmbLookupString gives 0 bytes: 
          XFilterEvent returns: False
      
      KeyRelease event, serial 35, synthetic NO, window 0x3600001,
          root 0x281, subw 0x0, time 4755435, (154,154), root:(219,206),
          state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
          XKeysymToKeycode returns keycode: 92
          XLookupString gives 0 bytes: 
          XFilterEvent returns: False
      

Agora, deve funcionar!


Comando de uma linha

cd /; \
echo -e "--- /usr/share/X11/xkb/symbols/us\t2016-01-22 09:38:25.000000000 +0100\n+++ /usr/share/X11/xkb/symbols/us\t2016-06-17 15:43:07.656076074 +0100\n@@ -221,8 +221,8 @@\n     key <AD11> { [\tslash,\tquestion\t]\t};\n     key <AD12> { [\tequal,\tplus\t\t]\t};\n \n-    key <AC01> { [\t    a,\tA \t\t]\t};\n-    key <AC02> { [\t    o,\tO\t\t]\t};\n+    key <AC01> { [\t    a,\tA, adiaeresis, Adiaeresis ]\t};\n+    key <AC02> { [\t    o,\tO, odiaeresis, Odiaeresis ]\t};\n     key <AC03> { [\t    e,\tE\t\t]\t};\n     key <AC04> { [\t    u,\tU\t\t]\t};\n     key <AC05> { [\t    i,\tI\t\t]\t};\n@@ -245,6 +245,8 @@\n     key <AB10> { [\t    z,\tZ\t\t]\t};\n \n     key <BKSL> { [  backslash,  bar             ]       };\n+\n+    include \"level3(ralt_switch)\"\n };\n \n // Dvorak international with dead keys\n" \
| sudo patch -p1; \
sudo dpkg-reconfigure xkb-data; \
cl=$(gsettings get org.gnome.desktop.input-sources current); \
gsettings set org.gnome.desktop.input-sources current 0; \
gsettings set org.gnome.desktop.input-sources current 1; \
gsettings set org.gnome.desktop.input-sources current "$cl"
user.dz
fonte
2
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Mitch
1
Eu descobri que a alteração manual do teclado nem sempre funciona. A alteração não é válida até você sair. Estou pensando em uma solução aqui unix.stackexchange.com/questions/290449/…
Léo Léopold Hertz
Encontrei um bug que não entendo. Essa linha sudo sed -i "${pos[1]}i\ include 'level3(ralt_switch)'" /usr/share/X11/xkb/symbols/ustorna o teclado inutilizável na inicialização. Você não pode digitar nenhuma tecla no teclado. Ele apenas adiciona o level3 no final do ambiente Dvorak na linha 249. A linha 249 está na posição correta?
Léo Léopold Hertz
@ Masi, sim, mas deve ser em 248 não 249! e com certeza você ${pos[1]} definiu antes.
user.dz
Abri um novo tópico sobre o caso aqui unix.stackexchange.com/q/346073/16920 porque eu realmente preciso desses recursos de maneira mais estável no sistema operacional.
Léo Léopold Hertz