web-dev-qa-db-fra.com

Pourquoi mon fichier ~ / .Xmodmap ne se charge-t-il pas lors de la connexion?

J'ai créé le fichier ~/.Xmodmap suivant comme cette réponse .

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

En d’autres termes, permutez Deleteet Menuet faites de Caps Lock un Escapesupplémentaire.

La prochaine fois que je me suis connecté, Ubuntu m'a demandé si je voulais charger ~/.Xmodmap comme prévu. Je l'ai chargé, mais rien ne s'est passé (à ce moment-là ou lors de connexions ultérieures). Si je lance manuellement xmodmap ~/.Xmodmap, cela fonctionne comme prévu.

Je sais que cela a fonctionné tôt dans la version bêta de 10.10, mais cela échoue lors de la nouvelle installation de 10.10. Je n'ai rien essayé avant 10.10. Des idées?

Edit: J'ai mis quelques instructions de débogage dans /etc/gdm/Xsession pour m'assurer que ~/.Xmodmap était en cours de chargement et que tout a commencé à fonctionner comme par magie. Je n'ai rien changé sauf l'ajout d'échos, et cela fonctionne toujours maintenant que j'ai annulé mes modifications et que j'ai redémarré. La chose la plus étrange que j'ai jamais vue.

Je me suis rendu compte que la partie "remappage des majuscules pour échapper" de Xmodmap fonctionnait toujours. Ce n’est que l’échange Supprimer/Menu qui a échoué. Je laisse cette question ouverte pour le moment, au cas où quelqu'un d'autre aurait le même problème, car je ne sais pas réellement pourquoi le problème s'est arrêté.

15
Matthew

Je sais que c'est idiot, mais comme solution de contournement, vous pouvez simplement lancer automatiquement xmodmap ~/.Xmodmap.

Aussi, vous pouvez vérifier /etc/gdm/Xsession pour la ligne usermodmap="$HOME/.Xmodmap" et si ce n’est pas le cas, il suffit de l’ajouter à la fin du fichier. Si vous êtes le seul utilisateur du système, indiquez simplement vos modifications dans /etc/X11/Xmodmap.

10
turbo

Peut-être avez-vous une erreur de syntaxe dans votre fichier ~/.Xmodmap?

Essayez de courir:

$ xmodmap ~/.Xmodmap

Cela devrait déclencher une erreur s'il y en a.

2
gpmcadam

En retard à la fête, mais cela m'a rendu fou aussi; et, têtu comme je suis, abandonner n'était pas une option.

En gros, c’est ce que j’ai essayé (en tant qu’utilisateur ou en tant que root si nécessaire)

  • ~/.Xmodmap seulement
  • ~/.xsession, ~/.xsessionrc
  • ~/.gnomerc
  • ~/.xprofile
  • ~/.xinitrc
  • /etc/X11/Xsession.d/myscript
  • /usr/share/X11/xorg.conf.d/ ( fichiers de configuration, ne l'a pas touché )

(En fait, l'ajout de la commande xmodmap à ~/.bashrc a fonctionné, mais il est nécessaire de démarrer un terminal à chaque fois après la connexion.)

Il y a quelques années (?), xkb a été choisi pour gérer le mappage et la configuration des clés (interface avec X), mais xmodmap peut également demander des modifications liées à la clé de X, après que xkb a effectué son travail lors de l'initialisation de la session X.

Le problème est de savoir quand ces paramètres xmodmap doivent-ils apparaître?
Il semble que les fichiers ci-dessus sont traités trop tôt dans le processus et soit X n'était pas prêt à accepter les modifications de xmodmap, soit xkb les écraserait.

Remarque: j'ai ajouté un "suivi" à ces fichiers pour m'assurer qu'ils étaient effectivement exécutés à un moment donné!

Une solution qui semble fonctionner

Je n'avais pas envie d'ajouter un fichier .desktop au début (un simple script sur une ligne devait suffire), mais cela fonctionne, alors le voici.
La solution vient de Comment remapper ou échanger des touches spéciales du clavier sous Linux? "solution 1"

Généralement, créez le fichier ~/.config/autostart/my-xmodmap.desktop et mettez-le dans:

[Desktop Entry]
Name=MyXmodmap
Exec=/usr/bin/xmodmap /home/me/.Xmodmap
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true

remplacez me par votre nom d'utilisateur (notez que je n'ai pas pris la peine d'essayer ~/ ou $HOME qui pourrait fonctionner aussi bien à la place de /home/me, et le chemin d'accès complet de xmodmap n'est probablement pas nécessaire ...), et ajoutez le bit exec

chmod +x ~/.config/autostart/my-xmodmap.desktop

Les commandes xmodmap doivent dans ce cas être dans un fichier ~/.Xmodmap (ou utilisez l'option -e, ou choisissez un autre nom de fichier!). Déconnexion et retour dans.

Notez que vous pouvez créer le programme de démarrage à partir de "Applications de démarrage".

Une autre solution serait d'oublier xmodmap et d'apprendre à configurer xkb!

Modifier (encore)

Parfois, peut-être 25% des connexions, le xmodmap semble toujours ne pas fonctionner - alors que la commande est en cours d'exécution (un outil de suivi le prouve). La seule conclusion à laquelle je puisse en venir pour l'instant est que le processus xkb s'exécute en retard dans le processus d'ouverture de session et peut se terminer après l'exécution de xmodmap. Cela ressemble à une situation de concurrence critique ... Alors, finalement, j'ai changé la ligne du fichier de bureau de démarrage automatique exec en

Exec=$HOME/bin/mystart &

(notez le &) mystart est un script situé dans un nouveau répertoire bin que j'ai créé et qui contient

#!/bin/bash    
sleep 5
/usr/bin/xmodmap /home/me/.Xmodmap &
date >> /tmp/xmodmap-has-run

et

chmod u+x ~/bin/mystart

Le script dort 5 secondes avant d'exécuter xmodmap et indique le moment de son exécution (dans le fichier /tmp/xmodmap-has-run).

Espérons que ce sera tout!

2
Ring Ø

Voici peut-être une meilleure réponse alors: http://cweiske.de/howto/xmodmap/ar01s06.html

Vous devrez peut-être ajuster un peu pour travailler pour vous, mais les instructions sont toutes là.

2
Robert Massaioli

J'ai eu le même problème étrange, en essayant de démarrer mon Xmodmap tout en vous connectant à ma session (Ubuntu 13.04). Je l'ai finalement fait fonctionner avec un fichier .xinitrc dans mon dossier de départ où j'ai placé ma commande, mais avec des chemins absolus, c'est-à-dire:

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

Ensuite, j'ai dû redémarrer (pas seulement reloguer) pour qu'il soit exécuté.

0
greguti