Как получить A с точками в Dvorak Ubuntu 16.04?

8

Я хочу набрать A с точками ( Ä/ ä) в качестве одноуровневого связывания клавиш на клавиатуре Ubuntu 16.04 Macbook Air 2013-mid, выводsetxkbmap -query

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

По умолчанию AltGrв клавиатуре нет, только два Alts. Эта команда дает вам право alt compose key ( AltGr), но поддерживает ваши собственные пользовательские конфигурации клавиатуры и т. Д. С Capslock как CTRL caps:ctrl_modifier, см. Здесь

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

Было бы здорово иметь xmodmapнезависимое решение, если оно будет изменено, потому что оно будет амортизироваться.

Двухуровневый подход к связыванию клавиш

Мы можем использовать только двухуровневый подход к связыванию ключей с Dvorak International с помощью deadkeys.

  • Ответ SeverusTux - двухуровневая команда как AltGr- Shift- Q+ A, которая работает только в us-drovak, international with deadkeys.
  • SeverusTux. Ctrl+ Shift+ u+ e4+ Enterработает и дает вам ä. Как вы можете отобразить это на одноуровневое связывание клавиш Alt- a?

Я делаю, где вы видите, что графический интерфейс вносит изменения в другом месте. Я очень хочу знать где

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 ]

Это показывает, что xserver не обновляется быстро. Вы должны изменить свою клавиатуру на что-то другое и обратно, для изменения.

Одноуровневый подход к связыванию клавиш

Я хочу одноуровневую команду как AltGr- Aдля äи AltGr- Shift- Aна Äанглийском языке (US-dvorak). Я делаю xev -e keyboard и жму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

Вы можете получить все возможные варианты, more /usr/share/X11/xkb/rules/xorg.lst | grep lv3но нас интересует только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

Мои раскладки клавиатуры проверены, но основной английский (США-дворак)

введите описание изображения здесь

Окончательное решение [Sneetsher]

Я установил A с точками на английском языке (дворак) по AltGr- a. Объединить изменения в /usr/share/X11/xkb/symbols/us; теперь немецкий-дворак, потому что он очень хорошо работает и для скандинавских языков ( отсюда )

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

Или используйте скрипт, который все еще глючит

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

ошибки

  1. Проблема TODO с перезагрузкой клавиатуры обратно на xserver https://unix.stackexchange.com/q/290449/16920 Изменение вручную не всегда работает.
  2. Осложнения: Xserver не загружает эти ключи быстро и даже не во всех случаях после перезапуска / выхода из системы.

Системы: Ubuntu 16.04
Ядро Linux: 4.4 - 4.6
Модель клавиатуры: pc105
Раскладка клавиатуры для двухуровневого подхода с привязкой
клавиш : US-dvorak international with deadkeys Раскладка клавиатуры для одноуровневого подхода с использованием клавиш: английский (Dvorak) = US-dvorak , но также и английский (Классический Дворжак)

Лео Леопольд Герц 준영
источник
1
Нажмите, ctrl+shift+uзатем введите e4и нажмите ввод. Если это работает, вы можете попробовать получить простой ключ для этого.
Северус Тукс
Я написал ответ на то, что я сказал ранее, пожалуйста, оставляйте комментарии, если у вас есть какие-либо сомнения
Северус Такс

Ответы:

8
  • Для ввода ä, Unicode U00E4

  • Для ввода Ä, Unicode - это U00C4

Если вы хотите, чтобы Unicodes других персонажей, вы можете получить их от gucharmap

Чтобы ввести его вручную, нажмите ctrl+ shift+, uа затем 00e4 и нажмите Enter, это должно ввести ä

Но есть лучший способ сделать это с помощью Compose Keys .

Если вы хотите установить свой Right alt ключ компоновки с помощью командной строки: просто выполните это:

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

Если вы хотите установить его в графическом интерфейсе:

Включить ключ создания сообщения , перейдя в Настройки системы -> Клавиатура -> Typing -> Правый Alt . (вы можете выбрать другой ключ, если хотите)

введите описание изображения здесь

Это все !!

Теперь перейдите в ваш любимый текстовый редактор и сделайте это:

Нажмите и отпустите, Right Altа "затем нажмите a. Теперь вы должны увидеть ä .

То же самое можно сделать для Ä , нажмите и отпустите, Right Altа "затемA

ПРИМЕЧАНИЕ: вам может понадобиться нажать Shift+, 'чтобы получить"

ПОДСКАЗКА:

Если вы хотите увидеть все похожие ярлыки, просмотрите этот файл: /usr/share/X11/locale/en_US.UTF-8/Compose

