Comment obtenir A avec des points dans Dvorak d'Ubuntu 16.04?

8

Je veux taper A avec des points ( Ä/ ä) comme liaison de touches à un niveau dans le clavier d'Ubuntu 16.04 du Macbook Air 2013-mid, sortie desetxkbmap -query

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

Par défaut, il n'y a pas AltGrde clavier, juste deux Alts. Cette commande fait de votre alt droite la touche de composition ( AltGr) mais conserve vos propres configurations de clavier personnalisées, etc. ayant Capslock comme CTRL par caps:ctrl_modifier, voir ici

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

Ce serait vraiment génial d'avoir xmodmapune solution indépendante si cela devait être changé parce qu'il allait être amorti.

Approche de liaison à deux niveaux

Nous ne pouvons faire une approche à deux niveaux avec Dvorak International avec des clés mortes.

  • La réponse de SeverusTux est une commande à deux niveaux comme AltGr- Shift- Q+ A, qui ne fonctionne que dans us-drovak, international with deadkeys.
  • SeverusTux. Ctrl+ Shift+ u+ e4+ Enterfonctionne et vous donne ä. Comment pouvez-vous associer cela à une liaison de touches à un niveau Alt- a?

Je fais où vous voyez que l'interface graphique fait le changement ailleurs. Je veux vraiment savoir où

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 ]

Cela montre que le xserver ne se met pas à jour rapidement. Vous devez changer votre clavier pour autre chose et inversement, pour le changement.

Approche de reliure à un niveau

Je veux une commande à un niveau comme AltGr- Apour äet AltGr- Shift- Apour Äen anglais (US-dvorak). Je fais xev -e keyboard et presseAltGr

[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

Vous pouvez obtenir tous les commutateurs possibles, more /usr/share/X11/xkb/rules/xorg.lst | grep lv3mais nous ne sommes intéressés que parlv3: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

Mes dispositions de clavier testées mais anglais principal (US-dvorak)

entrez la description de l'image ici

Solution finale [Sneetsher]

J'ai mis A avec des points en anglais (dvorak) par AltGr- a. Fusionnez les modifications dans /usr/share/X11/xkb/symbols/us; maintenant allemand-dvorak parce que ça marche très bien aussi pour les langues scandinaves (d' ici )

// 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 utilisez le script qui reste cependant buggé

# 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. 

Bugs

  1. Problème TODO avec le rechargement du clavier sur xserver https://unix.stackexchange.com/q/290449/16920 La modification manuelle ne fonctionne pas toujours.
  2. Complications: Xserver ne charge pas ces clés rapidement et même pas dans tous les cas après redémarrage / déconnexion.

Systèmes: Ubuntu 16.04
Noyau Linux: 4.4 - 4.6
Modèle de clavier: pc105
Disposition du clavier pour une approche à deux niveaux: US-dvorak international avec deadkeys
Disposition du clavier pour une approche à un niveau: Anglais (Dvorak) = US-dvorak , mais aussi en anglais (Dvorak classique)

Léo Léopold Hertz 준영
la source
1
Appuyez sur ctrl+shift+upuis tapez e4et appuyez sur entrée. Si cela fonctionne, vous pouvez essayer d'obtenir une clé simple pour cela.
Severus Tux
J'ai écrit une réponse pour ce que j'ai dit plus tôt, veuillez laisser des commentaires si vous avez des doutes
Severus Tux

Réponses:

8
  • Pour taper ä, l'unicode est U00E4

  • Pour taper Ä, l'unicode est U00C4

Si vous voulez les unicodes d'autres personnages, vous pouvez les obtenir auprès de gucharmap

Pour le saisir manuellement, appuyez sur ctrl+ shift+ upuis sur 00e4 et appuyez sur Enter, cela devrait taper ä

Mais il existe une meilleure façon de le faire en utilisant les touches de composition .

Si vous souhaitez définir votre Right alt clé de composition à l'aide de la ligne de commande: exécutez simplement ceci:

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

Si vous souhaitez le définir en poursuivant l'interface graphique:

Activez la touche de composition en allant dans Paramètres système -> Clavier -> Saisie -> Alt droite . (vous pouvez choisir une clé différente si vous le souhaitez)

entrez la description de l'image ici

C'est tout !!

Accédez maintenant à votre éditeur de texte préféré et procédez comme suit:

Appuyez et relâchez Right Altsuivi par "suivi a. vous devriez maintenant voir ä .

La même chose peut être faite pour Ä , Appuyez et relâchez Right Altsuivi de "suivi deA

REMARQUE: vous devrez peut-être appuyer sur Shift+ 'pour obtenir"

POINTE:

Si vous souhaitez voir tous les raccourcis similaires, consultez ce fichier: /usr/share/X11/locale/en_US.UTF-8/Compose

