Xmodmap permanente dans Ubuntu 13.04

72

Je ne peux pas exécuter xmodmap lors de la connexion dans Ubuntu 13.04. J'ai cherché autour, y compris dans askubuntu et toutes les réponses que j'ai trouvées ne fonctionnent pas.

J'ai un fichier nommé .Xmodmap dans mon dossier personnel qui contient les mappages souhaités. Si je le lance manuellement, cela fonctionne bien, il n'y a donc pas d'erreur. Afin de le faire fonctionner au démarrage, j'ai essayé:

  1. Utilisation de divers .xinitrccontenant l’une des commandes suivantes:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. Utilisation .Xresourcesau lieu de .xinitrcavec les mêmes variations.

  3. Définir comme une application de démarrage.

Aucune de ces solutions ne fonctionne dans Ubuntu 13.04 (64 bits). J'ai également vu quelques idées sur la modification globale des mappages de clavier, mais la plupart d'entre elles n'étaient pas applicables dans Ubuntu 13.04 (les fichiers correspondants n'existaient pas là où ils étaient spécifiés) et je préfère de toute façon ne pas toucher aux paramètres globaux.

Alexander Karatarakis
la source

Réponses:

81

Ubuntu n'utilise plus xmodmap, mais utilise xkb(pour autant que je sache, cela facilite entre autres la disposition de clavier par fenêtre).

Les fichiers de carte du système sont en

/usr/share/X11/xkb/symbols/

Les cartes semblent être chargées hiérarchiquement, avec la pccarte en tant que racine et quelle que soit la langue (par exemple en) en tant qu'enfant de la racine.

Dans mon cas particulier, j'ai échangé physiquement Page Up avec Home et Page Down avec End sur mon clavier. J'ai donc apporté des modifications très grossières à la pccarte à l' échelle du système , comme suit:

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

REMARQUE: pour forcer Xorg à utiliser votre nouvelle carte de clavier, vous devrez peut-être supprimer les cartes pré-compilées existantes (* .xkm) dans

/var/lib/xkb/

puis redémarrez Xorg.

Il existe diverses ressources sur xkb, mais celle-ci est liée à Ubuntu.

Daniel
la source
9
Depuis Ubuntu 14.04, c’est malheureusement le moyen le plus simple d’échanger des clés. Vous POUVEZ faire exécuter xmodmap lors de la connexion en l'ajoutant aux applications de démarrage, mais si vous suspendez, mettez en veille prolongée, etc., vous devez le démarrer manuellement ou créer des scripts de démon de démarrage.
holocronweaver
Je peux remapper clés en fonction des modificateurs: unmodified shift altgr* shift+altgr. Mais qu'en est-il left altet super key?
Farzher
7
Je ne pense pas que votre première phrase est vraie. Avez-vous une source pour cela? J'ai du mal à croire que "la méthode Ubuntu" de remappage de vos touches serait l'édition des mappages de clavier xkb. En plus d'être crypté, cela pose le problème que vos cartes personnalisées sont supprimées lors de la xkbmise à jour.
Mateus Araújo
1
Ceci dit, c’est la seule méthode fiable que j’ai trouvée pour remapper des clés sur Ubuntu.
Mateus Araújo
1
Il doit y avoir un meilleur moyen. Je connais le code exact que je veux mapper, mais le code 217 n'est même pas répertorié dans xkb. Je ne vois même pas un moyen d'ajouter de nouveaux codes clés.
Jonathan
13

Pour moi, la configuration de xkb est trop compliquée si vous souhaitez remapper 1 ou 2 clés d’une manière non disponible dans les paramètres système. De plus, la solution doit rester du côté de l'utilisateur, sans éditer '/ usr / share / X11 / xkb / symboles /' etc. ou changez la disposition du clavier. Ainsi, comme Holocronweaver le suggère, avec des extraits de code que j'ai trouvés, j'ai créé un script python à charger au démarrage de la session, qui recharge le '~ / .Xmodmap' lorsque cela est nécessaire.

Vérifiez le rapport de bogue n ° 1243642 (commentaire n ° 6) et téléchargez-le ici .

dedalu
la source
1
Je travaille toujours à partir de 15h10 :-) Merci!
lalomartins
Le lien vers ce script légendaire semble être rompu. Quelqu'un pourrait le mettre sur github?
Epigene le
Réponse géniale - et seulement viable! Travailler dans 16.04. Pour que cela fonctionne dans Python3 modifié: "import gobject" à "depuis gi.repository import GObject as gobject".
Craig Hicks
1
@Epigene - le lien est là maintenant
Craig Hicks
Être prier! Un génie travaille autour.
dmanexe
6

J'ai eu ce problème dans Ubuntu 14.04 et j'ai trouvé la solution ici . Apparemment, Ubuntu n'est pas capable de configurer le clavier immédiatement après s'être connecté, mais c'est un peu plus tard. Donc si vous ajoutez une commande

