Vraag Hoe kan ik bepaalde sleutels of apparaten opnieuw toewijzen?


Ik ben op zoek naar een manier om bepaalde toetsen opnieuw in te stellen in ubuntu.

d.w.z.

Ik wil graag veranderen PgUp naar Huis of PgDown naar Einde.

Bestaat er een ingebouwd commando of een hulpmiddel om sleutels opnieuw toe te wijzen in Ubuntu / GNOME?


214
2018-02-05 13:20


oorsprong


check mijn antwoord hier. Het loont niet de moeite om hetzelfde antwoord te kopiëren en plakken. Misschien zou het u helpen. - Rahul Virpara
Alle Emacs-achtige koppelingen hier voor CTRL-P / N voor eenheidsstappen? - Léo Léopold Hertz 준영
Sinds enige tijd xmodmap is beroofd! om een ​​systeembrede instelling te krijgen die u moet gebruiken xkb. Bewerk het taalbestand dus in /usr/share/X11/xkb/symbols/ om uw wijzigingen daar toe te voegen. Zien askubuntu.com/a/898462/34298 - rubo77


antwoorden:


Merk op: Vanaf 2013 gebruiken Ubuntu en derivaten niet langer xmodmap, maar gebruik in plaats daarvan xkb. Zie voor meer informatie dit antwoord. Het onderstaande antwoord is niet langer relevant voor huidige releases.


Voor het opnieuw toewijzen van bepaalde sleutels heb je twee tools nodig. Eerste xev (opdrachtregelprogramma) en ten tweede xmodmap (ook opdrachtregelprogramma). Beide moeten beschikbaar zijn in Ubuntu zonder deze extra te installeren.

  1. Start terminalvenster en voer uit xev. Nu is het actief en wacht het op u om een ​​toets in te drukken. Druk vervolgens op de toets waarvan u het gedrag wilt wijzigen. d.w.z. PgUp.

  2. xev zal wat informatie over de ingedrukte toets uitvoeren. De derde regel is belangrijk. Het moet er ongeveer zo uitzien:

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

    in dit voorbeeld Prior is de naam van het gedrag waaraan de sleutel op dit moment is toegewezen, de nummercode is de interne id om de sleutel te herkennen. Doe dit nu met een andere sleutel, d.w.z. PgDown geef deze uitvoer

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

    Ook hier is het interessante deel voor ons keycode 115 en Next - de naam van het gedrag.

  3. nu, wanneer u de twee toetsen wilt verwisselen gebruik xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Dit verandert de sleutel met keycode 110 op je toetsenbord naar de actie Next. Het is vrij eenvoudig.

    Merk op dat als de sleutel die u in kaart brengt een andere betekenis moet hebben wanneer gebruikt met de Verschuiving toets (bijvoorbeeld voor Britse toetsenbordindelingen, Verschuiving+2 geeft aanhalingstekens), dan kun je eenvoudig het secundaire commando achter de eerste lijst zetten. Als u bijvoorbeeld de sleutel met code 53 normaal naar de backslash wilt toewijzen, maar naar het barsymbool bij gebruik met shift, kunt u het volgende doen:

     xmodmap -e "keycode 53 = backslash bar"
    

Extra informatie: De volgorde van deze toewijzingen is Sleutel, Shift + Key, mode_switch + Key, mode_switch + Shift + Key, AltGr + Key, AltGr + Shift + Key. Om een ​​kolom over te slaan gebruik NoSymbol. Bovendien, hier is een uitgebreide lijst van alle keysyms.

Opmerking: deze wijzigingen gelden alleen voor de actieve X-sessie en gaan verloren na opnieuw opstarten. Wanneer u de wijzigingen permanent wilt opslaan, moet u de volgende opdrachten uitvoeren na de bovenstaande:

xmodmap -pke >~/.Xmodmap

(het maakt een bestand met de naam .Xmodmap in je homedirectory (~))

Vervolgens moet u een bestand met de naam maken .xinitrc in je homedirectory waar je het commando plaatst xmodmap .Xmodmap in.

U kunt nu wijzigen .Xmodmap en loop xmodmap .Xmodmap van console om de wijzigingen onmiddellijk te zien. De veranderingen in .Xmodmap zal blijven bestaan.

bron: Ubuntu Foruns

Bonus dingen:

Als de sleutel die u opnieuw koppelt afwijkend gedrag heeft, afhankelijk van een staat ( zoals hoe de toetsen in het numerieke toetsenbord van NumLock afhankelijk zijn), je hoeft het alleen maar te doen xmodmap -pmom een ​​lijst met modifiers op te halen en doe dan:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Stel dat u bijvoorbeeld een punt in plaats van een komma op het numerieke toetsenbord wilt krijgen (handig voor de meeste programmeurs), maar u wilt het "verwijder" -gedrag behouden wanneer NumLock uit staat.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2, omdat xmodmap -pm vertelt ons dat mod2 is Num_Lock, de andere namen worden verkregen door op de toetsen in te drukken xev.


