Permanente xmodmap in Ubuntu 13.04


72

Ich kann xmodmap bei der Anmeldung in Ubuntu 13.04 nicht zum Laufen bringen. Ich habe mich auch in askubuntu umgesehen und alle Antworten, die ich gefunden habe, funktionieren nicht.

Ich habe eine Datei namens .Xmodmap in meinem Home-Ordner, die die gewünschten Zuordnungen enthält. Wenn ich es manuell ausführe, funktioniert es einwandfrei, es liegt also kein Fehler vor. Um es beim Start zum Laufen zu bringen, habe ich versucht:

  1. Verwenden von verschiedenen, .xinitrcdie einen der folgenden Befehle enthalten:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. Verwenden Sie .Xresourcesstatt .xinitrcmit den gleichen Variationen.

  3. Festlegen als Startanwendung.

Unter Ubuntu 13.04 (64-Bit) funktioniert keines der oben genannten Verfahren. Ich habe auch ein paar Ideen zum globalen Ändern der Tastaturzuordnungen gesehen, aber die meisten davon waren in Ubuntu 13.04 nicht anwendbar (dh die entsprechenden Dateien waren nicht vorhanden, wo angegeben), und ich bevorzuge es, die globalen Einstellungen trotzdem nicht zu berühren.

Antworten:


81

Ubuntu verwendet nicht mehr xmodmap, sondern xkb(soweit ich weiß, erleichtert dies unter anderem die Tastaturbelegung pro Fenster).

Die systemweiten Kartendateien befinden sich in

/usr/share/X11/xkb/symbols/

Die Maps scheinen hierarchisch geladen zu sein, mit der pcMap als Root und welcher Sprache auch immer (z. B. en) als Kind des Roots.

In meinem speziellen Fall habe ich meine Tastatur physisch gegen "Bild auf" mit "Start" und "Bild ab" mit "Ende" ausgetauscht, sodass ich sehr grobe Änderungen an der systemweiten pcZuordnung vorgenommen habe:

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

HINWEIS: Um Xorg zu zwingen, Ihre neue Tastaturzuordnung zu verwenden, müssen Sie möglicherweise die vorhandenen vorkompilierten Zuordnungen (* .xkm) in entfernen

/var/lib/xkb/

und starte dann Xorg neu.

Es gibt verschiedene Ressourcen xkb, aber diese beziehen sich auf Ubuntu.


9
Ab Ubuntu 14.04 ist dies leider der einfachste Weg, Schlüssel zu tauschen. Sie KÖNNEN xmodmap bei der Anmeldung ausführen lassen, indem Sie es zu den Startup-Anwendungen hinzufügen. Wenn Sie es jedoch anhalten, in den Ruhezustand versetzen usw., müssen Sie es manuell starten oder Startup-Daemon-Skripte erstellen.
Holocronweaver

Ich kann Tasten je nach Modifikatoren neu zuordnen: unmodified shift altgr* shift+altgr. Aber was ist mit left altund super key?
Farzher

7
Ich glaube nicht, dass dein erster Satz wahr ist. Hast du eine Quelle dafür? Es fällt mir schwer zu glauben, dass "die Ubuntu-Methode" zum Neuzuordnen Ihrer Tasten darin besteht, die Tastaturzuordnungen von zu bearbeiten xkb. Dies ist nicht nur kryptisch, sondern hat auch das Problem, dass Ihre benutzerdefinierten Karten gelöscht werden, wenn sie xkbaktualisiert werden.
Mateus Araújo

1
Das heißt, dies ist die einzige zuverlässige Methode, die ich gefunden habe, um Schlüssel auf Ubuntu neu zuzuordnen.
Mateus Araújo

1
Es muss einen besseren Weg geben. Ich kenne den genauen Schlüsselcode, den ich zuordnen möchte, aber der Schlüsselcode 217 ist nicht einmal in xkb aufgeführt. Ich sehe nicht einmal eine Möglichkeit, neue Schlüsselcodes hinzuzufügen.
Jonathan

13