sleep 4 && xmodmap ~/.Xmodmap &

pour ~/.bash_profileensuite il devrait fonctionner (il le fait pour moi).

EDIT: Cela semble fonctionner uniquement après la connexion, pas après le démarrage. Je devrai enquêter plus tard.

dremodaris
la source
1
Avez-vous de la chance en configurant cette option après susp / hibernate?
Jonathan
Non, malheureusement, je n'arrive toujours pas à le faire fonctionner après le démarrage. Donc, chaque fois que je démarre, j'ouvre un terminal et tapez xmodmap ~/.Xmodmap:(
dremodaris
sachez que sur Ubuntu 16.04, vous devez utiliser .profile
Vitor Abella
5

Convertir Caps Locken Escpour une vimutilisation

Voici ma variante d'un script de démarrage de mappage de clé. Il se transforme Caps Locken Escn'importe quel clavier pour une utilisation avec vi, vimou gvim.

Contrairement à la réponse de q4w56 , cette réponse n'utilise aucune while; doboucle infinie . Sinon, un noyau de mon processeur double cœur atteindrait 42% toutes les 5 secondes, ce qui réduirait considérablement la charge de la batterie de mon ordinateur portable.

#!/usr/bin/env bash
sleep 4
xmodmap -e "clear Lock"
xmodmap -e "keysym Caps_Lock = Escape"

Enregistrez-le en tant que script. Rendre le fichier exécutable avec chmod +x. Ajoutez le nom et l'emplacement du script à Session and Startup → Application Autostart(dans Xubuntu).

Le comportement du clavier pour cet utilisateur restera persistant lors du redémarrage et de la déconnexion, mais pas en suspension. La persistance par la suspension peut être obtenue , mais malheureusement uniquement au niveau du système, pas facilement au niveau de l'utilisateur.

Justification de ce remappage du clavier

Dans le monde informatique d'aujourd'hui, il reste très peu d'utilisation de la Caps Lockclé. En général, on devrait s'abstenir d'utiliser ALL CAPS en vertu de la nétiquette et de la séparation de la présentation et du contenu . De plus, le fait d'appuyer sur la Caps Locktouche lors de l'édition de texte vimn'est pas toujours immédiatement noté, mais entraîne invariablement un comportement plutôt gênant par vimla suite. Désactiver la Caps Lockclé dans son ensemble et la réaffecter comme une Escclé facile à atteindre donne un double gain vim.

Serge Stroobandt
la source
Remplacer la fonction de la Caps Lockclé pourrait être un véritable atout pour les vimutilisateurs de MacBook Apple sans Escclé .
Serge Stroobandt
3
Il vaut mieux remapper le capslockà ctrl. Cela résout beaucoup plus de problèmes, et dans Vim, vous pouvez utiliser capslock+ [pour EscDésolé pour ingérence, mais je me suis senti obligé de le suggérer.
user907860
En quoi consiste exactement suspendre? Est-ce que ça ferme le couvercle sur votre ordinateur portable? Après que votre solution ne fonctionne pas? Comment utilisez-vous vim après avoir fermé le couvercle de votre ordinateur portable?
Marko Avlijaš
@ MarkoAvlijaš How do you use vim after you close the lid on your laptop?En ouvrant le couvercle bien sûr!
Serge Stroobandt
Haha, je ne devinerais jamais ça. Je veux dire que le verrouillage des majuscules n'est plus configuré pour échapper après cela?
Marko Avlijaš
3

J'ai eu le problème aussi sur Ubuntu 16.04 avec fcitx, et j'avais la solution sur le wiki fcitx , mais il faut que fcitx soit à la version 4.2.7 ou ultérieure.

  • touch ~/.Xmodmap
  • écrire la config
  • redémarrez et le fcitx essaiera de le charger automatiquement

Il y a aussi une explication pour la raison.

Bluethon
la source
1
Bien que cela puisse théoriquement répondre à la question, il serait préférable d’inclure ici les parties essentielles de la réponse et de fournir le lien à titre de référence.
Videonauth
@Videonauth J'ai modifié ma réponse
Bluethon
Merci beaucoup :) Je laisse mon commentaire ici pour que les personnes en attente de commentaires puissent vous voir changer quelque chose.
Videonauth
@Videonauth c'est ma première réponse et je suis pauvre en anglais, alors j'ai commis une faute. et merci pour vos conseils. : P
Bluethon
Je vous en prie. Fournir des réponses est un bon moyen de contribuer à la communauté.
Videonauth
3

@ La réponse de Daniel m'a indiqué la bonne voie, mais j'aimerais m'étendre sur celle-ci.

Fonctionne pour moi sur Linux Mint 17.2 et Ubuntu 16.04.

J'ai essayé tous les tours que je pouvais penser à continuer à utiliser xmodmap, mais ils échouent tous lorsque le système passe en mode veille. Il en va de même pour les scripts d’application de démarrage utilisés setxkbmapdans les cas où le * settings-daemon (pour moi c’est xfce4) est exécuté plus tard que le script - et que l’ordre ne peut pas vraiment être influencé.

Ce que j'ai finalement trouvé contient les ingrédients suivants:

1) Écrivez un fichier de correspondance de clavier minimal pour /usr/share/X11/xkb/symbols. Permet d’appeler le fichier. mylayoutCela peut être aussi simple que