233
2017-12-17 18:46



xev kan niet vangen Fn sleutel indrukken - om-nom-nom
Ik vond het geweldig hoe je alles hebt uitgelegd in plaats van alleen de syntaxis te vervagen met vervangingsplaatsen - Programming Noob
Het geselecteerde antwoord werkte niet voor het opnieuw toewijzen van de Caps-lock-toets voor mij op Ubuntu 12.10. Ik was in staat om dit te doen door naar Systeeminstellingen -> Toetsenbord -> Layoutinstellingen -> Opties te gaan, die een lijst met toetsen en alternatief gedrag heeft. Feilloos gewerkt in Unity en terminal. - Allyl Isocyanate
Vreemd, ik heb alles gedaan, maar mijn keymappings worden nog steeds gereset na het herstarten. - Costa
Ik denk niet dat ik een heb -event vlag in Ubuntu 12.04. Het geeft een foutmelding en vermeldt niet "evenement" in man xev. - isomorphismes


Als je een Shift-toets wilt verplaatsen, zijn er een paar extra stappen:

 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

18
2018-02-05 14:04



+1 Het meest unix-y antwoord van al die voor een modifier (ik had het al zo lang gedaan, met mijn iBook 2, toen ik wilde dat de enter-toets de functie van Control_R had, maar de details was vergeten). - rbrito
Een belangrijk antwoord voor gebruikers van toetsenborden op Lenovo Laptops - Einar Ólafsson


Ik heb net een bijzaak gehad. Ik denk dat je iets heel anders bedoelt door "remap" ... maar ik laat mijn antwoord achter zoals het is ... (ik weet niet hoe ik een sleutel opnieuw moet toewijzen aan gedragen als een ander)

BIJWERKEN: mijn 'nabeschouwing' is bevestigd; (Ik heb de verkeerde vraag beantwoord:) ... zie NES Community Wiki-antwoord (hierboven aanvaard).

Er zijn twee algemene manieren om remap opnieuw een sleutel binden.

  • lokaal naar een bepaald programma
    (een sleutel kan voor verschillende dingen in verschillende apps / vensters worden gebruikt)
  • globaal voor een specifieke gebruiker
    (een toets heeft dezelfde functie in alle vensters)

Voor methoden van 'lokaal naar een programma' is er soms een manier om sneltoetsen te wijzigen die worden aangeboden door de app zelf ... bijvoorbeeld.

Firefox heeft een add-on genaamd keyconfig ... voor sommige info, zie dit MozillZine bericht 

De meeste Ubuntu-programma's zijn gebaseerd op Gnome en er is een specifiek hulpprogramma om de keybinding aan te passen voor elk menu-item van deze Gnome-apps ... Het wordt genoemd Editable Menu Accelerator ... Het is een zeer 'gevoelig' hulpmiddel, maar behoorlijk krachtig. Je kunt het inschakelen door te hardlopen gconf-editor (via Terminal of Alt + F2) ... navigeer naar desktop-gnome-interface en selecteer can_change_accels .... Je kunt menu-items dan virtueel veranderen naar alles wat je wilt (per programma / venster) ... Ik stel voor dat je het uitschakelt zodra je hebt gedaan wat je nodig hebt ..

Anders kunt u wereldwijde sneltoetsen instellen. Ik gebruik een programma genaamd xbindkeys  Install xbindkeys, en er is ook een optie beschikbaar via het hoofdmenu - Voorkeuren, genaamd Keyboard Shortcuts 

Als u xbindkeys gebruikt, moet u deze toevoegen aan uw "Startup Applications" (Hoofdmenu - Voorkeuren) ... Ook (zoals gesuggereerd door Stefano Palazzo) heb ik eerder een meer gedetailleerde beschrijving van xbindkeys geschreven in een antwoord op deze askubuntu pagina


16
2018-01-27 03:04



