Come ottenere A con punti in Dvorak di Ubuntu 16.04?


8

Voglio digitare A con punti ( Ä/ ä) come associazione a un livello nella tastiera di MacBook Air 2013-metà Ubuntu 16.04, output disetxkbmap -query

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

Per impostazione predefinita, non c'è nessun AltGrnella tastiera, solo due Alts. Questo comando AltGrimposta il tasto destro del mouse sul tasto compose ( ) ma mantiene le configurazioni della tastiera personalizzate ecc. Con Capslock come CTRL caps:ctrl_modifier, vedere qui

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

Sarebbe davvero fantastico avere xmodmapuna soluzione indipendente se questa dovesse essere cambiata perché sarà ammortizzata.

Approccio di keybinding a due livelli

Con Dvorak International possiamo usare l'approccio keybinding a due livelli solo con i deadkey.

  • La risposta di SeverusTux è un comando a due livelli come AltGr- Shift- Q+ A, che funziona solo in us-drovak, international with deadkeys.
  • SeverusTux. Ctrl+ Shift+ u+ e4+ Enterfunziona e ti dà ä. Come si può mappare questo a un keybinding a un livello Alt- a?

Faccio dove vedi che la GUI apporta le modifiche altrove. Voglio davvero sapere dove

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 ]

Questo dimostra che xserver non si aggiorna velocemente. Devi cambiare la tastiera in qualcos'altro e viceversa, per cambiare.

Approccio di rilegatura a un livello

Voglio un comando di livello come AltGr- Aper äe AltGr- Shift- Aper Äin inglese (US-dvorak). Lo faccio xev -e keyboard e premoAltGr

[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

Puoi ottenere tutti i possibili switch more /usr/share/X11/xkb/rules/xorg.lst | grep lv3ma ci interessa sololv3: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

Il layout della mia tastiera è stato testato ma l'inglese principale (US-dvorak)

inserisci qui la descrizione dell'immagine

Soluzione finale [Sneetsher]

Ho impostato A con punti in inglese (dvorak) di AltGr- a. Unisci le modifiche in /usr/share/X11/xkb/symbols/us; ora tedesco-Dvorak perché funziona molto bene anche per le lingue scandinave (da qui )

// 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)"
};

Oppure usa lo script che è comunque ancora difettoso

# 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. Problema TODO nel ricaricare la tastiera su xserver https://unix.stackexchange.com/q/290449/16920 La modifica manuale non funziona sempre.
  2. Complicazioni: Xserver non carica queste chiavi velocemente e nemmeno in tutti i casi dopo il riavvio / logout.

Sistemi: Ubuntu 16.04
Kernel Linux: 4.4 - 4.6
Modello tastiera: pc105
Layout tastiera per approccio keybinding a due livelli: US-dvorak international con deadkeys
Layout tastiera per approccio keybinding a un livello: inglese (Dvorak) = US-dvorak , ma anche inglese (Dvorak classico)


1
Premere ctrl+shift+uquindi digitare e4e premere Invio. Se funziona, puoi provare ulteriormente a ottenere una chiave semplice per quello.
Severus Tux,

Ho scritto una risposta per quello che ho detto prima, per favore lasciate commenti se avete dei dubbi
Severus Tux

Risposte:


8
  • Per digitare ä, unicode è U00E4

  • Per digitare Ä, unicode è U00C4

Se vuoi gli unicodi di altri personaggi, puoi ottenerli da gucharmap

Per inserirlo manualmente, premi ctrl+ shift+ ue seguito da 00e4 e premi Enter, questo dovrebbe digitare ä

Ma c'è un modo migliore per farlo usando i tasti Compose .

Se vuoi impostare il tuo Right alt come chiave di composizione usando la riga di comando: esegui semplicemente questo:

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

Se si desidera impostarlo facendo causa alla GUI:

Abilita il tasto di composizione andando su Impostazioni di sistema -> Tastiera -> Digitazione -> Alt destra . (puoi scegliere una chiave diversa se lo desideri)

inserisci qui la descrizione dell'immagine

È tutto !!

Ora vai al tuo editor di testo preferito e fai questo:

Premere e rilasciare Right Altseguito da "seguito da a. ora dovresti vedere ä .

Lo stesso può essere fatto per Ä , premere e rilasciare Right Altseguito da "seguito daA

NOTA: potrebbe essere necessario premere Shift+ 'per ottenere"

MANCIA:

Se si desidera visualizzare tutte le scorciatoie simili, visualizzare questo file: /usr/share/X11/locale/en_US.UTF-8/Compose


@Masi Quel file è solo un elenco di tutte le combinazioni di tasti Compose. Solo informazioni extra.
UniversallyUniqueID

