Tarde a la fiesta, pero esto también me volvió loco; y, terco como soy, renunciar no era una opción.
Básicamente esto es lo que probé (como mi usuario o root si es necesario)
- ~ / .Xmodmap solamente
- ~ / .xsession, ~ / .xsessionrc
- ~ / .gnomerc
- ~ / .xprofile
- ~ / .xinitrc
- /etc/X11/Xsession.d/myscript
- /usr/share/X11/xorg.conf.d/ ( archivos de configuración, no lo toqué )
(En realidad, agregar el xmodmapcomando a ~/.bashrctrabajado, pero requiere iniciar un terminal cada vez después de iniciar sesión)
Hace unos años (?), xkbFue elegido para ocuparse del mapeo y la configuración de las claves (interactuando con X), pero xmodmaptambién podría solicitar cambios relacionados con las claves de X, después de xkbhacer su trabajo durante la inicialización de la sesión X.
El problema es cuándo deberían ocurrir estas configuraciones de xmodmap
Se parece esos archivos anteriores se procesan demasiado pronto en el proceso, y, o bien X no estaba dispuesto a aceptar xmodmap cambios o xkb sobreescribiría ellos.
Nota: ¡Agregué algo de "seguimiento" a estos archivos para asegurarme de que realmente se estuvieran ejecutando en algún momento!
Una solución que parece funcionar.
No estaba interesado en agregar un .desktoparchivo inicialmente (un simple script de una línea tenía que ser suficiente), pero eso funciona, así que aquí está.
La solución viene de ¿Cómo reasignar o intercambiar teclas especiales de teclado en Linux? "solución 1"
Básicamente crea un ~/.config/autostart/my-xmodmap.desktoparchivo y ponlo en él:
[Desktop Entry]
Name=MyXmodmap
Exec=/usr/bin/xmodmap /home/me/.Xmodmap
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true
reemplace mecon su nombre de usuario (tenga en cuenta que no me molesté en intentarlo ~/o $HOMEque puede funcionar igual de bien en lugar de /home/me, y la ruta completa de xmodmap probablemente no sea necesaria ...), y agregue el bit de ejecución
chmod +x ~/.config/autostart/my-xmodmap.desktop
Los comandos xmodmap tienen que estar en un ~/.Xmodmaparchivo en este caso (¡o use la -eopción, o elija otro nombre de archivo!). Cerrar sesión y volver a ingresar.
Tenga en cuenta que puede crear el programa de inicio desde "Aplicaciones de inicio".
¡Otra solución sería olvidar xmodmap y aprender a configurar xkb!
Editar (nuevamente)
A veces, tal vez el 25% de los inicios de sesión, xmodmaptodavía parece no funcionar, mientras que el comando se ejecuta realmente (un rastreador lo demuestra). La única conclusión a la que podría llegar en este momento es que el xkbproceso se ejecuta tarde en el proceso de inicio de sesión y puede finalizar después de que se xmodmaphaya ejecutado. Parece una condición de carrera ... Entonces, finalmente, cambié la execlínea del archivo de escritorio de inicio automático a
Exec=$HOME/bin/mystart &
(tenga en cuenta que &)
mystartes un script en un nuevo directorio binque creé que contiene
#!/bin/bash
sleep 5
/usr/bin/xmodmap /home/me/.Xmodmap &
date >> /tmp/xmodmap-has-run
y
chmod u+x ~/bin/mystart
El script duerme 5 segundos antes de ejecutar xmodmap, y rastrea cuándo se ejecutó (en el archivo /tmp/xmodmap-has-run).
¡Ojalá eso sea todo!