90 votes

xmodmap permanent dans Ubuntu 13.04

Je n'arrive pas à faire en sorte que xmodmap s'exécute à la connexion dans Ubuntu 13.04. J'ai cherché partout, 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 mappings souhaités. Si je l'exécute manuellement, il fonctionne bien, il n'y a donc pas d'erreur. Pour le faire fonctionner au démarrage, j'ai essayé :

  1. En utilisant divers .xinitrc contenant l'une des commandes suivantes :

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

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

Aucune des solutions ci-dessus ne fonctionne dans Ubuntu 13.04 (64 bits). J'ai également vu quelques idées pour modifier globalement les mappages de clavier, mais la plupart d'entre elles n'étaient pas applicables dans Ubuntu 13.04 (c'est-à-dire que les fichiers correspondants n'existaient pas à l'endroit spécifié) et je préfère de toute façon ne pas toucher aux paramètres globaux.

3voto

Bluethon Points 133

J'ai eu le problème aussi sur Ubuntu 16.04 avec fcitx, et j'ai eu la solution sur la wiki fcitx mais il faut que fcitx ait 4.2.7 ou plus.

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

Il y a aussi une explication à cette raison.

3voto

Lynn Rose Points 1

RÉVISION

Une mise à jour de début 2018 a cassé la persistance -- le rechargement automatique de la keymap après une suspension ou une hibernation. Puisque les méthodes utilisant /etc/pm/sleep.d scripts ont cessé de fonctionner (dépréciées ?), il ne restait que la nouvelle méthode, utilisant /lib/systemd/system-sleep et des scripts légèrement différents (qui ont commencé à fonctionner sur les keymaps !).

Ce post est donc mis à jour pour la nouvelle méthode de persistance, et pour inclure le chargement initial normal de la keymap, qui a également commencé à fonctionner. La routine pour convertir un fichier .Xmodmap en .xkbmap reste inchangée.

Notez qu'il s'agit d'une solution par utilisateur. Pour une réponse par dispositif, voir Comment appliquer un keymap à un seul appareil ? . Cette méthode pourrait être adaptée pour être utilisée ici.

Modifiez d'abord le fichier .Xmodmap comme vous le souhaitez. Ces fichiers sont plus faciles à modifier directement que les fichiers .xkbmap. Lorsqu'il est chargé :

xmodmap .Xmodmap

puis convertir en un fichier .xkb :

xkbcomp $DISPLAY $HOME/.xkbmap

Pour un chargement automatique au démarrage, ouvrez Applications de démarrage, cliquez sur Ajouter, et entrez dans la ligne de commande :

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

