Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Je eigen keyboard layout  (gelezen 1079 keer)

Offline MKe

  • Lid
  • Steunpunt: Nee
Je eigen keyboard layout
« Gepost op: 2021/08/11, 19:28:06 »
Ik heb een 75% keyboard, dat is een keyboard zonder numpad. Op zich heb je die ook niet nodig, maar een enkele keer  kan het wel handig zijn om zoiets te hebben. Om dat toch voor elkaar te krijgen heb ik een eigen keyboard layout gemaakt op basis van het 'us' keyboard en dacht dat het handig zou zijn voor mensen hier om dat eens te laten zien. Misschien heb je wel zo'n laptop zonder numpad?
Mijn numpad komt op de letters "qweasdzxc" en werkt als de rechter alt (Alt gr) wordt ingedrukt. Verder draai ik de capslock en de escape toets om omdat ik bijna nooit capslock gebruik, maar wel vaak de escape key.

Om dit te doen moet ik eerst een layout file maken. Hier wijs je functies toe aan toetscodes. Het vinden van de toetscodes is wat omslachtig. Ik moet daarvoor eerst het commando 'xev -event keyboard' runnen in de commandline. Je krijgt dan een venster te zien en als die actief is wordt er het cli venster de 'keycode' geprint van de toetsen die ik indruk. Een voorbeeld: de 'a' geeft:
KeyPress event, serial 28, synthetic NO, window 0x1800001,
    root 0x164, subw 0x0, time 3397884, (478,252), root:(1540,277),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x1800001,
    root 0x164, subw 0x0, time 3397982, (478,252), root:(1540,277),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False
De keycode voor 'a' is dus 38. Doe dit voor alle toetsen die je wilt remappen (qweasdzxc)

Vervolgens open je dan de file /usr/share/X11/xkb/keycodes/evdev en zoekt de keycodes op. Daar staat dan de aanduiding waar Linux mee werkt, voor 'a' is dat dan 'AC01'.

Best lastig dus, maar als je dit allemaal opzoekt zul je zien dat er logica in zit, zo zijn de rijen van onder naar boven: AA, AB, AC, AD, AE etc. en worden de toetsen van links naar rechts genummerd: 0, 1, 2,3 etc. De q-toets is dan dus 'AD01, de s-toets AC02 etc.

Nu kunnen we een layout file maken. Die staan allemaal in /usr/share/X11/xkb/symbols. Maak daar (met sudo!) een bestand aan met de naam van je keyboard. Ik noem mijn keyboard hier 'custom', dus ik noem de file ook zo. In de file kom de volgende tekst, let op het gebruik van de gevonden codes zoals ik hierboven heb beschreven:
default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {

    include "us(basic)"
    name[Group1]= "Cusom voor 75 (US) met numblok";

    include "eurosign(5)"
    include "level3(ralt_switch)"
    key <CAPS> {        [     Escape           ]        };
    key <ESC>  {        [     Caps_Lock             ]        };

    key <AB01>  { [  NoSymbol,   NoSymbol,   1, NoSymbol ]      };
    key <AB02>  { [  NoSymbol,   NoSymbol,   2, NoSymbol ]      };
    key <AB03>  { [  NoSymbol,   NoSymbol,   3, NoSymbol ]      };

    key <AC01>  { [  NoSymbol,   NoSymbol,   4, NoSymbol ]      };
    key <AC02>  { [  NoSymbol,   NoSymbol,   5, NoSymbol ]      };
    key <AC03>  { [  NoSymbol,   NoSymbol,   6, NoSymbol ]      };

    key <AD01>  { [  NoSymbol,   NoSymbol,   7, NoSymbol ]      };
    key <AD02>  { [  NoSymbol,   NoSymbol,   8, NoSymbol ]      };
    key <AD03>  { [  NoSymbol,   NoSymbol,   9, NoSymbol ]      };
    key <SPCE>  { [  NoSymbol,   NoSymbol,   0, NoSymbol ]      };
};

