¿Por qué mi archivo ~ / .Xmodmap no se carga al iniciar sesión?


16

Creé el siguiente ~/.Xmodmaparchivo según esta respuesta .

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

En otras palabras, intercambie Deletey Menu, y haga Caps Lockun adicional Escape.

La próxima vez que inicié sesión, Ubuntu me preguntó si quería cargar ~/.Xmodmapcomo se esperaba. Lo cargué, pero no pasó nada (ni en ese momento ni en inicios de sesión posteriores). Si ejecuto manualmente xmodmap ~/.Xmodmap, funciona como se esperaba.

Sé que esto funcionó temprano en la versión 10.10 beta, pero está fallando en mi nueva instalación 10.10. No he probado nada anterior a 10.10. ¿Algunas ideas?

Editar: puse algunas declaraciones de depuración /etc/gdm/Xsessionpara asegurarme de que se ~/.Xmodmapestaba cargando, y todo comenzó a funcionar mágicamente. No cambié nada excepto agregar algunos ecos, y todavía funciona ahora que revertí mis cambios y reinicié nuevamente. Lo más extraño que he visto.

Una cosa que me di cuenta es que la parte de "remapear Bloqueo de mayúsculas para escapar" del Xmodmap siempre estaba funcionando. Fue solo el intercambio Eliminar / Menú que falló. Dejaré esta pregunta abierta por ahora en caso de que alguien más tenga el mismo problema, ya que en realidad no sé por qué el problema se detuvo.


Estoy experimentando este mismo problema, me he vuelto loco. Si descubro la causa, me aseguraré de publicar una respuesta.
Jorge Israel Peña

Respuestas:


11

Sé que es una tontería, pero como solución alternativa, podrías simplemente iniciar automáticamente xmodmap ~/.Xmodmap.

También puede verificar /etc/gdm/Xsessionla línea usermodmap="$HOME/.Xmodmap"y, si no está allí, simplemente agregarla al final del archivo. Si usted es el único usuario del sistema, simplemente ingrese sus cambios /etc/X11/Xmodmap.


2
¿Cómo se "inician automáticamente" los comandos?
miguel.martin

Ver Inicio automático . Lo más fácil es probablemente agregar una entrada Settings->Session and Startupo algo similar.
Mateen Ulhaq

O, por ejemplo, agréguelo a su shell, de modo que si abre los shells con frecuencia, lo ejecutará. Lo primero que hago cuando entro en Gnome es abrir un shell la mayor parte del tiempo, así que esa es una forma de funcionar.
trusktr

3

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!


La edición de xkb confituration funcionó para mí: askubuntu.com/a/1090892/1021380
postracional el

2

Aquí hay, quizás una mejor respuesta entonces: http://cweiske.de/howto/xmodmap/ar01s06.html

Puede que tenga que modificarlo un poco para que funcione para usted, pero todas las instrucciones están ahí.


1
Estas instrucciones son para KDE, pero si miro el equivalente de Gnome ( /etc/gdm/Xsession), las líneas que el enlace dice agregar ya están en él.
Mateo

2

¿Quizás tenga un error de sintaxis en su ~/.Xmodmaparchivo?

Intenta correr:

$ xmodmap ~/.Xmodmap

Eso debería disparar un error si hay alguno.


0

Tuve el mismo problema extraño, tratando de iniciar mi Xmodmap mientras iniciaba sesión en mi sesión (ubuntu 13.04). Finalmente lo hice funcionar con un archivo .xinitrc en mi carpeta Inicio donde puse mi comando, pero con rutas absolutas, es decir:

/ usr / bin / xmodmap /home/MYNAME/.Xmodmap

Luego tuve que reiniciar (no solo reiniciar) para que se ejecute.


2
Esto no funciona en Ubuntu 14.04, para mí.
miguel.martin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.