("utilisateur" est remplacé par le nom d'utilisateur réel.) Pour le nom, entrez peut-être Load Keyboard Map. Ajoutez un commentaire si vous le souhaitez et cliquez sur Enregistrer.

Le keymap se chargera désormais à chaque démarrage du système, mais ne survivra pas à une suspension ou à une mise en veille prolongée. Pour cela, créez un nouveau fichier dans /lib/systemd/system-sleep, peut-être 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, remplacez "user" par le nom d'utilisateur réel.

Le keymap devrait maintenant se charger automatiquement et rester persistant. Note :

  • S'applique à la version LTS actuelle, 16.04, et probablement aux versions ultérieures.
  • Tiré de poste 14 du fil de discussion sur les bugs mentionné ci-dessus.
  • Les commentaires précédents ont été appliqués au message original.

2voto

Sujit Kumar Singh Points 121

Étapes mentionnées dans la réponse acceptée(également décrites aquí ) est une solution persistante, mais n'a pas fonctionné pour moi en cas de modification des clés alphabétiques.

Si vous avez été frustré en essayant d'autres options ou si vous voulez gagner du temps, essayez les étapes mentionnées dans l'article. https://medium.com/@saplos123456/persistant-keyboard-mapping-on-ubuntu-using-xmodmap-cd01ad828fcd

  1. Faites une nouvelle copie de xmodmap .

    xmodmap -pke > .Xmodmap

  2. Editez le nouveau fichier en utilisant la commande suivante et modifiez le(s) code(s) clé(s) selon vos besoins.

    gedit .Xmodmap

  3. Activez ces changements. Les nouveaux changements devraient être pris en compte après cela.

    xmodmap .Xmodmap

  4. Étape à sauter - Générer un fichier xkb avec une nouvelle cartographie

    xkbcomp $DISPLAY $HOME/.xkbmap

  5. Tous les changements ci-dessus sont temporaires et seront remplacés lors du redémarrage. Créez un programme de démarrage pour déclencher la commande suivante

    xkbcomp /home/user/.xkbmap ":0" // if you followed the 4th step OR xmodmap .Xmodmap // if you skipped the 4th step

1voto

glts Points 119

Cela m'a également fait trébucher lorsque j'ai effectué la mise à niveau d'Ubuntu 12.04 vers 13.04.

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

  1. Ir a Paramètres du système > Disposition du clavier > Options...
  2. Dans les Options de disposition du clavier, cliquez sur la flèche pour faire apparaître l'écran d'accueil. Position de la touche Ctrl options.
  3. Cochez la case à Intervertir Ctrl et Caps Lock .

Et voilà : Le contrôle gauche et le verrouillage des majuscules ont changé de position.

N'oubliez pas de supprimer ~/.Xmodmap une fois que vous avez fait le changement.

1voto

Christian Stieber Points 7021

La plupart des autres solutions chargent xmodmap au démarrage de la session (ou avant), mais vos paramètres sont ensuite effacés lorsque vous branchez un nouveau clavier (ou changez votre commutateur KVM). Voici une solution qui réinstalle le xmodmap après avoir branché un périphérique USB. Je l'utilise depuis que Linux a introduit toute la confusion Alt/Meta (vers 2006).

! ~/.Xmodmap file
!
! Part 1 (since about 2006)

! Avoid BadValue (TODO: debug why we get BadValue otherwise)
clear mod1
clear mod4

! Actually, my keyboard doesn't have 0xcc/0xcd keys, thank you...
keycode 0xcc = NoSymbol
keycode 0xcd = NoSymbol

! mod3 is Alt. I'm sure this is documented somewhere.
! It works that way in every program!
add mod3 = Alt_L
add mod3 = Alt_R

! In addition to Alt keys, my keyboard has ... drumroll ... *Windows* keys!
! These are *Meta* keys. Say, in Windows web browsers.
!   Don't take my word for it, hit F12 and type:
!   onkeydown = function(e){console.log(e);}
! And, um, Alt is already taken, so obviously Meta = Windows key.
! Also Windows keys = Meta in some FreeBSD distros out of the box.
! Is Windows keys = Meta not clear to someone, or is someone just being annoying
! with all this "Alt = Meta" garbage?
keycode 0x85 = Meta_L
keycode 0x86 = Meta_R

! No, mod1 is not Alt!
! In every program, mod1 is actually meta!
add mod1 = Meta_L
add mod1 = Meta_R
remove mod1 = Alt_L
remove mod1 = Alt_R

! Part 2 (since about 2015)
! What is going on?? USB thinks it can just wipe my xmodmap???
!
! 1. Locate xkb rulefile using
!
!   udevadm control --log-priority=info
!
!
! It will be something like
!
!    /lib/udev/rules.d/64-xorg-xkb.rules
!
!
! 2. Edit /lib/udev/rules.d/64-xorg-xkb.rules. Add:
!
!   RUN += "/big/usb_fix.sh"
!
! and do:
!
!   udevadm control --reload-rules
!
! note: using /big is intentional... on new Ubuntus, the system dies
! with "a start job is running..." in disk mounting. So we prevent this
! script from running ig /big is not mounted yet.
!
!
! 3. Create the /big/usb_fix.sh script:
!
! #!/bin/sh
! echo "xmodmap ~/.Xmodmap" >> /usr/local/usb_fix.log
!
! and make it executable.
! 
! 
! 4.
! mkfifo /usr/local/usb_fix.log 
! 
! 
! 5.
! Create a script (e.g. named ~/bin/usb_fix_client)
! 
! #!/bin/sh
! yes 'cat /usr/local/usb_fix.log | sh' | sh
! 
! and put this in your .xinitrc.

! Part 3 (since about 2018)
!
! Every now and then, apt-get can overwrite the xorg-xkb-rules?
! solution for now is turn off automatic updates.

Si vous l'avez configuré correctement, xmodmap devrait dire :

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Meta_L (0x85),  Meta_R (0x86)
mod2        Num_Lock (0x4d)
mod3        Alt_L (0x40),  Alt_R (0x6c)
mod4      
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Et voilà, vos clés méta et alt fonctionnent !

S'il est trop difficile de localiser et d'éteindre le logiciel qui écrase vos règles USB (pour moi, un logiciel vient et l'écrase environ deux fois par an), alors ajoutez simplement un RC script pour recopier vos règles USB. De plus, vous pouvez copier vos règles améliorées dans un fichier avec un plus grand nombre devant lui, pour qu'il prenne le dessus sur n'importe quelle autre mode qui viendra effacer votre xmodmap à l'avenir.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X