Je ziet dus dat ik eerst de "us(basic)" binnenhaal, het us-toetsenbord layout. dan de eurosign(5) die zoals het zegt het euro teken op de 5 (met rechter alttoets zet, vervolgens ook nog de "level3(ralt_switch)" die ervoor zorgt ik de rechter alt-toets als 3e modifier key kan gebruiken.

Daarna remap ik de CAPSLOCK en de ESCAPE toetsen, spreekt voor zich denk ik?
Vervolgens dus de toetsen codes AB01 etc met daarachter de remap.  Er zijn steeds 4 waarden. De eerste is zonder modifier key, de tweede als je de shift ingedrukt houdt, de 3e is dus wat er gebeurt als je de rechter alt toets (Altgr) ingedrukt houdt. 'NoSymbol'  zegt eigelijk "doe maar wat er in de "US" layout is gedefinieerd. Als laatste gebruik ik Altgr-spatie als '0'.

Als dit opgeslagen is moeten we de layout aanmelden. Daarvoor open ik met sudo in mijn tekst editor de file /usr/share/X11/xkb/rules/base.lst. Zoek daarin de regel "! layout" en zet direkt onder die regel:
  custom           Cusom voor 75 (US) met numblok

Nu moet je het toetsenbord alleen nog maar als default te zetten met de volgende commando:
sudo localectl set-x11-keymap custom
Vanaf nu werkt je escape als capslock en kun je getallen invoeren door de toetsen q w e a s d z x c <spatie> te gebruiken terwijl je de rechter alt-toets ingedrukt houdt.

Dit is maar een voorbeeld, natuurlijk zijn de mogelijkheden eindeloos om je toetsenbord helemaal naar je hand te zetten. Succes!
« Laatst bewerkt op: 2021/08/11, 19:31:11 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Je eigen keyboard layout
« Reactie #1 Gepost op: 2021/08/12, 11:30:30 »
Zeer bedankt! Dit is de beste uitleg die ik al heb gezien om op de "juiste" manier aanpassingen te doen aan het toetsenbord . Deze methode is veel ingewikkelder dan vroeger met xmodmap. xmodmap werkt ook nu nog, maar enkel als je xorg draait.

Offline MKe

  • Lid
  • Steunpunt: Nee
Re: Je eigen keyboard layout
« Reactie #2 Gepost op: 2021/08/12, 13:12:58 »
Graag gedaan.

Xkb kan ook net als xmodmap ook net losse commando’s werken. Dus als je alleen b.v. CapsLock wilt remappen is dat vrijwel net zo gemakkelijk te doen met xkb. Het voordeel met de methode die hierboven is beschreven is dat je gemakkelijk kunt switchen tussen de verschillende keyboard lay-outs. Alles heeft zijn voor- en nadelen.

De one-liner om met xkb de capslock te remappen naar escape is als volgt:

setxkbmap -option caps:escape
« Laatst bewerkt op: 2021/08/12, 13:48:31 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Je eigen keyboard layout
« Reactie #3 Gepost op: 2021/08/12, 13:36:47 »
Top! Als je naar die dingen zoekt op internet, dan kom je nog altijd veel te veel uit op adviezen met xmodmap, of op zeer ingewikkelde adviezen met xkb waar ik niets van snapte (tot vandaag).

Offline MKe

  • Lid
  • Steunpunt: Nee
Re: Je eigen keyboard layout
« Reactie #4 Gepost op: 2021/08/12, 13:47:43 »
Ja inderdaad. De documentatie van xkb is een zootje en de mix met xmodmap maakt het er niet gemakkelijker op. Ik zag ook door de bomen het bos niet meer, vandaar dat ik er nu maar eens echt ingedoken ben.

Offline MKe

  • Lid
  • Steunpunt: Nee
Re: Je eigen keyboard layout
« Reactie #5 Gepost op: 2021/08/27, 16:34:25 »
Nog een truuk. Hierboven heb ik capslock op de escape toets gezet en escape op de capsolock toets. Nu merkte ik dat ik de escape toets ook nog regelmatig gebruik, en dus per ongeluk de capslock weer aanzet. Ik heb de escape toets dus weer terug gezet naar daadwerkelijk escape, zodat nu zowel de capslock toets als de escape toets als escape werkt.
Ik wil toch heel af- en toe de capslock kunnen gebruiken. Ik heb het nu geremapped dat als ik beide shift toetsen tegelijk indruk, DAT IK DAN CAPSLOCK AAN- EN UIT KAN ZETTEN.  O0

De keyboard file ziet er nu zo uit:
default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {

    include "us(basic)"
    name[Group1]= "Cusom voor 75 (US) met numblok";
   
    include "eurosign(5)"
    include "level3(ralt_switch)"
    key <CAPS>  { [  Escape, NoSymbol, NoSymbol, NoSymbol ]   };
    key <LFSH> {
        type= "TWO_LEVEL",
        symbols[Group1]= [         Shift_L,       Caps_Lock ]
    };
    key <RTSH> {
        type= "TWO_LEVEL",
        symbols[Group1]= [         Shift_R,       Caps_Lock ]
    };

    key <AB01> { [  NoSymbol,   NoSymbol,   1, NoSymbol ] };
    key <AB02> { [  NoSymbol,   NoSymbol,   2, NoSymbol ] };
    key <AB03> { [  NoSymbol,   NoSymbol,   3, NoSymbol ] };

    key <AC01> { [  NoSymbol,   NoSymbol,   4, NoSymbol ] };
    key <AC02> { [  NoSymbol,   NoSymbol,   5, NoSymbol ] };
    key <AC03> { [  NoSymbol,   NoSymbol,   6, NoSymbol ] };

    key <AD01> { [  NoSymbol,   NoSymbol,   7, NoSymbol ] };
    key <AD02> { [  NoSymbol,   NoSymbol,   8, NoSymbol ] };
    key <AD03> { [  NoSymbol,   NoSymbol,   9, NoSymbol ] };
    key <SPCE> { [  NoSymbol,   NoSymbol,   0, NoSymbol ] };
};

Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Je eigen keyboard layout
« Reactie #6 Gepost op: 2021/09/14, 17:05:58 »
Ik ben, na lang inwerken, dan toch tot iets gekomen.  :P

Ik heb een Del XPS laptop waarop onderaan rechts zes halve toetsjes zitten voor de pijltjes:
PgUp  Up    PgDn
Left  Down  Right
Briljant idee van de ontwikkelaars, en een geweldig idee in vergelijking met vorig model? Vergeet het! Voor je het weet zitten je dikke vingers op PgUp of PgDn als je met de pijltjes werkt, en zit je helemaal elders. Het is me gelukt die PgUp en PgDn om te zetten naar Left en Right, en PgUp/PgDn te bekomen door de rechter Alt toets in te drukken:

default  partial alphanumeric_keys
 xkb_symbols "nonext" {

    name[Group1]= "International with dead keys disabling PgUp/Dn";

    include "us(intl)"

 // my custom changes:
     key <PGDN> { [  Right, Nosymbol, Next, Next ] };
     key <PGUP> { [  Left, Nosymbol, Prior, Prior ] };

 };

Hier trek ik het us(intl) toetsenbord binnen (intl., with dead keys):
- Direct aanslaan wordt pijltje
- Shift+ toets blijft standaard (en dat is: zelfde als eerste niveau)
- AltGr+ toets en Shift+AltGr+toets wordt PgDn (Next) en PgUp (Prior).

<PGUP> en <PGDN> zijn gedefineerd in de "apl" layout (voor Apple computers) en de "pc" layout. Je kan dat weten door in de directory "/usr/share/X11/xkb/symbols" de bestanden te doorzoeken:

$ grep "<PGDN>" *
apl: key <PGDN> { [ Uf80a, Uf80e ] }; // DS, DL
nonext:     key <PGDN> { [  Right, Nosymbol, Next, Next ]};
pc:    key <PGDN> { [  Next ] };
En zo zie je tegelijk mijn aanpassingen (bestand "noext") tegenover het origineel ("pc"). Hoe je de codes <PGUP> en <PGDN> kan vinden,  heeft MKE al in de eerst post hier uitgelegd.

Het is allemaal heel weinig gedocumenteerd. Van je laatste voorbeeld ben ik nog altijd een beetje aan het duizelen  :blank:

Offline Paul Matthijsse

  • Lid
  • Steunpunt: Ja
Re: Je eigen keyboard layout
« Reactie #7 Gepost op: 2021/09/14, 17:12:51 »
Een zeer fraai voorbeeld van "Linux doet wat jij wilt" en niet andersom. Weten jullie misschien of een dergelijke re-map truc ook op Windows en de Mac is uit te voeren?

Offline MKe

  • Lid
  • Steunpunt: Nee
Re: Je eigen keyboard layout
« Reactie #8 Gepost op: 2021/09/14, 17:20:10 »
Een zeer fraai voorbeeld van "Linux doet wat jij wilt" en niet andersom. Weten jullie misschien of een dergelijke re-map truc ook op Windows en de Mac is uit te voeren?
nee, ik ben ook op zoek voor mijn (Windows) werklaptop. Maar het beste wat ik kan vinden tot nu toe is Sharpkey, wat een gemakkelijke manier is om de registry te veranderen. Je kunt we wel enkele toetsen mee remappen, maar toetsen combinaties (zoals de dubbele shift die ik eerder beschreef) is al niet mogelijk.

Offline Paul Matthijsse

  • Lid
  • Steunpunt: Ja
Re: Je eigen keyboard layout
« Reactie #9 Gepost op: 2021/09/15, 12:12:48 »
nee / Sharpkey / maar toetsen combinaties (zoals de dubbele shift die ik eerder beschreef) is al niet mogelijk.

De enorme aanpasbaarheid van Linux heeft me al lang verbaasd. Kijk, de voorbeelden hierboven zijn niet direct voor beginners, maar weten dat het kan (en dat bijna alles kan), maakt dat ik al vele jaren met dit besturingssysteem werk. Zoals gezegd, "het ding doet wat ik wil". ;)