Северус Тукс
источник
@Masi Этот файл - просто список всех комбинаций клавиш Compose. Просто дополнительная информация.
UniversallyUniqueID
@ Если вам не нужно редактировать этот файл или что-то заменять sed, это дополнительная информация, как сказал @BharadwajRaju, вы можете просто просмотреть ее, если вы хотите использовать клавишу быстрого доступа для какого-то другого специального символа. Это огромный список всех таких ярлыков
Северус Тукс
1
@ Маси, так что вы просто хотите установить ключ композиции с помощью командной строки, а не с помощью графического интерфейса ??
Северус Тукс
@Masi Ответ обновлен :-) для этого вам не нужен скрипт. простая команда сделает свое дело. надеюсь, это то, что вы хотели
Северус Тукс
Что вы использовали, чтобы сделать этот удивительный GIF? Приятное прикосновение.
Бхиккху Субхути
7

Английский (Дворак, международный с мертвыми ключами) - dvorak-intl отлично работает!

Я могу печатать, Äиспользуя ShiftAltGrqнастройки по умолчанию. Смотрите файл, /usr/share/X11/xkb/symbols/usгде qключ объявлен как

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

и level3(ralt_switch)внизу использовать Right Alt/ AltGrкак сдвиг 3-го уровня, так что

  • 1-й столбец qq
  • 2-я колонка QShiftq
  • 3-я колонка äAltGrq
  • 4-й столбец ÄShiftAltGrq

Визуализация

Уровни макета X11 XKB

  • dvorak-intl определяет только 4 уровня, я рисую все 8 уровней, поскольку XKB поддерживает, так что вы можете получить общий обзор.
  • Shiftявляется стандартным сдвигом level2, AltGrявляется сдвигом level3 по умолчанию для большинства макетов, которым требуются уровни 3 и 4. Только несколько макетов определяют уровни 5, 6, 7, 8, и поэтому клавиша Shift уровня 5 я использовал RCtrlтолько для объяснения.
  • Все эти 4 строки, которые определяют <AB02>ключ, эквивалентны.

Установка ä& Äна 3-м и 4-м уровне aключа на английском (Дворак) - dvorakмакет

Плюс öи Öв oключе. (На снимке экрана он не отображается, так как был добавлен после снимка экрана)

То же самое dvorak-intl, что мы можем сделать ту же настройку для dvorak.

  1. Очистить предыдущие модификации

    sudo apt-get install --reinstall xkb-data
    gsettings set org.gnome.desktop.input-sources xkb-options "[]"
    
  2. Контрольно-пропускной пункт

    • Попробуйте английский (Дворак, международный с мертвыми ключами) - dvorak-intl

      AltGrqпечать. äЕсли это не сработало, то это будет та же проблема с этой настройкой. Есть что-то, что мешает Right Alt работать как сдвиг уровня 3.

      Английский (Дворак, международный с мертвыми ключами)

    • Проверьте текущую карту dvorak

      Английский (дворак)

    • Проверьте правильность Alt mapping, оно должно быть 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. Изменить aкарту

    $ 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. Установка Right Alt как сдвиг level3

    $ 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
    

    Есть много ключей, которые можно использовать как ISO_Level3_Shift. Проверьте доступные варианты

    $ 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
    

    Например, если вы хотите использовать Caps Lock в качестве сдвига уровня 3, введите include "level3(caps_switch)"вместо include "level3(ralt_switch)".

  5. Принудительная перезагрузка макетов

    sudo dpkg-reconfigure xkb-data
    

    Перейдите на другой макет, затем вернитесь.

  6. Контрольно-пропускной пункт

    • Проверьте текущую карту dvorak

      Английский (дворак)

    • Проверьте правильность Alt mapping. Должен быть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
      

Теперь это должно работать!


Однострочная команда

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
источник
2
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Митч
1
Я обнаружил, что ручная смена клавиатуры не всегда работает. Изменение не действует, пока вы не выйдете из системы. Я думаю, что решение здесь unix.stackexchange.com/questions/290449/…
Лео Леопольд Херц 준영
Я нашел ошибку, которую я не понимаю. Эта строка sudo sed -i "${pos[1]}i\ include 'level3(ralt_switch)'" /usr/share/X11/xkb/symbols/usделает клавиатуру непригодной к использованию при запуске. Вы не можете ввести любую клавишу на клавиатуре. Это просто добавляет level3 в конце среды Dvorak в строке 249. Правильно ли строка 249?
Лео Леопольд Герц 준영
@ Маси, да, но это должно быть в 248, а не в 249! и уверен, что вы ${pos[1]} определили раньше.
user.dz
Я открыл новую ветку о деле здесь unix.stackexchange.com/q/346073/16920, потому что мне действительно нужны такие функции более стабильно в ОС.
Лео Леопольд Герц 준영