Jakie kroki należy wykonać, aby utworzyć nowy układ klawiatury na Ubuntu?

43

Klawiatura, którą próbuję utworzyć, ma wiele znaków Unicode i wygląda następująco: Klawiatura, którą próbuję utworzyć

Niepowodzenie w następującym samouczku:

Zastanawiałem się, czy ktoś byłby tak uprzejmy, aby zapewnić lepszy samouczek z instrukcjami krok po kroku?

Akiva
źródło
2
Mmh, wygląda mi to na duplikat . Szkoda, że ​​już naliczyłeś nagrodę za swoje pytanie: /.
Glutanimate,
@Glutanimate Och schludne; nie widziałem tego. Nadal bym jednak naliczył na lepszą odpowiedź.
Akiva
Możesz użyć tego linku. help.ubuntu.com/community/ComposeKey
Anandu M Das

Odpowiedzi:

69

W Ubuntu 14.04 układy klawiatury są zachowane

/usr/share/X11/xkb/symbols/


Każdy z plików w tym katalogu zawiera serię wpisów następującego typu:

    klawisz <AC01> {[a, A, aacute, Aacute]};

Ten wpis mapuje klawisz na klawiaturze na liczbę określonych znaków, stosując następujące konwencje:

  1. < C01> Pierwsza litera oznacza szukamy w bloku alfanumerycznego klucza (inne opcje obejmują a );AKP [for keypad]FK [for Function Key]

  2. <A C 01> Druga litera Cwskazuje rząd, licząc od dołu, w którym znajduje się klucz. (W standardowej klawiaturze amerykańskiej spacja jest w rzędzie, AAa klawisze numeryczne w rzędzie AE).

  3. <AC 01 > Cyfry 01wskazują pozycję klucza, licząc od lewej i ignorując każdy specjalnie nazwany klucz, taki jak TABlub ~(tylda): AC01znajduje się w trzecim rzędzie w górę, pierwszy klucz od lewej (ignorowanie Caps Lock, jeśli występuje); na standardowej klawiaturze amerykańskiej jest to klawisz oznaczony „a”.

  4. Nawiasy kwadratowe zawierają listę znaków przypisanych do każdego klawisza. Zawiera maksymalnie cztery wpisy oddzielone przecinkami:

    1. a - Niezmodyfikowany klucz.
    2. A - ShiftPostać.
    3. á - Alt Grpostać. ( ostry )
    4. Á - Znak Shift+ Alt Gr. ( Ostry )

Utworzenie niestandardowej mapy klawiatury jest tak proste, jak zastąpienie znaków, których nie chcesz w danym wierszu, tymi, które robisz!

Na przykład:

Jako anglosasista piszę ái Áznacznie rzadziej niż piszę æi Æ.

Aby dodać znaki anglosaskie do mojej listy, po prostu zamieniam aacutei Aacutena nazwy jednostek lub punkty kodu Unicode dla æi Æ(odpowiednio „aelig” lub U00E6 i „AElig” lub U00C6 ):

    key {[a, A, aelig, AElig]};

lub

    klucz {[a, A, U00E6, U00C6]};

Po zakończeniu modyfikacji układu klawiatury zapisuję plik pod nową nazwą „oe” w tym samym katalogu.

Dodanie nowego układu klawiatury do evdev.xmlpliku.

Aby użyć nowego układu klawiatury, musimy powiedzieć X11, że istnieje. W Ubuntu 14.04 X11śledzi zainstalowane klawiatury w /usr/share/X11/xkb/rules/evdev.xmlpliku. Następnie dodajmy do niego nowy układ.

  1. Otwórz X11/xkb/rules/evdev.xmlw edytorze
  2. Przejdź na koniec <layoutList>sekcji (wyszukaj </layoutList>). Dodaj następujący </layout>znak po ostatnim znaczniku, gdzie Xjest nazwa pliku układu klawiatury w /usr/share/X11/xkb/symbols(w moim przypadku oe); Yodpowiednia krótka nazwa; oraz Zodpowiednią długą nazwę w co najmniej jednym języku i trzyliterowy zgodnyaaa z prawem kod języka (ISO 639-2) (np. eng dla języka angielskiego):

    <layout>
     <configItem>
       <name> X </name>
       <shortDescription> Y </shortDescription>
       <description> Z </description>
       <languageList>
          <iso639Id> aaa </iso639Id>
       </languageList>
     </configItem>
     <variantList/>
    </layout>
    

