web-dev-qa-db-fra.com

Xmodmap permanente dans Ubuntu 13.04

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 .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. 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 (c'est-à-dire que 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.

71

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

Les fichiers de carte du système sont en

/usr/share/X11/xkb/symbols/

Les mappes semblent être chargées hiérarchiquement, avec la mappe pcen tant que racine et quelle que soit la langue (par exemple, enname__) 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 mappe pcà 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.

xkbcontient diverses ressources, mais celui-ci est lié à Ubuntu.

80
Daniel

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é 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 les rapport de bogue # 1243642 (commentaire n ° 6), et téléchargez-le ici .

12
dedalu

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 &

~/.bash_profile alors ça devrait marcher (ça marche pour moi).

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

6
dremodaris

Convertir Caps Lock dans Esc pour vimutiliser

Voici ma variante d'un script de démarrage de mappage de clé. Il convertit Caps Lock dans Esc sur n'importe quel clavier à utiliser avec viname__, vimou gvimname__.

Contrairement à la réponse de q4w56 , cette réponse n'utilise aucune boucle infinie while; do. 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 (sous 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 le biais de la suspension peut être réalisée , 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 pour le Caps Lock clé. En général, on devrait s'abstenir d'utiliser ALL CAPS en vertu des deux netiquette et la séparation de la présentation et du conten . De plus, frapper accidentellement le Caps Lock lorsque vous modifiez du texte avec vimn’est pas toujours immédiatement noté, mais il en résulte invariablement un comportement plutôt ennuyant vim. Désactiver le Caps Lock clé tous ensemble et le réaffecter comme un facile à atteindre Esc key entraîne un double gain pour vimuse.

5
Serge Stroobandt

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

Fonctionne pour moi sur Linux Mint 17.2 et Ubuntu 16.04.

J'ai essayé tous les tournants auxquels je pouvais penser en utilisant toujours xmodmapname__, 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 utilisant setxkbmapdans les cas où le * settings-daemon (pour moi c’est xfce4) est postérieur au script --- et où 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 mylayoutname__. 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)"
}
  • basicest juste un nom, nous le retrouverons plus tard.
  • De même, le name[Group1] n'est qu'un nom, mais il ne jouera aucun rôle plus tard.
  • include "us" inclut le clavier standard américain. En fait, usest un autre fichier du 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 ligne keyest une adaptation du clavier, d'autres peuvent suivre. Le <AE03> se trouve dans les fichiers sous /usr/share/X11/xkb/keycodes. Utilisez le programme xevpour déterminer que la clé "3" a le code clé 12 et que, dans le fichier de codes clés Xfree86, il est mappé à <AE03>.
  • Enfin, une autre directive includepour 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 signe sterlingque j’ai défini ci-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) J'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 goût pour constater immédiatement qu’il ne s’agissait pas d’un logiciel standard.

3) En outre, j’ai pas corrigé evdev.xml, encore une fois pour éviter les tracas liés à la mise à jour. Mais cela serait nécessaire pour trouver mylayout dans l'éditeur de configuration du clavier (pour xfce4, il s'agit de xfce4-keyboard-settings). Au lieu de cela, j'ai utilisé xfce4-settings-editor et changé keyboard-layout->XkbLayout en mylayout(le nom du fichier) et XkbVarianten basic(voir ci-dessus). Ensuite, mylayout/basic s'affiche également dans l'éditeur de configuration du clavier. Une entrée dans evdev.xml ne semble être nécessaire que 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 essayé 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 pour survivre à une suspension. (J'utilise rarement suspendre et je ne suis jamais sûr du mode d'utilisation du portable alors).

3
Harald

J'ai eu le problème aussi sur Ubuntu 16.04 avec fcitx, et j'avais la solution sur le wiki de 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.

3
Bluethon

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 méthode 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 va maintenant se charger à 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

( Ref. ) 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 post 14 du fil de bogue lié ci-dessus.
  • Les commentaires précédents s'appliquaient au message original.
2
u2n

Cela m'a également 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 à 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 touche Ctrl.
  3. Cochez la case à Permuter Ctrl et Verrouillage Majuscule.

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

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

1
glts

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 décalage perceptible se produira.

0
golopot