Wie kann ich bestimmte Tasten oder Geräte neu zuordnen?

236

Ich suche nach einer Möglichkeit, bestimmte Tasten in Ubuntu neu zuzuordnen.

dh

Ich möchte PgUpzu Homeoder PgDownzu wechseln End.

Gibt es in Ubuntu / GNOME einen eingebauten Befehl oder ein Tool, um Schlüssel neu zuzuweisen?

NES
quelle
Schau dir meine Antwort hier an . Es lohnt sich nicht, die gleiche Antwort zu kopieren und einzufügen. Vielleicht würde es dir helfen.
Rahul Virpara
1
Gibt es hier Emacs-ähnliche Bindungen für STRG-P / N für Einheitenschritte?
Léo Léopold Hertz 준영
Seit einiger Zeit xmodmapwird beraubt! Um eine systemweite Einstellung zu erhalten, müssen Sie verwenden xkb. Bearbeiten Sie also die Sprachdatei in /usr/share/X11/xkb/symbols/, um Ihre Änderungen dort hinzuzufügen. Siehe askubuntu.com/a/898462/34298
rubo77

Antworten:

249

Hinweis: Ab 2013 verwenden Ubuntu und Derivate nicht mehr xmodmap, sondern verwenden xkb. Weitere Informationen hierzu finden Sie diese Antwort . Die Antwort unten ist für aktuelle Releases nicht mehr relevant.


Zum erneuten Zuordnen bestimmter Tasten benötigen Sie zwei Werkzeuge. Erstes xev (Kommandozeilen-Tool) und zweites xmodmap (auch Kommandozeilen-Tool). Beide sollten in Ubuntu verfügbar sein, ohne sie extra zu installieren.

  1. Terminalfenster starten und ausführen xev. Jetzt ist es aktiv und wartet darauf, dass Sie eine Taste drücken. Drücken Sie dann die Taste, deren Verhalten Sie ändern möchten. dh PgUp.

  2. xevgibt einige Informationen über die gedrückte Taste aus. Die dritte Zeile ist wichtig. Es sollte ungefähr so ​​aussehen:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    In diesem Beispiel Priorist dies der Name des Verhaltens, dem der Schlüssel momentan zugewiesen ist. Der Zahlenschlüsselcode ist die interne ID zum Erkennen des Schlüssels. Tun Sie dies jetzt mit einem anderen Schlüssel, dh PgDowngeben Sie diesen Ausgang

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    Auch hier ist der interessante Teil für uns keycode 115und Next- der Name des Verhaltens.

  3. Jetzt, wenn Sie die beiden Schlüssel tauschen möchten, verwenden Sie xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Dies ändert den Schlüssel mit dem Schlüsselcode 110 auf Ihrer Tastatur in die Aktion Next. Es ist ziemlich einfach.

    Beachten Sie, dass Sie den sekundären Befehl einfach nach dem ersten auflisten können, wenn die zuzuordnende Taste eine andere Bedeutung haben soll, wenn sie mit der ShiftTaste verwendet wird (z. B. für britische Tastaturlayouts, Shift+ 2gibt Anführungszeichen). Wenn Sie beispielsweise möchten, dass der Schlüssel mit Code 53 normalerweise einem umgekehrten Schrägstrich, bei Verwendung mit Shift jedoch dem Balkensymbol zugeordnet wird, können Sie Folgendes tun:

     xmodmap -e "keycode 53 = backslash bar"
    

Zusätzliche Informationen: Die Reihenfolge dieser Zuordnungen ist Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. Zum Überspringen einer Spalte verwenden Sie NoSymbol. Außerdem finden Sie hier eine umfassende Liste aller Keysyms.

Hinweis: Diese Änderungen gelten nur für die Active X-Sitzung und gehen nach dem Neustart verloren. Wenn Sie die Änderungen dauerhaft speichern möchten, müssen Sie die folgenden Befehle nach den obigen Befehlen ausführen:

xmodmap -pke >~/.Xmodmap

(erstellt eine Datei mit dem Namen .Xmodmapin Ihrem Home-Verzeichnis ( ~))