Tutaj jest, wykonaj pełne wprowadzenie

Inne powiązane linki:
http://ubuntuforums.org/showthread.php?t=188761&p=1092145#post1092145 http://www.charvolant.org/~doug/xkb/html/index.html

αғsнιη
źródło
Trochę pracowałem nad tym postem; treść, którą dostarczyłeś, była bardzo wysokiej jakości, ale moim zdaniem nadal wymaga pracy. Samouczki, do których się odnosisz, są bardzo stare i nieaktualne oraz pełne „Jeśli używasz 8.04, wykonaj xy i z”. Chciałbym zobaczyć pełną odpowiedź z samouczka (chciałbym tylko, żeby móc zwiększyć nagrodę)
Akiva
@Akiva Nie pomogłeś tej odpowiedzi? Gdzie masz problem?
αғsнιη
3
Odpowiedź pomogła; Wyjaśnienie AC01 było naprawdę dobrze napisane, ale chciałem uzyskać pełną odpowiedź przy wszystkich krokach. Po połączeniu z innymi samouczkami; są stare i są ich trzy. Ze względu na innych użytkowników wolałbym tu podać pełną odpowiedź. Na przykład; w pliku tekstowym znajduje się więcej elementów poza kluczem <ac01> {[a, b, c, d]}, a także plik XML, który należy edytować. Jest również pytanie, jak to sprawdzić. Jak zostało powiedziane; Powinienem był przypisać za to 500 powtórzeń, ponieważ stworzenie dobrego samouczka jest dość dużym zadaniem.
Akiva
2
Zajmę się odpowiedzią na to w pełni rozwinięte, ponieważ i tak muszę zdefiniować układ klawiatury. kiedy do tego dojdę, odpowiem poprawnie.
Akiva
Czy to działa tylko dla Xorg, czy też dla ttys?
Narcolessico
18

Uwaga : Wayland używa xkb, ale wiele xTools przestało działać poprawnie (na przykład xdotool)

Uwaga : jest to niewyczerpujący samouczek. Jest to najbardziej przydatne dla osoby, która chce stworzyć nowy układ ośmiopoziomowy i rozumie składnię.

Uwaga: Zapewniono szybkie i brudne rozwiązanie. Zawiera arkusz kalkulacyjny, który automatycznie generuje potrzebny kod.


Zrozumienie katalogu XKB

cd /usr/share/X11/xkb/ && ls
  1. types- Jak zmieniane są produkowane klucze przez Aktywne modyfikatory . (Shift, Control, Alt ~)
    Ważne, jeśli chcesz dostosować klawisze modyfikujące.
  2. geometry- Używany do rysowania grafiki na klawiaturze.
    Ważne, jeśli projektujesz niestandardowy element klawiatury.
  3. rules- Pobieranie odpowiedniej konfiguracji dla bieżącej konfiguracji.
    Musisz to zdefiniować
  4. keycodes- Interpretator kodów klawiszy dla sprzętu klawiatury.
    Przykład: klawiatury Macintosh rozumieją spację jako 57. Piszemy to jednak jako<SPCE>
  5. symbols- Które wartości są przypisane do jakich kodów dostępu .
    Tutaj zdefiniujemy nasz niestandardowy układ.
  6. compat- Skrót od kompatybilności .
    Wewnętrzne zachowanie modyfikatorów (Shift, Control, Alt ...)

Przepływ pracy

keycodes > symbols > compat

Dotykam tylko symbols: poniżej znajduje się szybkie i brudne rozwiązanie.


Mapy symboli

/symbols/us Każdy plik w tym katalogu ma tę samą strukturę.