Für mich ist die xkb-Konfiguration zu kompliziert, wenn Sie 1 oder 2 Tasten auf eine Weise neu zuordnen möchten, die in den Systemeinstellungen nicht verfügbar ist. Außerdem sollte die Lösung auf der Benutzerseite bleiben, ohne '/ usr / share / X11 / xkb / symbols /' usw. zu bearbeiten. Das Laden von 'xmodmap ~ / .Xmodmap' mit den Startup Applications funktioniert nur, bis Sie Benutzer aussetzen, ändern oder ändern Sie das Tastaturlayout. Wie Holocronweaver vorschlägt, habe ich mit den gefundenen Codefragmenten ein Python-Skript erstellt, das beim Start der Sitzung geladen wird und das bei Bedarf die '~ / .Xmodmap' neu lädt.

Überprüfen Sie den Fehlerbericht # 1243642 (Kommentar # 6) und laden Sie ihn hier herunter .


1
Arbeitet noch ab 15.10 :-) Danke!
Lalomartins

Die Verbindung zu diesem legendären Drehbuch scheint unterbrochen zu sein. Könnte jemand es auf Github setzen?
Epigene

Tolle - und einzig tragfähige - Antwort! Arbeiten am 16.04. Damit es in Python3 funktioniert, wurde Folgendes geändert: "import gobject" in "from gi.repository import GObject as gobject".
Craig Hicks

1
@Epigene - der Link ist jetzt da
Craig Hicks

Lob sei! Ein genialer Workaround.
dmanexe

6

Ich hatte dieses Problem in Ubuntu 14.04, und die Lösung gefunden hier . Anscheinend kann Ubuntu die Tastatur nicht sofort nach dem Einloggen konfigurieren, aber es ist ein bisschen später. Also, wenn Sie einen Befehl hinzufügen

sleep 4 && xmodmap ~/.Xmodmap &

bis ~/.bash_profiledann sollte es klappen (tut es bei mir).

BEARBEITEN: Dies scheint nur nach dem Einloggen zu funktionieren, nicht nach dem Starten. Ich muss das später untersuchen.


1
Haben Sie das Glück, dies nach dem Suspend / Hibernate auszuführen?
Jonathan

Nein, leider kann ich es nach dem Booten immer noch nicht zum Laufen bringen. Jedes Mal, wenn ich xmodmap ~/.Xmodmap
boote

Beachten Sie, dass Sie auf Ubuntu 16.04 .profile
Vitor Abella

5

Caps LockIn Esczur vimVerwendung umwandeln

Hier ist meine Variante eines Startskripts für die Tastenzuordnung. Es konvertiert Caps Lockin eine Escbeliebige Tastatur zur Verwendung mit vi, vimoder gvim.

Im Gegensatz zur Antwort von q4w56 verwendet diese Antwort keine while; doEndlosschleife. Andernfalls würde ein Kern meiner Dual-Core-CPU alle 5 Sekunden 42% erreichen, was die Akkuladung meines Laptops erheblich verringert.

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

Speichern Sie es als Skript. Machen Sie die Datei ausführbar mit chmod +x. Fügen Sie den Skriptnamen und den Speicherort zu Session and Startup → Application Autostart(in Xubuntu) hinzu.

Das Tastaturverhalten für diesen Benutzer bleibt während des Neustarts und der Abmeldung bestehen, wird jedoch nicht angehalten. Persistenz durch Suspend kann erreicht werden , aber leider nur auf Systemebene, nicht ohne weiteres auf Benutzerebene.

Begründung für dieses Tastatur-Remapping

In der heutigen Computerwelt wird der Caps LockSchlüssel kaum noch benötigt . Generell sollte man auf ALL CAPS verzichten, sowohl aufgrund der Netiquette als auch der Trennung von Präsentation und Inhalt . Darüber hinaus wird ein versehentliches Drücken der Caps LockTaste während des Bearbeitens von Text vimnicht immer sofort bemerkt, sondern führt ausnahmslos zu einem eher nervigen vimVerhalten . Wenn Sie den Caps LockSchlüssel insgesamt deaktivieren und ihn als leicht zu erreichenden EscSchlüssel wiederverwenden, erhalten Sie einen doppelten Gewinn vim.