Dann müssen Sie eine Datei mit dem Namen .xinitrcin Ihrem Home-Verzeichnis erstellen, in das Sie den Befehl xmodmap .Xmodmapeingeben.

Sie können jetzt Änderungen vornehmen .Xmodmapund xmodmap .Xmodmapvon der Konsole aus ausführen , um die Änderungen sofort anzuzeigen. Die Änderungen in .Xmodmapwerden beibehalten.

Quelle: Ubuntu Foruns

Bonusmaterial:

Wenn die Taste, die Sie neu zuordnen, je nach Status ein anderes Verhalten aufweist (z. B. wie die Tasten auf der numerischen Tastatur von NumLock abhängen), müssen Sie nur xmodmap -pmeine Liste der Modifikatoren abrufen und dann Folgendes ausführen :

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Angenommen, Sie möchten auf der numerischen Tastatur einen Punkt anstelle eines Kommas eingeben (nützlich für die meisten Programmierer), möchten aber das Löschverhalten beibehalten, wenn NumLock deaktiviert ist.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2Da xmodmap -pmsagt uns , dass mod2ist Num_Lock, werden die anderen Namen durch Drücken der Tasten in erhalten xev.

NES
quelle
3
xevkann keine FnTastendrücke abfangen
om-nom-nom
3
Die ausgewählte Antwort funktionierte nicht, um die Feststelltaste unter Ubuntu 12.10 neu zuzuordnen. Ich konnte dies tun, indem ich zu Systemeinstellungen -> Tastatur -> Layouteinstellungen -> Optionen ging, die eine Liste von Tasten und alternativen Verhaltensweisen enthält. Funktionierte einwandfrei in Unity und Terminal.
Allyl Isocyanate
1
Wenn Sie mehrere Tastaturen angeschlossen haben, sehen diese Tools dann einen Unterschied zwischen derselben Taste auf einer anderen Tastatur?
Stommestack
1
Seltsam, ich habe alles getan, aber meine Tastenzuordnungen wurden nach dem Neustart immer noch zurückgesetzt.
Costa
1
Ich glaube nicht, dass ich -eventin Ubuntu 12.04 eine Flagge habe. Es löst einen Fehler aus und erwähnt "event" nicht in man xev.
Isomorphismen
20

Wenn Sie versuchen, eine Umschalttaste zu bewegen, gibt es ein paar zusätzliche Schritte:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating
cmcginty
quelle
+1 Die unix-y Antwort für einen Modifikator (das hatte ich schon vor langer Zeit mit meinem iBook 2 gemacht, als ich wollte, dass die Eingabetaste die Funktion von Control_R hat, aber die Details vergessen hatte).
Großbritannien
2
Eine wichtige Antwort für Benutzer, die Tastaturen auf Lenovo Laptops verwenden
Einar Ólafsson
16

Ich hatte gerade einen nachträglichen Gedanken. Ich glaube, Sie meinen mit "Neu zuordnen" etwas völlig anderes. Aber ich lasse meine Antwort wie sie ist benimm dich wie ein anderer

UPDATE : mein 'nachträglicher' Gedanke wurde bestätigt; (Ich habe die falsche Frage beantwortet:) ... siehe NES Community Wiki Antwort (oben akzeptiert).

Es gibt zwei allgemeine Möglichkeiten, einen Schlüssel neu zuzuordnen.

  • lokal zu einem bestimmten Programm
    (ein Schlüssel kann für verschiedene Dinge in verschiedenen Apps / Fenstern verwendet werden)
  • global für einen bestimmten Benutzer
    (eine Taste hat in allen Fenstern die gleiche Funktion)

Für 'local to a program'-Methoden gibt es manchmal eine Möglichkeit, die von der App selbst angebotenen Tastenkombinationen zu ändern ... zB.

Firefoxhat ein Addon namens keyconfig ... für einige Informationen siehe diesen MozillZine-Beitrag

Die meisten Ubuntu-Programme basieren auf Gnome, und es gibt ein spezielles Dienstprogramm, mit dem die Tastenkombination für jeden Menüpunkt dieser Gnome-Apps Editable Menu Acceleratorgeändert werden kann es durch Ausführen gconf-editor(über Terminal oder Alt + F2) ... navigieren Sie zu desktop- gnome- interfaceund wählen Sie can_change_accels.... Sie können dann Menüelemente in virtuelle ändern, was Sie möchten (pro Programm / Fenster) ... Ich schlage vor, Sie deaktivieren es sobald du getan hast was du brauchst ..

