web-dev-qa-db-fra.com

Comment obtenir un avec points dans Dvorak d'Ubuntu 16.04?

Je souhaite saisir A avec des points (Ä/ä) en tant que liaison de clé à un niveau dans le clavier du Macbook Air 2013-mid d'Ubuntu 16.04, sortie de setxkbmap -query

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

Par défaut, il n'y a pas AltGr dans le clavier, juste deux Alts. Cette commande fait de votre droite la touche de composition (AltGr) mais conserve vos propres configurations de clavier personnalisées, etc. avec 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 bien d'avoir xmodmap solution indépendante si cela devait changer car il serait amorti.

Approche à la serrure à deux niveaux

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

  • La réponse de SeverusTux est une commande à deux niveaux en tant que AltGr-Shift-Q + A, qui ne fonctionne que dans us-drovak, international with deadkeys.
  • SeverusTux. Ctrl+Shift+u +e4 + Enter fonctionne et vous donne ä. Comment pouvez-vous mapper cela à une liaison à 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 serveur x ne se met pas à jour rapidement. Vous devez changer votre clavier pour autre chose et inversement, pour le changement.

Approche de clavier à un niveau

Je veux un niveau de commande en tant que AltGr-A pour ä et AltGr-Shift-A pour Ä en anglais (US-dvorak). Je fais xev -e keyboard et appuie sur AltGr

[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 par more /usr/share/X11/xkb/rules/xorg.lst | grep lv3 mais nous ne sommes intéressés que par lv3: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 l'anglais principal (US-dvorak)

enter image description here

Solution finale [Sneetsher]

Je mets A avec des points en anglais (dvorak) par AltGr-a. Fusionner les modifications dans /usr/share/X11/xkb/symbols/us; maintenant allemand-Dvorak car cela fonctionne très bien aussi pour les langues scandinaves (à partir de 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 est cependant toujours bogué

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

Bogues

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

Systèmes: Ubuntu 16.04
Noyau Linux: 4.4 - 4.6
Modèle de clavier: pc105
Disposition du clavier pour l’approche à la clé à deux niveaux: US-dvorak international avec touche morte
Disposition du clavier pour l’approche à un niveau de touches: anglais (Dvorak) = US-dvorak , mais aussi Anglais (Dvorak classique)

  • Pour taper ä, unicode est U00E4

  • Pour taper Ä, unicode est U00C4

Si vous voulez les unicodes d'autres caractères, vous pouvez les obtenir de gucharmap

Pour le saisir manuellement, appuyez sur .ctrl + shift + u et suivi de 00e4 et frappé Enter, cela devrait taper ä

Mais il existe un meilleur moyen de le faire en utilisant Compose Keys .

Si vous souhaitez définir votre  Right alt  en tant que clé de composition en utilisant la ligne de commande: il suffit d'exécuter ceci:

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

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

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

enter image description here

C'est tout !!

Maintenant, allez dans votre éditeur de texte préféré et procédez comme suit:

Appuyez et relâchez Right Alt suivi de " suivi de a. maintenant vous devriez voir ä .

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

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

CONSEIL:

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

8
Severus Tux

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

Je peux taper Ä en utilisant ShiftAltGrq avec configuration par défaut. Voir le fichier /usr/share/X11/xkb/symbols/us où la clé q déclarée comme

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

et avec level3(ralt_switch) en bas à utiliser Right Alt/AltGr en 3ème niveau tel que

  • 1ère colonne q ← q
  • 2ème colonne Q ← Shiftq
  • 3ème colonne ä ← AltGrq
  • 4ème colonne Ä ← ShiftAltGrq

Visualisation

X11 XKB layout levels

  • dvorak-intl ne définit que 4 niveaux. Je trace les 8 niveaux pris en charge par XKB pour vous permettre d'obtenir une vue d'ensemble.
  • Shift est un décalage standard de niveau2, AltGr est le décalage de niveau3 par défaut pour la plupart des dispositions nécessitant les niveaux 3 et 4. Seuls quelques schémas définissent les niveaux 5, 6, 7, 8 et la touche Maj de niveau 5, que j’ai utilisée RCtrl juste pour l'explication.
  • Toutes ces 4 lignes qui définissent la clé <AB02> sont équivalentes.

Réglage de ä & Ä aux 3ème et 4ème niveaux de la touche a sur la touche Anglais (Dvorak) - dvorak

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

Comme pour dvorak-intl, nous pouvons effectuer 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 clés mortes) - dvorak-intl

      AltGrq imprime ä. Si cela ne fonctionne pas, le problème sera le même avec cette configuration. Il y a quelque chose qui empêche Right Alt de fonctionner en équipe de niveau 3.

      English (Dvorak, international with dead keys)

    • Vérifier la carte actuelle de dvorak

      English (Dvorak)

    • Vérifiez le mappage alt correct, il devrait s'agir de 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 a map

    $ 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 Right Alt 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
    

    De nombreuses clés peuvent être utilisées en tant que 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 mises en page

    Sudo dpkg-reconfigure xkb-data
    

    Changez pour une autre mise en page puis retour.

  6. Point de contrôle

    • Vérifier la carte actuelle de dvorak

      English (Dvorak)

    • Vérifiez le mappage alt correct. Ce devrait être ISO_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"
7
user.dz