xkb_symbols "basic" {
  name[Group1] = "My Layout";
  include "us"
  key <AE03> { [ 3, numbersign, sterling, sterling] };
  include "level3(ralt_switch)"
}
  • basic est juste un nom, nous le retrouverons plus tard.
  • De name[Group1]même, semble-t-il, mais il ne jouera aucun rôle plus tard.
  • include "us"comprend le clavier américain. En fait usest un autre fichier dans le même répertoire. C'est la disposition du clavier que nous adaptons. Choisissez-en un autre selon vos besoins. Remarque: pas de point-virgule pour terminer cette ligne.
  • La keyligne est une adaptation du clavier, d'autres peuvent suivre. Le <AE03>peut être trouvé dans les fichiers sous /usr/share/X11/xkb/keycodes. Utilisez le xevprogramme pour déterminer que la clé "3" a le code clé 12 et Xfree86qu'elle est mappée dans le fichier de codes clés <AE03>.
  • Enfin, une autre includedirective pour activer une autre option du clavier, dans ce cas, je souhaite que la touche Alt droite soit la touche Maj de niveau 3, c’est-à-dire la touche qui donne accès au sterlingsigne que j'ai défini ci-dessus. level3est juste un nom de fichier dans le même dossier avec ralt_switchune section de celui-ci. Regardez autour de vous et choisissez ce que vous devez inclure.

2) Je n'ai pas mis le mylayoutdans le dossier système. Au lieu de cela, je n’ai créé qu’un lien symbolique du dossier système vers un dossier de mon choix pour constater immédiatement qu’il ne s’agissait pas d’un logiciel standard.

