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

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

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 = podle mě pouze zobrazuje, některý ze seznamů

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

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é), symbols.dir, ale nemusí existovat
  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


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

Protož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.

Error activating XKB configuration

editovat
  • špatně napsaný zroják:
    • chyběl mi v kódu středník
    • měl jsem napsány špatně komentáře ty začínají znaky // a končí koncem řádky
      • zkusil jsem to opravit podle vzoru, ale nepomohlo to
    • podle chatGPT mohu zahrnout klávesnici, která zahrne jinou klávesnici a to moje rozložení to všechno přepíše, takže by to mělo být OK
  • špatné práva ke zdrojáku: OK
  • chyba s X serverem či XKB komponenty:
    • x-server verze: 21.1.4 (aktuální 21.1.8)
    • XKB:

.xinitrc

editovat

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

Permanentně

editovat

Když dám

setxkbmap cz_robot

tak mi to každou chvíli "někdo" sám od sebe změní. Tak to dle rady na Persistent remapping of keys with setxkbmap or Xorg configuration zkusím dát do:

/etc/default/keyboard
# KEYBOARD CONFIGURATION FILE                                                                                                                                                               

# Consult the keyboard(5) manual page.                                                                                                                                                      

XKBMODEL="pc105"
#XKBLAYOUT="cz"                                                                                                                                                                             
#XKBVARIANT="qwerty"                                                                                                                                                                        
XKBLAYOUT="cz_robot"
XKBOPTIONS=""

BACKSPACE="guess"

Zvláštní znaky

editovat

Unicode

editovat

Ctrl-Shift-u, pak napíšu unicode kód hexadecimálně a odentruju

Systém → Volby → Klávesnice → Možnosti rozložení nastavím, která klávesa funguje jako Compose key

setxkbmap -option compose:rctrl 
   anebo lctrl, ralt, lalt apod.

U X-Windows je obvyklá kombinace Shift+AltGr (tj. pravý Alt)

Tabulky: