xmodmap permanente dans Ubuntu 13.04

63

Je ne peux pas faire fonctionner xmodmap lors de la connexion à Ubuntu 13.04. J'ai fait des recherches, 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 l'exécute manuellement, cela fonctionne bien, il n'y a donc pas d'erreur. Afin de 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. Utiliser .Xresources au lieu de .xinitrc avec les mêmes variantes.

  3. Configuration comme application de démarrage.

Aucune des solutions ci-dessus 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 eux 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 ne pas toucher aux paramètres globaux.

    
posée Alexander Karatarakis 27.07.2013 - 14:37
la source

9 réponses

71

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

Les fichiers cartographiques à l’échelle du système se trouvent dans

/usr/share/X11/xkb/symbols/

La carte semble être chargée hiérarchiquement, avec pc map comme 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 with End sur mon clavier. J'ai donc apporté des modifications très grossières à la carte pc , comme suit:

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

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

/var/lib/xkb/

puis redémarrez Xorg.

Il existe différentes ressources sur xkb , mais celui-ci est lié à Ubuntu.

    
réponse donnée Daniel 19.09.2013 - 09:08
la source
12

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

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

    
réponse donnée dedalu 21.08.2014 - 16:58
la source
5

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

sleep 4 && xmodmap ~/.Xmodmap &

à ~/.bash_profile alors ça devrait marcher (ça me convient).

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

    
réponse donnée dremodaris 11.09.2014 - 17:45
la source
3

Convertir Verrouillage des majuscules dans Esc pour vim use

Voici ma variante d’un script de démarrage de mappage de clé. Il convertit Caps Lock dans Esc sur n'importe quel clavier pour une utilisation avec vi , vim ou gvim .

Contrairement à la réponse de q4w56 , cette réponse n’utilise aucune boucle while; do infinie. Sinon, un noyau de mon processeur dual core atteindrait 42% toutes les 5 secondes, ce qui réduirait considérablement la charge de la batterie de mon portable.

#!/bin/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 grâce au redémarrage et à la déconnexion, mais pas à la suspension. La persistance via la suspension peut être obtenue , mais malheureusement uniquement au niveau du système, pas facilement au niveau de l'utilisateur.

Justification de cette reconfiguration du clavier

Dans le monde informatique d’aujourd’hui, il reste très peu de place pour la clé Caps Lock . En règle générale, il convient de ne pas utiliser TOUS LES CAPS en vertu des deux netiquette et la séparation de la présentation et du contenu . De plus, si vous appuyez accidentellement sur la touche Caps Lock lorsque vous modifiez du texte avec vim , cela n'entraîne pas toujours un comportement ennuyeux vim . Désactiver la clé Caps Lock et la réutiliser comme une clé Esc facile à atteindre entraîne un double gain pour vim use.

    
réponse donnée Serge Stroobandt 16.04.2016 - 23:22
la source
3

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

  • touch ~/.Xmodmap
  • écris la configuration
  • redémarre et le fcitx va essayer de le charger automatiquement

Il y a aussi des explications pour la raison.

    
réponse donnée Bluethon 08.06.2016 - 09:35
la source
3

@ La réponse de Daniel m'a bien orienté, mais j'aimerais y revenir.

Fonctionne pour moi sur Linux Mint 17.2 et Ubuntu 16.04.

J'ai essayé tous les twists auxquels je pouvais penser pour 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 qui utilisent setxkbmap dans les cas où le démon * settings (pour moi c’est xfce4) est exécuté plus tard que le script --- et l’ordre ne peut pas vraiment être influencé.

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

1) Ecrivez un fichier de mappage de clavier minimal pour /usr/share/X11/xkb/symbols . Appelons le fichier mylayout Cela 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 n'est qu'un nom, nous le rencontrerons plus tard.
  • De même, name[Group1] n'est qu'un nom, mais il ne jouera aucun rôle plus tard.
  • include "us" inclut le clavier simple us. En fait, us est un autre fichier dans le même répertoire. C'est la disposition du clavier que nous adaptons. Choisissez un autre si nécessaire. Note: pas de point-virgule pour terminer cette ligne.
  • La ligne key 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 programme xev pour comprendre que la touche "3" a le code clé 12 et que dans le fichier de codes clés Xfree86 , elle est mappée sur <AE03> .
  • Enfin une autre directive include pour activer une autre option de clavier, dans ce cas je veux avoir la bonne touche Alt pour être la touche de changement de niveau 3, c'est-à-dire la clé donnant accès au signe sterling que j'ai défini au dessus. level3 est juste un nom de fichier dans le même dossier avec ralt_switch une section de celui-ci. Regardez autour de vous et choisissez ce que vous devez inclure.

2) Je n'ai pas placé le mylayout dans le dossier système. Au lieu de cela, je n’ai fait qu’un lien logiciel entre le dossier système et un dossier de mon choix pour voir immédiatement que ce n’est pas un logiciel de base.

3) En outre, je n'ai pas corrigé% c_de% pour éviter les problèmes de mise à jour. Mais il serait nécessaire de trouver mylayout dans l'éditeur de configuration du clavier (pour xfce4, il s'agit de evdev.xml ). Au lieu de cela, j'ai utilisé xfce4-keyboard-settings et changé xfce4-settings-editor en keyboard-layout->XkbLayout (le nom du fichier) et mylayout en XkbVariant (voir ci-dessus). Par la suite, basic est également affiché dans l'éditeur de paramètres du clavier. Une entrée dans mylayout/basic semble être seulement nécessaire pour pouvoir sélectionner la mise en page.

De cette manière, les paramètres du clavier survivent désormais au mode veille et au redémarrage.

Vous trouverez plus d’arrière-plan ici: lien .

Une autre approche pour résoudre le problème du mode veille (pas essayé moi-même), peut être trouvée ici: lien .

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

    
réponse donnée Harald 06.11.2016 - 13:09
la source
2

REVISION

Une mise à jour au début de 2018 a brisé la persistance - le rechargement automatique de la keymap après suspension ou mise en veille prolongée. Puisque les méthodes utilisant les scripts /etc/pm/sleep.d ont cessé de fonctionner (obsolète?), Il ne restait que la méthode la plus récente, à savoir / lib / systemd / system-sleep et des scripts légèrement différents (qui ont commencé à fonctionner sur les keymaps!). p>

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

Notez qu'il s'agit d'une solution par utilisateur. Pour une réponse par périphérique, consultez comment appliquer un keymap à 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. Ce sont plus faciles à éditer directement que les fichiers .xkbmap. Quand il est chargé:

  

xmodmap .Xmodmap

puis convertir en fichier .xkb:

  

xkbcomp $ DISPLAY $ HOME / .xkbmap

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

  

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

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

La keymap se charge à 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 / 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 "utilisateur" par le nom d'utilisateur actuel.

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.
  • Extrait du post 14 du thread de bogue ci-dessus.
  • Commentaires antérieurs appliqués à la publication originale.
réponse donnée u2n 08.12.2016 - 05:16
la source
0

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

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

  1. Accédez à Paramètres système & gt; Disposition du clavier & gt; Options ...
  2. Dans les options de disposition du clavier, cliquez sur la flèche pour afficher les options key Ctrl .
  3. Cochez la case Permuter Ctrl et Verrouiller les majuscules .

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

N'oubliez pas de supprimer ~/.Xmodmap une fois la modification effectuée.

    
réponse donnée glts 05.10.2013 - 14:27
la source
0

Je trouve que l'ajout de ce script au démarrage est 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.

    
réponse donnée golopot 23.10.2014 - 13:29
la source

Lire d'autres questions sur les étiquettes