Andernfalls können Sie globale Hotkeys einrichten. Ich benutze ein Programm namens xbindkeys Installieren Sie xbindkeys , und es gibt auch eine Option über das Hauptmenü - Einstellungen, genanntKeyboard Shortcuts

Wenn Sie xbindkeys verwenden, müssen Sie es zu Ihren "Startup Applications" (Hauptmenü - Preferences) hinzufügen ... Auch (wie von Stefano Palazzo vorgeschlagen) habe ich zuvor in einer Antwort darauf eine detailliertere Beschreibung von xbindkeys geschrieben askubuntu Seite

Peter.O
quelle
+1, sehr nett! Ein Vorschlag: Sie sollten Ihre großartige Antwort von einer anderen Frage in diese integrieren und vielleicht auch das Konfigurationsformat von xbindkeys ein wenig erläutern.
Stefano Palazzo
1
Das Problem mit der Zuweisung anderer Schlüssel könnte xdotoolgelöst werden , lesen Sie die Manpage. Ich habe es verwendet, um dieses Problem zu lösen .
Stefano Palazzo
Ich habe kürzlich einen anderen Ansatz mit einem Tool namens xmodmap in Kombination mit einem Tool namens xev gefunden. Ich weiß nicht, was die Unterschiede zwischen Xmodmap und Xbindkeys sind, aber das funktioniert ziemlich gut für mich. einige ratschläge mit tool von den beiden genannten vorzuziehen? Hier ist ein sehr hilfreicher Schritt für Schritt Anleitung , die xmodmap und xev beschreibt ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES
@NES .. Anscheinend habe ich den falschen Punkt angesprochen .. Sie möchten anscheinend die Interpretation einer bestimmten Taste durch das Betriebssystem neu zuordnen, dh eine nicht standardmäßige Tastaturinterpretation, während ich mich auf a bezogen habe Standardtastaturinterpretation und einfaches Überladen der Standardtastaturbelegung. (Ich denke, was Sie
suchen,
ja aber kein problem Die Antwort ist auch interessant. Die Schritt-für-Schritt-Anleitung, die ich über den Link oben gepostet habe, war der richtige Weg. Ich werde also eine kurze Antwort mit der Lösung posten, dass andere Benutzer einen guten Leitfaden haben. danke fred
NES
9

So habe ich versucht, die Zuordnung der ENTERTaste zur Taste zu SHIFTändern (und umgekehrt):

$ uname -a

BERICHTE:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

BERICHTE:

/usr/bin/xmodmap

$ which xev

BERICHTE:

/usr/bin/xev

$ xev

(Ignoriere die nächsten fünfzig Zeilen oder so)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Wichtig ist die dritte Zeile bei jedem Tastendruck:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

REVERSE THE MAPPING:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

SPEICHERN SIE DIE ERGEBNISSE:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

HINZUFÜGEN

 xmodmap ~/.Xmodmap

$ sudo reboot

Das Hauptproblem war, dass die Umkehrung NICHT funktionierte. Der ENTERSchlüssel wurde dem SHIFT_RSchlüssel zugeordnet. Der SHIFT_RSchlüssel wurde jedoch nicht dem ENTERSchlüssel zugeordnet. Stelle dir das vor.

Bill Davis
quelle
7

Um globale Neuzuordnungen unabhängig von X durchzuführen, können Sie stattdessen das Konsolen-Setup (5) verwenden.

In meinem Fall wollte ich den Caps LockSchlüssel neu zuordnen D, da mein DSchlüssel kaputt ist :)

Zuerst benutzte ich dumpkeys (1) , um eine Vorlage für ein Mapping zu erhalten, im Fall von D-key ist das interessante Bit das Mapping für keycode 32 (auf meiner Tastatur); Beachten Sie, dass das Grep-Muster zwei Leerzeichen enthält!

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

