xmodmap cuelga el sistema durante 20 segundos y no se pega

Edité el map del keyboard usando xmodmap según https://wiki.archlinux.org/index.php/Xmodmap , y tengo dos problemas: ejecutar xmodmap ~/.Xmodmap cuelga por completo el sistema durante 15-25 segundos, lo que parece un poco Curiosamente, estoy remapeando el keyboard, y los cambios no se mantienen al desconectarse, ni siquiera al suspender.

Es un fastidio para mi time de arranque boost en 20 segundos o más, además de tener que ejecutarlo cada vez que me despierto de la suspensión. ¿Es esto normal (realmente no lo creo?) Y ¿hay algo que pueda hacer, tal vez una forma alternativa de reasignar el keyboard?

Linux Mint 15 x64 Canela

Tuve el mismo problema en xubuntu 14.04 (64) y xmodmap (con exactamente las mismas keys) y encontré una solución usando xkb en lugar de xmodmap: Remapping Keys en Ubuntu (usando xkb)

La solución xkb solo requiere cambiar los códigos key en

 /usr/share/X11/symbols/pc 

y borrar la caching xkb por

 rm -rf /var/lib/xkb/* 

No tuve retrasos después. Quizás esto también funciona con Linux Mint.

Tuve este problema con el command xmodmap para congelar el sistema durante ~ 20 segundos. Parecía que tenía todo el .Xmodmap en mi file .Xmodmap , lo que obligó a xmodmap a reasignar cada fila en el file de configuration.

Así es como lo resolví:

Antes de iniciar la configuration personalizada de xmodmap:

 # Store default xmodmap $ xmodmap -pke > ~/.Xmodmap.default # Backup your custom xmodmap $ mv ~/.Xmodmap ~/.Xmodmap.bak # Make a diff between default and custom xmodmap, and store the diff as .Xmodmap $ diff ~/.Xmodmap.bak ~/.Xmodmap.default | grep '<' | tr '<' ' ' > ~/.Xmodmap 

Cuando xmodmap ejecuta, llama a XChangeKeyboardMapping una vez por cada tecla que modifica, lo que genera events MappingNotify . En algunas configuraciones (la mía incluida), este estallido de events hace que el sistema se cuelgue por algún time.

Tuve este problema al crear un map de keyboard personalizado, y mi solución (fea) fue escribir un progtwig que genera el código fuente C que aplicará todas las modificaciones llamando XChangeKeyboardMapping solo una vez, desencadenando así MappingNotify solo una vez.

Antes de ejecutar este código, debe aplicar su map, ya que obtendrá la asignación actual del keyboard.

 #include <stdlib.h> #include <stdio.h> #include <X11/XKBlib.h> int main(void) { Display* display; int min, max, i, j, k; int keysyms_per_keycode; KeySym* keysyms; display = XOpenDisplay(NULL); XDisplayKeycodes(display, &min, &max); keysyms = XGetKeyboardMapping(display, min, max-min, &keysyms_per_keycode); printf("#include <stdlib.h>\n"); printf("#include <stdio.h>\n"); printf("#include <X11/XKBlib.h>\n\n"); printf("int main(void) {\n"); printf(" int first_keycode = %d;\n", min); printf(" int keysyms_per_keycode = %d;\n", keysyms_per_keycode); printf(" int num_of_keycodes = %d;\n", max-min); printf(" KeySym keysyms[%d] = {", ((max-min) * keysyms_per_keycode) + 1); for (k = 0, i = 0; i < (max-min); i++) { for (j = 0; j < keysyms_per_keycode; j++) { printf("%ld,", keysyms[k++]); } } printf("0};\n"); printf(" Display* display = XOpenDisplay(NULL);\n"); printf(" XChangeKeyboardMapping(display,first_keycode,keysyms_per_keycode,keysyms,num_of_keycodes);\n"); printf(" XCloseDisplay(display);\n"); printf(" return 0;\n"); printf("}\n"); XFree(keysyms); XCloseDisplay(display); return 0; } 

Comstack con gcc -lX11 .