Das Ersetzen der Funktion des Caps LockSchlüssels kann für vimBenutzer von Apple MacBooks ohne EscSchlüssel lebensrettend sein .
Serge Stroobandt

3
Es ist besser , neu zuordnen das capslockzu ctrl. Dies löst viele weitere Probleme, und in Vim können Sie capslock+ [for EscSorry zum Einmischen verwenden, aber ich fühlte mich verpflichtet, dies vorzuschlagen.
User907860

Was genau ist Suspend? Schließt das den Deckel Ihres Laptops? Danach funktioniert Ihre Lösung nicht mehr? Wie verwenden Sie vim, nachdem Sie den Deckel Ihres Laptops geschlossen haben?
Marko Avlijaš

@ MarkoAvlijaš How do you use vim after you close the lid on your laptop?Durch Öffnen des Deckels natürlich!
Serge Stroobandt

Haha, das würde ich nie erraten. Ich meine, die Feststelltaste ist danach nicht mehr auf ESC abgebildet?
Marko Avlijaš

3

Ich hatte das Problem auch unter Ubuntu 16.04 mit fcitx und hatte die Lösung im fcitx-Wiki , aber es muss fcitx 4.2.7 oder neuer haben

  • touch ~/.Xmodmap
  • Schreiben Sie die Konfiguration
  • neustarten und der fcitx versucht es automatisch zu laden

Es gibt auch eine Erklärung für den Grund.


1
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Videonauth

@Videonauth Ich habe meine Antwort geändert
Bluethon

Vielen Dank :) Ich hinterlasse meinen Kommentar hier noch, damit die Leute im Review-Cue sehen können, dass Sie etwas geändert haben.
Videonauth

@Videonauth das ist meine erste Antwort und ich kann kein Englisch, also habe ich ein paar Fehler gemacht. und danke für deinen rat. : P
Bluethon

Bitte. Antworten zu geben ist eine gute Möglichkeit, einen Beitrag zur Community zu leisten.
Videonauth

3

@ Daniels Antwort wies mich in die richtige Richtung, aber ich würde gerne darauf eingehen.

Funktioniert für mich unter Linux Mint 17.2 und Ubuntu 16.04.

Ich habe versucht, alle denkbaren Drehungen beizubehalten xmodmap, aber sie schlagen alle fehl, wenn das System in den Ruhezustand wechselt. Gleiches gilt auch für Start-Up-Anwendungsskripte, die setxkbmapin Fällen verwendet werden, in denen der * settings-Daemon (für mich ist es xfce4) später als das Skript ausgeführt wird - und die Reihenfolge kann nicht wirklich beeinflusst werden.

Was ich mir schließlich ausgedacht habe, hat die folgenden Zutaten:

1) Schreiben Sie eine minimale Tastaturzuordnungsdatei für /usr/share/X11/xkb/symbols. Rufen mylayoutwir die Datei auf. Es kann so einfach sein wie

xkb_symbols "basic" {
  name[Group1] = "My Layout";
  include "us"
  key <AE03> { [ 3, numbersign, sterling, sterling] };
  include "level3(ralt_switch)"
}
  • basic ist nur ein Name, wir sehen uns später wieder.
  • Das name[Group1]ist anscheinend nur ein Name, wird aber später keine Rolle mehr spielen.
  • include "us"Beinhaltet die normale US-Tastatur. Ist eigentlich useine andere Datei im selben Verzeichnis. Dies ist das Tastaturlayout, das wir anpassen. Wählen Sie nach Bedarf eine andere aus. Hinweis: Kein Semikolon zum Beenden dieser Zeile.
  • Die keyZeile ist eine Anpassung der Tastatur, weitere können folgen. Die <AE03>finden Sie in den Dateien unter /usr/share/X11/xkb/keycodes. Verwenden Sie das xevProgramm, um herauszufinden, dass der "3" -Schlüssel den Schlüsselcode 12 hat und in der Schlüsselcode-Datei zugeordnet Xfree86ist <AE03>.
  • Zum Schluss noch eine includeAnweisung, um eine andere Tastaturoption zu aktivieren. In diesem Fall möchte ich, dass die rechte Alt-Taste die Umschalttaste der Ebene 3 ist, dh die Taste, die den Zugriff auf das sterlingoben definierte Zeichen ermöglicht. level3ist nur ein Dateiname im selben Ordner mit ralt_switcheinem Abschnitt davon. Schauen Sie sich um und wählen Sie, was Sie aufnehmen möchten.