partial alphanumeric_keys
xkb_symbols "basic" {
    name[Group1]= "US/ASCII";
    key <TLDE> {        [ quoteleft,    asciitilde      ]       };
    key <AE01> {        [         1,    exclam          ]       };
    modifier_map Shift  { Shift_L, Shift_R };
};

partial - Nie pełna mapa klawiatury

alphanumeric_keysOdwzorowana część klawiatury. Można użyć wielu.
Uwaga: Jeśli nie *_keysokreślono, zakłada się pełną klawiaturę.

"basic" - Nazwa mapy symboli

name[Group1]= "US/ASCII";Nadaje unikalną nazwę tej grupie klawiatur.

modifier_mapDo edycji klawiszy modyfikujących . (Ctrl, Shift, Alt ~)

Shift { Shift_L, Shift_R };Zwykle nie jest to konieczne. Mapuje obie zmiany do modyfikatora zmiany, czyli poziomu 2.

key <TLDE> Klawisz tyldy - zwykle lewy górny klawisz tuż nad Tab

key <AE01> Ilustracja - składa się z trzech części,AE01

  1. A= alfanumeryczny blok klawiszy.
    KP= Klawiatura
    FK= klawisz funkcyjny

  2. E= Wiersz na klawiaturze.
    Space Key= Awiersz
    Shift Key= Bwiersz
    Caps Lock= Cwiersz
    Tab Key= Dwiersz

  3. 01= Pozycja klucza w rzędzie.
    AE01= 1
    AB02= X
    AC05=G

[+ ]- W językach C; Nawiasy kwadratowe oznaczają listę, według której pozycje są dzielone ,. Długość listy określa liczbę poziomów. Na przykład:

key<AE01> { [ Level 1 , Level 2 , Level 3 , Level 4 , Level 5 ] }

Zazwyczaj poziomy oznaczają następujące naciśnięcie klawisza z:

  1. Brak klawiszy modyfikujących
  2. Shift
  3. Alt Gr
  4. Shift + Alt Gr
  5. Custom - Prawdopodobnie nie zobaczy niczego poza poziomem 4.

Krótko mówiąc, jeśli chcesz zmapować klawisz shift + altgr, twoja lista musiałaby mieć co najmniej cztery elementy.


OSTRZEŻENIE - Typowe błędy

Każda z tych linii spowoduje błąd krytyczny i pozostawi cię bez użytecznej klawiatury:

key<AE01> { [ Backspace ] }
key<AE02> { [ a, b, , C ] }
  • Backspacepowinno być BackSpace: Zwróć szczególną uwagę na pisownię.
  • Pusty wpis powinien być VoidSymbol.

Najlepszy środek bezpieczeństwa!

  1. Wykonaj kopię zapasową edytowanego pliku:

    sudo /bin/cp /usr/share/X11/xkb/symbols/us /usr/share/X11/xkb/symbols/usBACKUP

  2. Stwórz skrypt, który możesz uruchomić bez hasła roota

Coś jak:

#!/bin/bash
sudo /bin/cp -rf /usr/share/X11/xkb/symbols/usBACKUP /usr/share/X11/xkb/symbols/us

Jeśli coś pójdzie nie tak, użyj myszki do uruchomienia tego wiersza kodu (zawartego w skrypcie bash, któremu zezwoliłeś sudoers. Pamiętaj, chmod +xaby zezwolić na działanie jako plik wykonywalny).


Strategie tworzenia kopii zapasowych w celu odzyskania uszkodzonego systemu

  • OSTRZEŻENIE: Klawiatura i klawiatura ekranowa przestaną działać z najmniejszym błędem.
  • Mysz będzie działać . Pisanie może odbywać się poprzez wyróżnianie znaków i wklejanie ich za pomocą środkowego kliknięcia. W Bash możesz return(naciskając Enter) wklejając podział linii.
  • Klawiatura będzie działać w trybie odzyskiwania w powłoce root. (Dostęp z bash)
  • Zawsze możesz użyć środowiska na żywo do naprawy plików.