3) De plus, je n'ai pas corrigé evdev.xml, encore une fois pour éviter les tracas de mise à jour. Mais cela serait nécessaire pour trouver mylayout dans l'éditeur de configuration du clavier (pour xfce4, c'est le cas xfce4-keyboard-settings). Au lieu de cela, j'ai utilisé xfce4-settings-editoret changé keyboard-layout->XkbLayouten mylayout(nom du fichier) et XkbVarianten basic(voir ci-dessus). Ensuite, mylayout/basics'affiche également dans l'éditeur de configuration du clavier. Une entrée dans evdev.xmlsemble être seulement nécessaire pour pouvoir sélectionner la mise en page.

De cette façon, les paramètres du clavier survivent maintenant au mode veille et redémarrent.

Plus de fond peut être trouvé ici: http://www.charvolant.org/~doug/xkb/html/node5.html .

Une autre approche pour résoudre le problème du mode veille (non testé par moi-même) peut être trouvée ici: https://www.vinc17.net/unix/xkb.en.html .

UPDATE: a travaillé avec Mint 18.3 au même moment où j'ai modifié les paramètres dans xfce4-settings-editor comme décrit ci-dessus.

UPDATE: Avec 18.04, gdm3 en tant que gestionnaire d'affichage et XFCE4 en tant que gestionnaire de fenêtres, il semble que ~ / .Xmodmap soit relu et les paramètres semblent survivre à une suspension. (J'utilise rarement suspendre et je ne suis jamais sûr du mode d'utilisation du portable alors).

Harald
la source
2

RÉVISION

Une mise à jour au début de 2018 a mis fin à la persistance - rechargement automatique du mappage de clavier après une suspension ou une mise en veille prolongée. Depuis que les méthodes utilisant les scripts /etc/pm/sleep.d ont cessé de fonctionner (obsolète?), Il ne reste que la manière la plus récente, en utilisant / lib / systemd / system-sleep et des scripts légèrement différents (qui ont commencé à fonctionner sur des keymaps!).

Donc, cet article est mis à jour avec la méthode la plus récente pour la persistance et pour inclure le chargement normal du keymap initial, qui a également commencé à fonctionner. La routine de conversion d'un fichier .Xmodmap en .xkbmap reste inchangée.

Notez qu'il s'agit d'une solution par utilisateur. Pour une réponse par périphérique, voir comment appliquer une mappe de clavier à un seul périphérique . Cette méthode pourrait être adaptée pour être utilisée ici.

Commencez par modifier le fichier .Xmodmap comme vous le souhaitez. Celles-ci sont plus faciles à modifier directement que les fichiers .xkbmap. Quand il est chargé:

xmodmap .Xmodmap

puis convertissez-les en un fichier .xkb:

xkbcomp $ DISPLAY $ HOME / .xkbmap

Pour charger automatiquement au démarrage, ouvrez Applications de démarrage, cliquez sur Ajouter et, dans la ligne de commande, entrez:

xkbcomp /home/user/.xkbmap ": 0"

("utilisateur" est remplacé par le nom d'utilisateur actuel.) Pour Nom, entrez éventuellement Charger la carte du clavier. Ajoutez un commentaire si vous le souhaitez et cliquez sur Enregistrer.

Le clavier se chargera désormais à chaque démarrage du système, mais ne survivra pas à une suspension ou une veille prolongée. Pour cela, créez un nouveau fichier dans / lib / systemd / system-sleep, éventuellement nommé 60_xkbmap, qui contient:

#!/bin/sh
case $1/$2 in
  pre/*)
    # Place pre-suspend commands here
    exit 0
    ;;
  post/*)
    # Place post-suspend commands here
    export DISPLAY=":0"
    export XAUTHORITY="/home/user/.Xauthority"
    su user -c "xkbcomp /home/user/.xkb/xkb-map $DISPLAY 2>/dev/null"
    ;;
esac

( Réf. ) Comme ci-dessus, remplacer "utilisateur" par le nom d'utilisateur actuel.

Le clavier devrait maintenant se charger automatiquement et rester persistant. Remarque:

  • S'applique à la version 16.04 de LTS actuelle et probablement également aux versions ultérieures.
  • Tiré de l' article 14 du sujet de bogue lié ci-dessus.
  • Les commentaires précédents s'appliquaient au message original.
u2n
la source
J'essaie cette méthode maintenant et maintenant, lorsque je démarre un terminal, je reçois une série de messages comme suit: Avertissement: aucun symbole défini pour <AB11> (code clé 97) Avertissement: aucun symbole défini pour <JPCM> (code clé 103) Avertissement: Aucun symbole défini pour <I120> (code de touche 120) ...... beaucoup d'autres ne savent pas quelles en seront les conséquences. Quelqu'un sait?
bébé perdu
Cette méthode, malgré les avertissements mentionnés ci-dessus, ne fonctionne que temporairement - au bout d'un moment, la correspondance est oubliée et la super clé revient à sa fonction par défaut. Je vais donc essayer en sens inverse: je remapperai les raccourcis d'édition de base sur mon mac pour utiliser la touche Contrôle au lieu de la touche Commande et voir si cela fonctionne. Je veux juste que mes commandes couper-copier-coller-annuler-répéter soient les mêmes sur Mac et Ubuntu. Je suis très frustré lorsque le menu de recherche apparaît sur Ubuntu à chaque fois que j'essaie de copier ou de coller quelque chose.
bébé perdu
1

Cela m'a aussi fait trébucher lorsque j'ai mis à jour Ubuntu 12.04 à 13.04.

Heureusement, ce paramètre est maintenant (ou a peut-être toujours été) facilement accessible dans les préférences Clavier et peut être modifié en quelques clics de souris.

  1. Allez dans Paramètres système > Disposition du clavier > Options ...
  2. Dans les options de disposition du clavier, cliquez sur la flèche pour afficher les options de position de la touche Ctrl .
  3. Cochez la case Swap Ctrl and Caps Lock .

Voilà: le contrôle gauche et le verrouillage majuscule ont changé de position.

N'oubliez pas de supprimer ~/.Xmodmapune fois que vous avez effectué le changement.

glts
la source
Cela a peut-être été voté parce que cela ne traitait pas de xmodmap, mais c’est en fait ainsi que j’ai découvert que l’utilisation de Gnome Tweak était peut-être la raison pour laquelle certaines de mes mappages étaient étranges.
dragon788
Je ne vois pas cela dans 16.04, est-ce encore possible?
chrismarx
1
@chrismarx Non, ils l'ont enlevé. Je mets aujourd'hui (16,04) XKBOPTIONS="ctrl:swapcaps"dans /etc/default/keyboard.
Glts
0

Je trouve l’ajout de ce script au démarrage satisfaisant:

while true;do 
    xmodmap -e "keycode 87=Prior"
    xmodmap -e "keycode 88=Next"
    sleep 5
done

J'ai essayé d'utiliser xmodmap ./Xmodmap, mais chaque fois qu'il est exécuté, un retard notable se produira.

Golopot
la source
4
L'utilisation de toute while; doboucle infinie devrait être évitée. Un cœur de mon processeur double cœur a atteint 42% toutes les 5 secondes, réduisant considérablement la charge de la batterie de mon ordinateur portable!
Serge Stroobandt