2) Ich habe nicht setzen die mylayoutin den Systemordner. Vielmehr habe ich nur einen Softlink vom Systemordner zu einem Ordner meiner Wahl erstellt, um sofort festzustellen, dass es sich nicht um eine Standard-Software handelt.

3) Weiter habe ich nicht repariert evdev.xml, um Probleme beim Update zu vermeiden. Dies wäre jedoch erforderlich, um mylayout im Tastaturkonfigurationseditor zu finden (für xfce4 ist dies der Fall xfce4-keyboard-settings). Stattdessen verwendete ich xfce4-settings-editorund geändert keyboard-layout->XkbLayoutzu mylayout(Dateiname) und XkbVariantzu basic(siehe oben). Anschließend mylayout/basicwird auch im Tastatureinstellungseditor angezeigt. Eine Eingabe in evdev.xmlscheint nur notwendig zu sein, um das Layout auswählen zu können.

Auf diese Weise überstehen die Tastatureinstellungen den Energiesparmodus und starten neu.

Weitere Hintergrundinformationen finden Sie hier: http://www.charvolant.org/~doug/xkb/html/node5.html .

Ein anderer Ansatz zur Behebung des Schlafmodus-Problems (ich habe es nicht selbst ausprobiert) ist hier zu finden: https://www.vinc17.net/unix/xkb.de.html .

UPDATE: arbeitete mit Mint 18.3 im selben Moment, als ich die Einstellungen im xfce4-settings-editor wie oben beschrieben änderte.

UPDATE: Mit 18.04, gdm3 als Anzeigemanager und XFCE4 als Fenstermanager sieht es so aus, als würde ~ / .Xmodmap erneut gelesen und die Einstellungen scheinen eine Unterbrechung zu überstehen . (Ich verwende nur selten suspend und bin mir nie sicher, in welchem ​​Modus sich der Laptop dann wirklich befindet.)


2

REVISION

Ein Update Anfang 2018 hat die Persistenz unterbrochen - das automatische Neuladen der Tastaturbelegung nach dem Suspendieren oder Ruhezustand. Da die Methoden, die /etc/pm/sleep.d-Skripte verwenden, nicht mehr funktionierten (veraltet?), Blieb nur die neuere Methode übrig, die / lib / systemd / system-sleep und etwas andere Skripte (die anfingen, an Keymaps zu arbeiten!).

Daher wird dieser Beitrag auf die neuere Methode aktualisiert, um die Persistenz zu gewährleisten und das normale Laden der anfänglichen Tastaturbelegung einzuschließen, die ebenfalls funktioniert. Die Routine zum Konvertieren einer .Xmodmap-Datei in .xkbmap bleibt unverändert.

Beachten Sie, dass dies eine benutzerspezifische Lösung ist. Eine gerätebezogene Antwort finden Sie unter Anwenden einer Tastaturbelegung auf ein einzelnes Gerät . Diese Methode könnte für die Verwendung hier angepasst werden.

Ändern Sie zuerst die .Xmodmap-Datei wie gewünscht. Diese lassen sich einfacher direkt bearbeiten als .xkbmap-Dateien. Wenn es geladen ist:

xmodmap .Xmodmap

konvertiere dann in eine .xkb Datei:

xkbcomp $ DISPLAY $ HOME / .xkbmap

Um beim Start automatisch zu laden, öffnen Sie Startup Applications (Startanwendungen), klicken Sie auf Add (Hinzufügen) und geben Sie in der Befehlszeile Folgendes ein:

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

("Benutzer" wird durch den tatsächlichen Benutzernamen ersetzt.) Geben Sie unter Name möglicherweise Load Keyboard Map ein. Fügen Sie bei Bedarf einen Kommentar hinzu und klicken Sie auf Speichern.