Severus Tux
la source
@Masi Ce fichier n'est qu'une liste de tous les combos de touches de composition. Juste des informations supplémentaires.
UniversallyUniqueID
@Masi vous n'avez pas à modifier ce fichier ou à remplacer quoi que ce soit par sed, c'est une information supplémentaire comme l'a dit @BharadwajRaju, vous pouvez simplement le voir si vous voulez la touche de raccourci pour un autre symbole spécial. C'est une énorme liste de tous ces raccourcis
Severus Tux
1
@Masi donc vous voulez juste définir la clé de composition en utilisant la ligne de commande au lieu d'utiliser l'interface graphique ??
Severus Tux
@Masi Réponse mise à jour :-) vous n'avez besoin d'aucun script pour le faire. une simple commande suffira. j'espère que c'est ce que vous vouliez
Severus Tux
Qu'avez-vous utilisé pour faire ce gif génial? Belle touche.
Bhikkhu Subhuti
7

Anglais (Dvorak, international avec touches mortes) - dvorak-intl fonctionne très bien!

Je peux taper Äusing ShiftAltGrqavec la configuration par défaut. Voir le fichier /usr/share/X11/xkb/symbols/usoù la qclé déclarée comme

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

et avec level3(ralt_switch)en bas à utiliser Right Alt/ AltGrcomme changement de 3ème niveau de telle sorte que

  • 1ère colonne qq
  • 2e colonne QShiftq
  • 3e colonne äAltGrq
  • 4ème colonne ÄShiftAltGrq

Visualisation

Niveaux de disposition X11 XKB

  • dvorak-intl ne définit que 4 niveaux, je dessine les 8 niveaux en tant que XKB prend en charge afin que vous puissiez obtenir un aperçu général.
  • Shiftest un décalage de niveau 2 standard, AltGrest le décalage de niveau 3 par défaut pour la plupart des mises en page qui nécessitent les niveaux 3 et 4. Seules quelques mises en page définissent les niveaux 5, 6, 7, 8 et donc la touche de décalage de niveau 5, j'ai utilisé RCtrljuste pour l'explication.
  • Toutes les 4 lignes qui définissent la <AB02>clé sont équivalentes.

Réglage äet Äau 3e et 4e niveau de aclé en anglais (Dvorak) - dvorakmise en page

Plus öet Öà la oclé. (Il n'apparaît pas dans la capture d'écran, car il a été ajouté après la capture d'écran)

Identique à dvorak-intl, nous pouvons faire la même configuration pour dvorak.

  1. Effacer les modifications précédentes

    sudo apt-get install --reinstall xkb-data
    gsettings set org.gnome.desktop.input-sources xkb-options "[]"
    
  2. Point de contrôle

    • Essayez l'anglais (Dvorak, international avec les touches mortes) - dvorak-intl

      AltGrqimprime ä. Si cela n'a pas fonctionné, ce sera le même problème avec cette configuration. Il y a quelque chose qui empêche Right Alt de fonctionner comme décalage de niveau 3.

      Anglais (Dvorak, international avec touches mortes)

    • Vérifiez la carte actuelle de dvorak

      Anglais (Dvorak)

    • Vérifiez le mappage Alt droite, il doit être 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. Modifier la acarte

    $ 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. Définir Alt droite comme décalage de niveau 3

    $ 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
    

    Il existe de nombreuses clés qui peuvent être utilisées comme ISO_Level3_Shift. Vérifier les options disponibles

    $ 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
    

    Par exemple, si vous souhaitez utiliser le verrouillage des majuscules comme décalage de niveau 3, entrez include "level3(caps_switch)"au lieu de include "level3(ralt_switch)".

  5. Forcer le rechargement des présentations

    sudo dpkg-reconfigure xkb-data
    

    Passez à une autre disposition, puis revenez.

  6. Point de contrôle

    • Vérifiez la carte actuelle de dvorak

      Anglais (Dvorak)

    • Vérifiez le mappage Alt droite. Ça devrait êtreISO_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
      

Maintenant, ça devrait marcher!


Commande à une ligne

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
la source
2
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
Mitch
1
J'ai découvert que le changement manuel du clavier ne fonctionne pas toujours. La modification n'est valide que lorsque vous vous déconnectez. Je pense à une solution ici unix.stackexchange.com/questions/290449/…
Léo Léopold Hertz
J'ai trouvé un bug que je ne comprends pas. Cette ligne sudo sed -i "${pos[1]}i\ include 'level3(ralt_switch)'" /usr/share/X11/xkb/symbols/usrend le clavier inutilisable au démarrage. Vous ne pouvez taper aucune touche du clavier. Il ajoute simplement le niveau 3 à la fin de l'environnement Dvorak à la ligne 249. La ligne 249 est-elle correctement positionnée?
Léo Léopold Hertz
@Masi, oui mais ça devrait être en 248 pas en 249! et bien sûr, vous avez déjà ${pos[1]} défini.
user.dz
J'ai ouvert un nouveau sujet sur le cas ici unix.stackexchange.com/q/346073/16920 car j'ai vraiment besoin de telles fonctionnalités de manière plus stable dans le système d'exploitation.
Léo Léopold Hertz