xkb

Z Wikiverzity
Skočit na navigaci Skočit na vyhledávání

xkb = X keyboard extension, způsob, jakým se mapuje klávesnice v systému X11.

Debian[editovat]

Podstránky[editovat]

Nastavení vlastní klávesové mapy[editovat]

Soubory:

  • /usr/include/X11/keysymdef.h – zde naleznu seznam symbolů, které pak mohu použít v souboru:
  • /usr/share/X11/xkb/symbols/mojemapa – zde si nadefinuji vlastní mapu

Vlastní klávesovou mapu pak aktivuji příkazem:

setxkbmap mojemapa

Příklad[editovat]

Typograficky korektní je používat pomlčku (tam, kde patří, a nepoužívat namísto ní rozdělovník). Můžeme si ji namapovat na klávesu "minus", stisknutou s druhým modifikátorem. Navíc si namapujeme matematické mínus na tu samou klávesu s oběma modifikátory:

key <AE11>  { [ minus, underscore, endash, U2212 ] };

Seznamy[editovat]

Ta mapa by asi měla být uvedená ještě v seznamech:

  • /usr/share/X11/xkb/symbols.dir

Ale tenhle soubor se dá něčím generovat.

A dále:

  • rules/base.lst: mojemapa
  • rules/xfree86.lst: mojemapa
  • rules/xorg.lst: mojemapa

Příklady[editovat]

Ubuntu[editovat]

Mám problém zjistit, jak si regulérně nainstalovat vlastní rozložení klávesnice v Ubuntu. Snažím se najít nějaké utility. Co třeba:

  • graphviz = to s tím vůbec asi nesouvisí
  • keyboard-mapper = asi jen přepíná mapy
  • xfkc = keyboard layout configuration tool = asi jen nahrazuje ruční vytváření xorg.conf, což je teď už stejně k ničemu
  • xkb-data
  • xkeyboard-config

Vlastní postup[editovat]

Umožní změnit klávesnici pomocí setxkbmap, ale má to drobnou chybu: už se to nepromítne do nastavení gnome a tím pádem se to také nenastaví automaticky při přihlášení uživatele.

  • soubory třeba cz_robot, cz_rob, cz_rob_nos do adresáře /usr/share/X11/xkb/symbols
  • symbols.dir: -dp----- a------- cz_rob(basic)
  • do /usr/share/xkb/rules/base přidat cz-rob mezi seznam klávesnic "layouts with 3rd and 4th groups" (??)
  • do /usr/share/xkb/rules/base.lst přidat tyto názvy do sekce !layouts
  • přidat sekci layout do /etc/X11/xkb/base.xml
  • a co do /usr/share/X11/xkb/rules/evdev.xml ?

Vytvoření patchů:

diff -c symbols.dir.000 symbols.dir > symbols.dir.diff
cd rules
diff -c base.lst.000 base.lst > base.lst.diff
diff -c evdev.xml.000 evdev.xml > evdev.xml.diff

Aplikace patchů:

patch -l -b -Vt -F2 symbols.dir < symbols.dir.diff
patch -l -b -Vt -F2 evdev.xml < evdev.xml.diff
patch -l -b -Vt -F2 base.lst < base.lst.diff

Howto[editovat]

Vyjdeme z článku:

Souhrn:

  1. /usr/share/X11/xkb - defaultní adresář
  2. /usr/share/X11/xkb/symbols - v tomto adresáři vytvoříme soubor s vlastním rozložením
  3. /usr/share/X11/xkb/rules/evdev.html - do tohoto souboru je nutno vlastní rozložení také přidat; problém je, že takový soubor tu neexistuje. Nejspíš se bude jednat o soubor /usr/share/X11/xkb/rules/evdev.xml
  4. /usr/share/X11/xkb/symbols.dir - sem se to musí také dopsat, aby o tom věděl zbytek systému X11 (někde se tvrdí, že to není nutné)
  5. /usr/share/X11/xkb/rules/evdev - sem se také musí dopsat příslušná řádka do sekce !layouts
  6. poznámka: To load changes to the layouts menu simply close out of gnome-keyboard-preferences and reload, relaunching the windows manager should not be necessary.

Příjde mi to trochu složitý postup, neexistuje na to nějaká utilita?

Další reference:

Tam je zmíněny ještě (zejména XML) soubory:

  1. /usr/share/X11/xkb/rules/base.lst - sem se také musí dopsat příslušná řádka do sekce !layouts (pravděpodobně tato pasáž není už nutná)
  2. /usr/share/X11/xkb/rules/base.xml - sem se také musí dopsat příslušná řádka do sekce !layouts (tady to asi bude nutné)
  3. /usr/share/X11/xkb/rules/evdev.xml - sem se také musí dopsat příslušná řádka do sekce !layouts (tady to asi bude nutné)

Problémy[editovat]

V Ubuntu/Lucid se mi najednou stává, že edituji /usr/share/X11/xkb/symbols/něco (něco=klávesová mapa, kterou jsem už předtím používal), načtu mapu pomocí setxkbmap, ale změny se nikterak neprojeví. Přitom dle pts [http://ptspts.blogspot.com/2010/06/how-to-create-custom-keyboard-layout.html As soon as you save your changes, you are able to load the new layout with setxkbmap 'us(my_layout)'.

Je to asi blbě napsané, aby se nová klávesnice projevila, je zapotřebí restartovat X-ka. Což je trochu problém, v nových instalacích Ubuntu je zakázána možnost restartu trojkombinací Ctrl-Alt-Backspace. Znovuzprovoznění viz forum.ubuntu.cz: index.php?topic=33956.0 ctrl+alt+backspace. Diskutované možnosti:

xorg.conf[editovat]

Section "ServerFlags"
       Option           "DontZap" "false"
EndSection

Problém je v tom, že současná verze X-ek už vůbec žádný xorg.conf nepoužívá

Anebo už není v /etc/X11/xorg.conf, ale je rozkouskovaný jen v: /usr/lib/X11/xorg.conf.d

dontzap[editovat]

  • balík a utilita dontzap:
    • sudo dontzap --enable – Ctrl+Alt+Backspace nedělá nic
    • sudo dontzap --disable – Ctrl+Alt+Backspace restartuje X-server

Tato utilita už v Ubuntu/Lucid neexistuje. Důvod je zřejmě v tom, že This is due to the fact that “DontZap” is no longer an option in the X server and has become an option in XKB instead.

klikátko[editovat]

  • Systém -> Předvolby -> Klávesnice
    • Rozložení možnosti -> Pořadí kláves zabíjejících server X
      • Ctrl+Alt+Backspace

příkazový řádek[editovat]

setxkbmap -option terminate:ctrl_alt_bksp


Hint[editovat]

Aby se nemusela pokaždé restartovat X-ka, je možné si novou klávesnici otevřít v nové instanci X:

sudo xinit -- :2

(Skončí se to opět Ctrl+Alt+Backspace)

Keyboard failed to initialize for relative axes[editovat]

Předtím jsem tímto způsobem nastartoval alternativní instanci X. Ale teď:

(EE) Microsoft Natural® Ergonomic Keyboard 4000: failed to initialize for relative axes.

Kde se to řeší:

Skutečně nutné restartovat X-ka?[editovat]

Prptpže si nepamatuji, že bych takové věci v minulosti musel dělat. Pokaždé to zabralo hned i běz restartu. Jen matně vzpomínám, že jsem něco dělal s kompilací klívesové mapy.

.xinitrc[editovat]

Své oblíbené příkazy pro nastavení klávesnice si uložím do ~/.xinitrc

Odkazy[editovat]