Die Tastaturbelegung wird jetzt bei jedem Systemstart geladen, überlebt jedoch keinen Ruhezustand oder Ruhezustand. Erstellen Sie dazu eine neue Datei in / lib / systemd / system-sleep, möglicherweise mit dem Namen 60_xkbmap, die Folgendes enthält:

#!/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. ) Ersetzen Sie wie oben "user" durch den tatsächlichen Benutzernamen.

Die Tastaturbelegung sollte jetzt automatisch geladen werden und persistent bleiben. Hinweis:

  • Gilt für die aktuelle LTS-Version 16.04 und wahrscheinlich auch für spätere Versionen.
  • Entnommen aus Beitrag 14 des oben verlinkten Bug-Threads.
  • Frühere Kommentare galten für den ursprünglichen Beitrag.

Ich versuche diese Methode jetzt und jetzt, wenn ich ein Terminal starte, erhalte ich eine Reihe von Meldungen wie folgt: Warnung: Keine Symbole für <AB11> definiert (Schlüsselcode 97) Warnung: Keine Symbole für <JPCM> definiert (Schlüsselcode 103) Warnung: Für <I120> sind keine Symbole definiert (Schlüsselcode 120). Weiß jemand?
Baby verloren

Diese Methode funktioniert trotz der oben genannten Warnungen aber nur vorübergehend - nach kurzer Zeit wird das Mapping irgendwie vergessen und der Super-Key kehrt zu seiner Standardfunktion zurück. Also versuche ich es andersherum - ich ordne die grundlegenden Bearbeitungsverknüpfungen auf meinem Mac neu zu, um die Steuerungstaste anstelle der Befehlstaste zu verwenden und zu prüfen, ob dies funktioniert. Ich möchte nur, dass meine Befehle zum Ausschneiden, Kopieren, Einfügen, Rückgängigmachen und Wiederherstellen auf Mac und Ubuntu gleich sind. Ich bin sehr frustriert, wenn bei jedem Versuch, etwas zu kopieren oder einzufügen, das Suchmenü auf Ubuntu angezeigt wird.
Baby verloren

1

Das hat mich auch gestolpert, als ich von Ubuntu 12.04 auf 13.04 upgegradet habe.

Glücklicherweise ist diese Einstellung jetzt (oder vielleicht schon immer) in den Tastatureinstellungen leicht zugänglich und kann mit ein paar Mausklicks geändert werden.

  1. Gehen Sie zu Systemeinstellungen > Tastaturlayout > Optionen ...
  2. Klicken Sie in den Tastaturlayoutoptionen auf den Pfeil, um die Optionen für die Position der Strg-Taste anzuzeigen.
  3. Setzen Sie das Häkchen bei Swap Ctrl und Caps Lock .

Los geht's: Linke Steuerung und Feststelltaste sind vertauscht.

Vergessen Sie nicht zu löschen, ~/.Xmodmapsobald Sie die Änderung vorgenommen haben.


Dies wurde vielleicht herabgestuft, weil es nicht xmodmap anspricht, aber tatsächlich entdeckte ich, dass die Verwendung von Gnome Tweak der Grund dafür sein könnte, dass einige meiner Zuordnungen seltsam wirkten.
dragon788

Ich sehe das nicht in 16.04, ist das noch möglich?
Chrismarx

1
@chrismarx Nein, sie haben es entfernt. Heute (16.04) Ich habe XKBOPTIONS="ctrl:swapcaps"in /etc/default/keyboard.
Am

0

Das Hinzufügen dieses Skripts zum Start ist zufriedenstellend:

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

Ich habe versucht, mit xmodmap ./Xmodmap, aber jedes Mal, wenn es ausgeführt wird, wird eine spürbare Verzögerung auftreten.


4
Die Verwendung einer while; doEndlosschleife sollte vermieden werden. Es verursachte, dass ein Kern meiner Dual-Core-CPU alle 5 Sekunden 42% erreichte, was die Akkuladung meines Laptops erheblich verringerte!
Serge Stroobandt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.