@Masi non è necessario modificare quel file o sostituire nulla sed, ovvero informazioni aggiuntive come ha detto @BharadwajRaju, puoi semplicemente visualizzarlo se vuoi il tasto di scelta rapida per qualche altro simbolo speciale. Questa è una lista enorme di tutte queste scorciatoie
Severus Tux,

1
@Masi quindi vuoi solo impostare la chiave di composizione usando la riga di comando invece di usare la GUI ??
Severus Tux,

@Masi Risposta aggiornata :-) non è necessario alcun copione per farlo. solo un semplice comando farà il trucco. spero che questo sia quello che volevi
Severus Tux,

Cosa hai usato per creare questa fantastica gif? Bel tocco.
Bhikkhu Subhuti,

7

Inglese (Dvorak, internazionale con chiavi morte) - dvorak-intl funziona benissimo!

Posso digitare Äutilizzando ShiftAltGrqcon l'impostazione predefinita. Vedere il file in /usr/share/X11/xkb/symbols/uscui la qchiave è stata dichiarata come

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

e con level3(ralt_switch)in basso usare Right Alt/ AltGrcome spostamento di 3 ° livello tale che

  • 1a colonna qq
  • 2a colonna QShiftq
  • 3a colonna äAltGrq
  • 4a colonna ÄShiftAltGrq

visualizzazione

X11 Livelli di layout XKB

  • dvorak-intl definisce solo 4 livelli, disegno tutti e 8 i livelli come XKB supporta in modo da poter avere una visione generale.
  • Shiftè uno spostamento di livello 2 standard, AltGrè lo spostamento di livello 3 predefinito per la maggior parte dei layout che richiedono livelli 3 e 4. Solo pochi layout definiscono i livelli 5,6, 7,8 e quindi il tasto shift livello 5, ho usato RCtrlsolo per la spiegazione.
  • Tutte quelle 4 linee che definiscono la <AB02>chiave sono equivalenti.

Impostazione äe Äal 3 ° e 4 ° livello della achiave in inglese (Dvorak) - dvoraklayout

Inoltre ö& Öa ochiave. (Non appare nella schermata, poiché è stato aggiunto dopo la schermata)

Lo stesso dvorak-intl, possiamo fare la stessa configurazione per dvorak.

  1. Cancella le modifiche precedenti

    sudo apt-get install --reinstall xkb-data
    gsettings set org.gnome.desktop.input-sources xkb-options "[]"
    
  2. posto di controllo

    • Prova l'inglese (Dvorak, internazionale con chiavi morte) - dvorak-intl

      AltGrqstampa ä. Se non ha funzionato, sarà lo stesso problema con questa configurazione. C'è qualcosa che impedisce a Right Alt di funzionare come spostamento di livello 3.

      Inglese (Dvorak, internazionale con chiavi morte)

    • Verifica la mappa corrente di dvorak

      Inglese (Dvorak)

    • Verifica la mappatura Alt destra, dovrebbe essere 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. Modifica la amappa

    $ 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. Impostazione di Alt destra come spostamento di livello 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
    

    Esistono molte chiavi che possono essere utilizzate come ISO_Level3_Shift. Controlla le opzioni disponibili

    $ 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
    

    Ad esempio, se ti piace usare Caps Lock come spostamento di livello 3, inserisci include "level3(caps_switch)"invece di include "level3(ralt_switch)".

  5. Forza il ricaricamento dei layout

    sudo dpkg-reconfigure xkb-data
    

    Passa a un altro layout, quindi torna indietro.

  6. Check point

    • Verifica la mappa corrente di dvorak

      Inglese (Dvorak)

    • Verifica mappatura Alt destra. Dovrebbe essereISO_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
      

Ora dovrebbe funzionare!


Comando one-liner

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"

2
I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Mitch

1
Ho scoperto che il cambio manuale della tastiera non funziona sempre. La modifica non è valida fino alla disconnessione. Sto pensando a una soluzione qui unix.stackexchange.com/questions/290449/…
Léo Léopold Hertz 준영

Ho trovato un bug che non capisco. Questa linea sudo sed -i "${pos[1]}i\ include 'level3(ralt_switch)'" /usr/share/X11/xkb/symbols/usrende la tastiera inutilizzabile all'avvio. Non è possibile digitare alcun tasto nella tastiera. Aggiunge semplicemente il livello 3 alla fine dell'ambiente Dvorak alla linea 249. La linea 249 è nella posizione corretta?
Léo Léopold Hertz 준영

@Masi, sì, ma dovrebbe essere in 248 non in 249! e sicuro di aver ${pos[1]} definito prima.
user.dz,

Ho aperto una nuova discussione sul caso qui unix.stackexchange.com/q/346073/16920 perché ho davvero bisogno di tali funzionalità in modo più stabile nel sistema operativo.
Léo Léopold Hertz 준영
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.