Comment définir Xmodmap lors de la connexion?

46

Comme la disposition de mon clavier ne me convient pas, je me lance xmodmaplors de la connexion. Le script est nommé .profileet s'exécute correctement, mais il casse l'interface Unity.

Je veux savoir où mettre la xmodmapligne pour qu'elle s'exécute sur mon login et ne casse rien.

J'ai déjà essayé de le mettre dans les fichiers .bash_loginet .bash_profile, sans succès ( xmodmapne configure pas mon clavier).

Quelles sont mes options?

Thiago Moraes
la source
4
Comment ça casse l'interface de l'unité?
djeikyb
1
Je voudrais ajouter que si votre temps d’exécution de xmodmap est trop long, vous devez supprimer toutes les entrées que vous n’avez pas modifiées manuellement. Conserver uniquement les modifications dans votre fichier d'entrée accélérera l'exécution de xmodmap.
user1071575

Réponses:

29

L'emplacement correct xmodmap ~/.Xmodmap(pour que vos modifications soient lues au démarrage) est ~/.xinitrcindiqué (voir l'explication ci-dessous), mais vous pouvez également placer la xmodmapcommande en tant qu'élément de démarrage ( /usr/bin/xmodmap /home/user/.Xmodmap). Je peux dire que pour 12.04 (et vraisemblablement pour 12.10), ces deux alternatives fonctionnent, car elles sont lues de toute façon une fois que vous vous êtes connecté lightdm. (J'ai changé Return to Right Shift et le changement n'a pris effet qu'après la saisie de mon mot de passe et la connexion).

Remarque: si vous êtes sur Xfce, il est indiqué dans la FAQ officielle de Xfce que vous devrez peut-être créer un élément de démarrage au lieu de l'utiliser ~/.xinitrcet qu'il vous faudra peut-être retarder l'exécution pour que les xmodmapmodifications ne soient pas écrasées setxkbmap. Vous pouvez utiliser un délai pour y parvenir dans votre entrée de démarrage:

/bin/bash -c "sleep 20; /usr/bin/xmodmap /home/$USER/.Xmodmap"