Um die Karte zu ändern, gilt Caps Lockstattdessen (Keycode 58 auf meiner Tastatur)

sed 's/32/58/' -i tempfile

Jetzt liest es

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

Um diese Neuzuordnung zur Standardzuordnung hinzuzufügen, muss sie für das Konsolen-Setup lediglich an die Neuzuordnungs-Include-Datei angehängt werden

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

und das Konsolen-Setup müssen neu konfiguriert werden (Fragen mit niedriger Priorität überspringen mit -phigh)

sudo dpkg-reconfigure console-setup -phigh

Jetzt sollte die Neuzuordnung abgeschlossen und beim Booten automatisch geladen werden.

Arand
quelle
3

Ich habe einen ganzen Tag damit verbracht, eine Verknüpfung für zu erstellen Ctrl+Pageup.

Ich habe zuerst versucht, xmodmapaber das kann keine Modifikatorereignisse erzeugen. Es ist also unmöglich, eine Verknüpfung zu erstellen, die beispielsweise das ControlEreignis generiert .

Ich habe dann versucht xbindkeysmit xmacro. Diese Art von Funktion funktioniert, kann jedoch xbindkeyseinige Tastenkombinationen auf meinem System nicht erfassen, z Alt + ___.

Also habe ich endlich Unitys eigene Tastenkombinationen -> Benutzerdefinierte Tastenkombinationen verwendet, um meine Tastenkombination einzurichten.

Und stattdessen habe xmacroich jetzt das xvkbdProgramm zum Generieren der Tastaturereignisse verwendet, aber das ist nur eine persönliche Präferenz. Beide xmacround xvkbdarbeiten fast gleich. Ein weiterer Tipp ist das Hinzufügen eines Verzögerungsparameters in xmacrooder xvkbdum sicherzustellen, dass die Ereignisse nicht verloren gehen.

HRJ
quelle
2

Für mich hat AutoKey vom Software Center am besten funktioniert. Es hat eine intuitive Benutzeroberfläche, um neue Bindungen hinzuzufügen, klicken Sie auf Neu -> Phrase und

  1. Namen hinzufügen, klicken Sie auf OK
  2. Vergewissern Sie sich, dass im Abschnitt "Phrase Settings" (Phraseneinstellungen) die Option "paste using" (Einfügen mit) auf "keyboard" (Tastatur) eingestellt ist
  3. Fügen Sie den Hotkey hinzu, den Sie verwenden möchten
  4. Fügen Sie einen Befehl in das Textfeld ein, zB um die linke Pfeiltaste zu emulieren <left>(Liste der Sondertasten hier ).
Ego
quelle
Dies funktionierte perfekt zum Einrichten Super+Cund Super+Vzu Ctrl+Cund Ctrl+V. Nur die perfekte Lösung, wenn Ubuntu über VirtualBox auf einem Mac verwendet wird
Ben
Dies deaktiviert jedoch nicht andere Befehle, die diese Verknüpfungen abhören. Um zu deaktivieren Super+V, dass die Benachrichtigungsliste angezeigt wird, gehen Sie zu Einstellungen -> Geräte -> Tastatur und deaktivieren Sie sie dort
Ben
@Ben yup, es wäre toll, wenn es Bindungen von anderen Apps anzeigen würde, aber es ist eher das Sahnehäubchen. Mein Problem ist, dass es nicht möglich ist, "Fn" -Taste neu zuzuordnen. Ich habe mich entschieden, uhk keyboard auszuprobieren - das Ding, das unabhängig vom Betriebssystem programmiert werden kann, wird sehen, wie es geht.
Ich
0

Wenn Sie nur einen Schlüssel für ein bestimmtes Programm neu zuordnen müssen, habe ich gerade hinzugefügt um diese Funktion zu hax11.

Ich möchte PgUpzu Homeoder PgDownzu wechseln End.

Öffnen Sie dazu mit hax11 die Profilkonfigurationsdatei des Programms unter ~/.config/hax11/profiles(z. B. ~/.config/hax11/profiles/usr\lib\firefox\firefox) und fügen Sie Folgendes hinzu:

Enable=1
MapK112=K110
MapK117=K115
Vladimir Panteleev
quelle