Szybkie i brudne rozwiązanie

  1. Przejdź tutaj
  2. Plik> Utwórz kopię
  3. Mapper Arkusz to miejsce, w którym definiujesz układ.
    • Wpisy jednoznakowe są tłumaczone na kod rozumiany przez program.
      ( !staje się U0021). Obsługa Unicode!
    • Ciągi nie są tłumaczone i są traktowane jak są. UPEWNIJ SIĘ, ŻE NIE MA ŻADNYCH błędów w pisowni lub PRZYPADKU !.
    • Puste kwadraty są automatycznie wypełniane VoidSymbol.
  4. XKB-Sort Arkusz zawiera kluczowe grupy, na przykład:
    key <AE01> { [U0021, U0021, U0021, U0021, U0021, U0021, U0021, U0021] };
    key <AE02> { [U005B, U005B, U005B, U005B, U005B, U005B, U005B, U005B] };
    key <AE03> { [U005D, U005D, U005D, U005D, U005D, U005D, U005D, U005D] };
    key <AE04> { [U0022, U0022, U0022, U0022, U0022, U0022, U0022, U0022] };
    key <AE05> { [U002A, U002A, U002A, U002A, U002A, U002A, U002A, U002A] };
    key <AE06> { [U007B, U007B, U007B, U007B, U007B, U007B, U007B, U007B] };
    key <AE07> { [U007D, U007D, U007D, U007D, U007D, U007D, U007D, U007D] };
    key <AE08> { [U002F, U002F, U002F, U002F, U002F, U002F, U002F, U002F] };
    key <AE09> { [U0027, U0027, U0037, U0027, U0027, U0027, U0027, U0027] };
    key <AE10> { [U0029, U0029, U0038, U0029, U0029, U0029, U0029, U0029] };
    key <AE11> { [U0028, U0028, U0039, U0028, U0028, U0028, U0028, U0028] };
    key <AE12> { [U005C, U005C, U005C, U005C, U005C, U005C, U005C, U005C] };
    
    Zmienia to na wszystkich 8 poziomach:
    1234567890-= // Physical Keys
    ![]"*{}/')(\ // Changed to these characters
  5. XKBTab ma również linie. Każdą inną kartę można zignorować (jej kod).
  6. sudo vim /usr/share/X11/xkb/symbols/us
  7. Zamień zawartość układu. Wybierz taki, którego nie będziesz używać. Na przykład: Zmieniłem wpis colemak pozostawiając nienaruszoną strukturę i wymieniłem klucze.

Linie zainteresowania:

key.type[group1]="EIGHT_LEVEL";          // Enables 8 levels
modifier_map Control { <LFSH>, <RTSH> }; // Maps ctrl`s to shift keys.
key  { [Control_R, Control_R, Control_R, Control_R, Control_R, Control_R, Control_R, Control_R] }; 
key  { [Control_L, Control_L, Control_L, Control_L, Control_L, Control_L, Control_L, Control_L] };
include "level3(lalt_switch)" // Hold Left  Alt for Level 3
include "level5(ralt_switch)" // Hold Right Alt for Level 5

Akiva
źródło
W górnej linii odpowiedzi znajduje się: „(WIP - nie głosuj.)”. Odpowiedź wydaje mi się, że jest dla mnie stosunkowo kompletna - może ta notatka powinna zostać usunięta?
MattKelly,
1
@MattKelly Ahh Po prostu nie udało mi się go zaktualizować. W rzeczywistości utworzyłem arkusz kalkulacyjny, który automatycznie generuje kod na podstawie znaków umieszczanych w fałszywym układzie klawiatury.
Akiva,
Brzmi jak przydatny arkusz kalkulacyjny - czy jest on publicznie dostępny?
MattKelly,
@MattKelly Oto kopia. Wymaga dużej ilości cruftu i może dodano kilka kierownic, ale jak widać generuje kod: docs.google.com/spreadsheets/d/…
Akiva
Podejście to nie pozwala na ustawienie RALT tak, aby działał jako kolejny backspace, ani na ustawianie klawisza wstawiania jako backquote / tylda.
Craig Hicks,