(Pour l'entrée de démarrage, il est nécessaire de spécifier des chemins absolus)

Chaque fois que vous setxkbmapexécutez une modification de la disposition du clavier, vous devrez exécuter à xmodmap ~/.Xmodmapnouveau le terminal.

En créant ~/.xinitrc

Créez un fichier dans votre dossier personnel appelé .xinitrcavec

touch .xinitrc

et place dedans:

xmodmap ~/.Xmodmap

Votre Xmodmapfichier ne doit pas contenir d'entrées dans le xmodmap -e " "style car il est utilisé dans le terminal pour définir temporairement les valeurs. Il doit avoir des entrées dans ce format:

keycode 65 = Tab
keycode 23 = Space

Il est souvent déroutant de savoir lequel des différents Xfichiers (tels que .xprofile,.xinitrc , etc.) sont lus au démarrage, mais .xinitrcne semble être lu encore en 12.04, alors .Xmodmapou .xinputrcne sont pas lus par eux - mêmes.


la source
5
Notez que si vous apportez vos modifications avec xmodmap -e '..., vous pouvez récupérer le bon format pour xmodmap .Xmodmapavec xmodmap -pke, lequel imprime le mappage actuel - bien que vous souhaitiez le filtrer uniquement aux lignes qui s'appliquent aux modifications que vous avez apportées.
Barry Kelly
1
Cela n'a pas fonctionné pour moi. J'ai créé .Xmodmap et .xinitrc | Puis j'ai placé xmodmap ~ / .Xmodmap dans .xinitrc Et puis, à l'intérieur de .Xmodmad, j'ai le code clé 166 =
Code clé
.xinitrc ne semble plus se lancer automatiquement dans Ubuntu 17.10. Vous devrez le lancer automatiquement avec cette commande: / bin / bash -c "sleep 15 && /home/USERNAME/.xinitrc"
thebunnyrules
9

J'utilise ElementaryOS (avec son gestionnaire de fenêtres basé sur GNOME) et j'ai trouvé une solution en utilisant des xdgscripts à démarrage automatique. De nombreux gestionnaires de fenêtres utilisent xdg, donc je suppose que cette approche fonctionnera également dans d'autres environnements. Au moins, cela devrait fonctionner avec GNOME.

xdg exécute des scripts lors ~/.config/autostartde la connexion à une session X. Pour charger la configuration xmodmap lors de la connexion, ajoutez le script suivant à~/.config/autostart/xmodmap.desktop :

[Desktop Entry]
Name[en_US]=Xmodmap
Comment[en_US]=xmodmap ~/.Xmodmap
Exec=/usr/bin/xmodmap .Xmodmap
Icon=application-default-icon
X-GNOME-Autostart-enabled=true
Type=Application

Ensuite, déconnectez-vous et reconnectez-vous, et votre configuration Xmodmap aurait dû être chargée.

Si cela ne fonctionne pas, essayez de lancer xmodmap dans terminal pour voir si c'est xmodmap qui se plaint:

$ xmodmap ~/.Xmodmap

Si vous n'obtenez aucune erreur, exécutez la commande suivante pour déboguer:

$ sudo cat /var/log/syslog | grep -B 5 -A 5 xmodmap
kontrollanten
la source
Sous Linux Mint 17 (basé sur: Ubuntu 14.04.5), l’approche de démarrage automatique a parfaitement fonctionné pour moi après l’ ~/.xinitrcéchec de l’ utilisation d’un fichier. Comme hxpax l’a souligné, les utilisateurs de Mint (probablement la plupart / tous les Linux dérivés de Debian) peuvent utiliser une boîte de dialogue graphique pour ajouter des entrées de démarrage automatique Main Menu --> Preferences --> Startup Applications.
Matte
2
Ubuntu a travaillé 18.04
TooTone
2

Je n'ai pas l'interface de l'unité devant moi en ce moment, mais essayez de cliquer sur le bouton Applications du lanceur, puis tapez démarrage. Il devrait exister une application appelée Applications de démarrage (ou une application similaire). Cliquez dessus et ajoutez votre commande xmodmap (par exemple xmodmap /home/thiago/.Xmodmap).

djeikyb
la source
J'ai essayé cela il y a quelque temps, mais cela n'a pas fonctionné pour moi. Je suis sur Windows en ce moment, mais je réessayerai plus tard et je signale ici si cela fonctionne. Merci
Thiago Moraes le
2
@Thiago Moraes Cette commande de base fonctionne-t-elle (sinon, affichez l'erreur)? xmodmap .Xmodmap
djeikyb
+1 cela fonctionne. Pour être plus explicite, j'ai utilisé le chemin complet pour .Xmodmap
pwned
3
cela ne fonctionne pas. J'utilise 16.04
miguelmorales85
@ miguelmorales85 la commande de base fonctionne-t-elle dans votre terminal? Avez-vous essayé d'utiliser un chemin absolu?
djeikyb
2

À la Monnaie 17/18, je peux y parvenir, mais mes scripts sont intégrés à l’application de démarrage, avec un délai de 1 seconde.

Comme Mint 18 est dérivé d’Ubuntu 1604, je pense que vous pouvez en faire de même ou installer d’abord le panneau de gestion de Startup Application s’il n’y est pas.

J'espère que ça aide.

hxpax
la source
+1 fonctionne bien. Je n’avais besoin d’aucun délai sur Linux Mint 17.
Mattst
@attend Ouais, le retard est facultatif.
hxpax
J'ai eu besoin d'un délai de 5 secondes pour que cela fonctionne. J'ai donc utilisé le script de démarrage suivant: gist.github.com/ghagerer/58212241e37229f9d6fe3a133b34be97
Gerhard Hagerer
0

Aucune des suggestions ci-dessus ne me réjouissait (l'option .bashrc n'était pas vraiment viable, car elle utilise xmodmap sur chaque nouveau terminal)

J'ai touché un script appelé xmodstartup.shdans mon dossier personnel

  #!/bin/bash           
  sleep 1;               
  echo "running xmodmap" 
  xmodmap ~/.Xmodmap     

avec cela sauvé, j'ai ensuite fait sudo chmod +x xmodstartup.sh

puis j'ai simplement ajouté le fichier exécutable à la fenêtre "Préférences de l'application de démarrage" de gnome. bish bosh, mise en page anglaise et Español on altgr:)

Jay Edwards
la source
-1

Mettre xmodmap change ~/.bashrcou /etc/bash.bashrcne casse rien.

Le seul inconvénient est qu'il faut ouvrir un terminal après chaque démarrage pour l'activer.

Rasmus
la source
3
Je le fais déjà, mais le problème est que sur chaque terminal que j'ouvre, cette commande est exécutée. Ce n'est qu'un moment, mais c'est un peu agaçant et je préférerais une vraie solution. merci quand même
Thiago Moraes