+1, erg leuk! Een suggestie: je zou je moeten integreren geweldig antwoord op een andere vraag in deze, misschien ook het configuratie-formaat van xbindkeys een beetje uitleggen. - Stefano Palazzo♦
Het bit over het toewijzen van andere sleutels zou kunnen worden afgehandeld xdotool, bekijk de man-pagina, ik heb het gebruikt om op te lossen dit probleem. - Stefano Palazzo♦
ik heb onlangs een andere benadering gevonden met een tool genaamd xmodmap in combinatie met een tool genaamd xev. ik weet niet wat de verschillen zijn tussen xmodmap en xbindkeys, maar dit werkt best goed voor mij. wat advies met een hulpmiddel om de benoemde twee te verkiezen? Hier is een zeer nuttige stapsgewijze handleiding die xmodmap en xev beschrijft ubuntuforums.org/showpost.php?p=7675138&postcount=2 - NES
@NES .. Het lijkt erop dat ik het verkeerde punt heb aangepakt. Je lijkt echt een andere vorm van remap van de manier te willen zien waarop een bepaalde sleutel wordt geïnterpreteerd door het besturingssysteem, dat wil zeggen een niet-standaard toetsenbordinterpretatie, terwijl ik heb verwezen naar een standaard toetsenbordinterpretatie, en simpelweg overbelasting van de standaard toets-toewijzingen. (Ik denk dat wat je zoekt vergelijkbaar is met het verwisselen van de linker en rechter muisknop) .. Nou, het lijkt erop dat mijn antwoord goed was voor het verkeerde ding :) - Peter.O
ja, maar geen probleem. het antwoord is ook interessant. de stap voor stap handleiding die ik heb geplaatst, was de juiste link. dus ik zal een kort antwoord plaatsen met de oplossing dat andere gebruikers een goede handleiding hebben. bedankt fred - NES


Hier is hoe ik probeerde om de toewijzing van de om te schakelen ENTER sleutel tot de VERSCHUIVING sleutel (en vice versa):

$ uname -a

Rapporten:

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

$ which xmodmap

Rapporten:

/usr/bin/xmodmap

$ which xev

Rapporten:

/usr/bin/xev

$ xev

(negeer de volgende vijftig regels of zo)

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

Wat belangrijk is, is de derde regel van elke toetsaanslag:

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".

ACHTERUIT DE KAART:

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

BEWAAR DE RESULTATEN:

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

TOEVOEGEN

 xmodmap ~/.Xmodmap

$ sudo reboot

Het grootste probleem was dat de omkering NIET werkte. De ENTER sleutel is toegewezen aan de SHIFT_R sleutel; maar de SHIFT_R sleutel was niet toegewezen aan de ENTER sleutel. Ga figuur.


8
2018-01-20 05:30





Om globale remaps onafhankelijk van X te doen, kunt u gebruik maken van console-setup (5) in plaats daarvan.

In mijn geval wilde ik opnieuw een afspraak maken Caps Lock sleutel tot D, sinds mijn D-toets is gebroken :)

Eerst gebruikte ik dumpkeys (1) om een ​​sjabloon voor een afbeelding te verkrijgen, in het geval van de D-toets, het interessante bit is de toewijzing voor keycode 32 (op mijn toetsenbord); Let op: er zijn twee spaties in het greppatroon!

$ 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...)

Om de kaart te wijzigen die van toepassing is op Caps Lock (keycode 58 op mijn toetsenbord) in plaats daarvan

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

Nu staat het

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

Om deze remap toe te voegen aan de standaardkaart, moet deze gewoon worden toegevoegd aan de remap inclusief bestand voor console-setup

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

en console-setup moet opnieuw worden geconfigureerd (waarbij lage prioriteitsvragen worden overgeslagen met -phigh)

sudo dpkg-reconfigure console-setup -phigh

Nu moet de remap worden voltooid en automatisch worden geladen tijdens het opstarten.


6
2017-07-28 12:15





Ik heb een hele dag geprobeerd om een ​​snelkoppeling te maken Ctrl+Pageup.

Ik heb het voor het eerst geprobeerd xmodmap maar dat kan geen modificatiegebeurtenissen genereren. Het is dus onmogelijk om een ​​snelkoppeling te maken die bijvoorbeeld het Control evenement.

Ik probeerde het toen xbindkeys met xmacro. Dat soort werken, maar xbindkeys kan sommige toetscombinaties op mijn systeem niet vastleggen, zoals Alt + ___.

Daarom heb ik eindelijk Unity's eigen sneltoetsen voor het toetsenbord -> Aangepaste snelkoppelingen gebruikt om mijn snelkoppeling in te stellen.

En in plaats van xmacro, Ik heb het nu gebruikt xvkbd programma om de toetsenbordgebeurtenissen te genereren, maar dat is slechts een persoonlijke voorkeur. Beide xmacro en xvkbd werk bijna hetzelfde. Een extra tip is om een ​​vertragingsparameter toe te voegen in xmacro of xvkbd om ervoor te zorgen dat de gebeurtenissen niet verloren gaan.


3





Voor mij werkte AutoKey van Software Center het beste. Het heeft een intuïtieve GUI, om een ​​nieuwe binding toe te voegen klik op Nieuw -> Phrase en

  1. Voeg naam toe, klik op OK
  2. Controleer bij het gedeelte 'Phrase-instellingen' of het gebruik van plakken is ingesteld op het toetsenbord
  3. Sneltoets toevoegen die u wilt gebruiken
  4. Voeg de opdracht toe aan het tekstveld, bijvoorbeeld om de linkerpijltoets te emuleren - dat zou het geval zijn <left> (lijst met speciale toetsen is hier).

0