Jak zmienić mapowanie niektórych kluczy lub urządzeń?


236

Szukam sposobu na mapowanie niektórych kluczy w Ubuntu.

to znaczy

Chciałbym zmienić PgUpna Homelub PgDownna End.

Czy istnieje wbudowane polecenie lub narzędzie do zmiany przypisania kluczy w Ubuntu / GNOME?


sprawdź moją odpowiedź tutaj . Nie warto kopiować i wklejać tej samej odpowiedzi. Być może to by ci pomogło.
Rahul Virpara

1
Jakieś powiązania podobne do Emacsa dla CTRL-P / N dla kroków jednostkowych?
Léo Léopold Hertz -

Ponieważ trochę czasu xmodmapjest osłabione! aby uzyskać ustawienie systemowe, którego musisz użyć xkb. Edytuj plik językowy w, /usr/share/X11/xkb/symbols/aby dodać tam swoje zmiany. Zobacz askubuntu.com/a/898462/34298
rubo77

Odpowiedzi:


249

Uwaga: od 2013 r. Ubuntu i pochodne nie używają już xmodmap, ale zamiast tego używają xkb. Aby uzyskać więcej informacji, zobacz tę odpowiedź . Poniższa odpowiedź nie ma już zastosowania do bieżących wersji.


Do ponownego mapowania niektórych kluczy potrzebujesz dwóch narzędzi. Pierwszy xev (narzędzie wiersza poleceń) i drugi xmodmap (także narzędzie wiersza poleceń). Oba powinny być dostępne w Ubuntu bez dodatkowej instalacji.

  1. Uruchom okno terminala i uruchom xev. Teraz jest aktywny i czeka na naciśnięcie klawisza. Następnie naciśnij klawisz, którego zachowanie chcesz zmienić. tj PgUp.

  2. xevwyświetli informacje o naciśniętym klawiszu. Trzecia linia jest ważna. Powinien wyglądać podobnie do:

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

    w tym przykładzie Priorjest to nazwa zachowania, do którego przypisany jest obecnie klucz, numer kodu jest wewnętrznym identyfikatorem rozpoznającym klucz. Teraz zrób to z innym kluczem, tj. PgDownPodaj ten wynik

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

    Oto kolejny interesujący dla nas keycode 115i Next- nazwa zachowanie.

  3. teraz, gdy chcesz zamienić dwa klucze, użyj xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Spowoduje to zmianę klawisza z kodem 110 na klawiaturze na akcję Next. To całkiem proste.

    Zauważ, że jeśli mapowany klawisz powinien mieć inne znaczenie, gdy jest używany z Shiftklawiszem (na przykład dla brytyjskich układów klawiatury, Shift+ 2daje cudzysłowy), możesz po prostu wymienić dodatkowe polecenie po pierwszym. Na przykład, jeśli chcesz, aby klucz z kodem 53 był odwzorowywany normalnie na odwrotny ukośnik, ale do symbolu słupka, gdy jest używany z shiftem, możesz:

     xmodmap -e "keycode 53 = backslash bar"
    

Dodatkowe informacje: Sekwencja tych przekształceń jest Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. Aby pominąć kolumnę, użyj NoSymbol. Co więcej, tutaj jest pełna lista wszystkich kluczy.

Uwaga: Te zmiany dotyczą tylko aktywnej sesji X i zostaną utracone po ponownym uruchomieniu. Jeśli chcesz trwale zapisać zmiany, musisz uruchomić następujące polecenia po powyższych:

xmodmap -pke >~/.Xmodmap

(tworzy plik o nazwie .Xmodmapw katalogu domowym ( ~))

Następnie musisz utworzyć plik o nazwie .xinitrcw katalogu domowym, w którym umieścisz polecenie xmodmap .Xmodmap.

Możesz teraz zmodyfikować .Xmodmapi uruchomić xmodmap .Xmodmapz konsoli, aby natychmiast zobaczyć zmiany. Zmiany .Xmodmapbędą się utrzymywać.

źródło: Ubuntu Foruns

Materiały dodatkowe:

Jeśli mapowany klawisz zachowuje się inaczej w zależności od stanu (na przykład, w jaki sposób klawisze klawiatury numerycznej zależą od NumLock), po prostu musisz zrobić, xmodmap -pmaby uzyskać listę modyfikatorów, a następnie:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Załóżmy na przykład, że chcesz uzyskać kropkę zamiast przecinka na klawiaturze numerycznej (przydatne dla większości programistów), ale chcesz zachować zachowanie „usuwania”, gdy NumLock jest wyłączony.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2, ponieważ xmodmap -pmmówi nam mod2to Num_Lock, że inne nazwy są uzyskiwane przez naciśnięcie klawiszy xev.


3
xevnie jest w stanie złapać Fnkluczowych naciśnięć
om-nom-nom

3
Wybrana odpowiedź nie zadziałała w przypadku ponownego mapowania klawisza Caps-lock w systemie Ubuntu 12.10. Byłem w stanie to zrobić, przechodząc do Ustawienia systemowe -> Klawiatura -> Ustawienia układu -> Opcje, które zawiera listę klawiszy i alternatywnych zachowań. Działa bezbłędnie w Jedności i terminalu.
Allyl Isocyanate

1
Jeśli masz podłączonych wiele klawiatur, czy narzędzia te zauważą różnicę między tym samym klawiszem na innej klawiaturze?
stommestack

1
Dziwne, zrobiłem wszystko, ale moje keymapowania wciąż się resetują po ponownym uruchomieniu.
Costa

1
Nie sądzę, żebym miał -eventflagę w Ubuntu 12.04. Zgłasza błąd i nie wspomina o „zdarzeniu” w man xev.
izomorfizmy

20

Jeśli próbujesz przenieść klawisz Shift, istnieje kilka dodatkowych kroków:

 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

+1 Najbardziej jednoznaczna odpowiedź dla wszystkich na modyfikator (już tak zrobiłem, w przeszłości z moim iBookiem 2, kiedy chciałem, aby klawisz Enter miał funkcję Control_R, ale zapomniałem o szczegółach).
rbrito

2
Ważna odpowiedź dla użytkowników korzystających z klawiatur na laptopach Lenovo
Einar Ólafsson

16

Właśnie się zastanowiłem .. Myślę, że możesz rozumieć coś zupełnie innego przez „remap” .. ale zostawię moją odpowiedź taką, jaka jest ... (Nie wiem, jak zmienić przypisanie jednego klucza do zachowuj się jak inny)

AKTUALIZACJA : moja „refleksja” została potwierdzona; (Odpowiedziałem na złe pytanie:) ... proszę zobaczyć odpowiedź Wiki NES na Wiki (zaakceptowano powyżej).

Istnieją dwa ogólne sposoby ponownego przypisania klucza do ponownego przypisania klucza.

  • lokalnie do określonego programu
    (klucz może być używany do różnych rzeczy w różnych aplikacjach / oknach)
  • globalnie dla konkretnego użytkownika
    (klawisz ma tę samą funkcję we wszystkich oknach)

W przypadku metod „lokalnych dla programu” czasami istnieje sposób zmiany skrótów klawiszowych oferowanych przez samą aplikację ... np.

Firefoxma dodatek o nazwie keyconfig ... dla niektórych informacji zobacz ten post MozillZine

Większość programów Ubuntu jest oparta na Gnome i istnieje specjalne narzędzie do modyfikowania skrótów klawiszowych dla dowolnego elementu menu tych aplikacji Gnome ... Nazywa się Editable Menu Accelerator... Jest to bardzo „drażliwe” narzędzie, ale dość potężne. Możesz włączyć uruchamiając go gconf-editor(przez Terminal lub Alt + F2) ... przejdź do desktop- gnome- interfacei wybierz can_change_accels.... Możesz następnie zmienić elementy menu na wirtualne, co ci się podoba (na program / okno) ... Sugeruję wyłączenie gdy tylko zrobisz to, czego potrzebujesz ...

W przeciwnym razie możesz skonfigurować Globalne skróty. Korzystam z programu o nazwie xbindkeys Zainstaluj xbindkeys , a także jest dostępna opcja w Menu głównym - Preferencje, zwaneKeyboard Shortcuts

Jeśli używasz xbindkeys, musisz dodać go do „Startup Applications” (Menu główne - Preferencje) ... Również (jak sugeruje Stefano Palazzo) Wcześniej napisałem bardziej szczegółowy opis xbindkeys w odpowiedzi na ten temat strona askubuntu


+1, bardzo miło! Sugestia: Powinieneś zintegrować swoją świetną odpowiedź z innego pytania z tym pytaniem , może także nieco wyjaśnić format konfiguracji xbindkeys.
Stefano Palazzo

1
Trochę o przypisywaniu innych kluczy można poradzić sobie xdotool, sprawdź stronę podręcznika, użyłem go do rozwiązania tego problemu .
Stefano Palazzo

Niedawno znalazłem inne podejście z narzędziem o nazwie xmodmap w połączeniu z narzędziem o nazwie xev. nie wiem, jakie są różnice między xmodmap i xbindkeys, ale działa to całkiem dobrze dla mnie. jakieś porady dotyczące narzędzia, które wolą dwa z wymienionych? Oto bardzo pomocny przewodnik krok po kroku, który opisuje xmodmap i xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES

@NES .. Wygląda na to, że zająłem się niewłaściwym punktem .. Wygląda na to, że chcesz zmienić sposób interpretacji określonego klawisza przez system operacyjny, tj. Niestandardową interpretację klawiatury, podczas gdy ja mówiłem o standardowa interpretacja klawiatury i po prostu przeciążanie domyślnych przypisań klawiszy. (Myślę, że to, czego szukasz, jest podobne do zamiany lewego i prawego przycisku myszy). Cóż, wygląda na to, że moja odpowiedź była dobra na złą rzecz :)
Peter.O.

tak, ale nie ma problemu. odpowiedź jest również interesująca. przewodnik krok po kroku opublikowałem powyższy link był właściwy sposób. więc opublikuję krótką odpowiedź z rozwiązaniem, że inni użytkownicy mają dobry przewodnik. dzięki fred
NES,

9

Oto jak próbowałem przełączyć mapowanie ENTERklucza na SHIFTklucz (i odwrotnie):

$ uname -a

RAPORTY:

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

$ which xmodmap

RAPORTY:

/usr/bin/xmodmap

$ which xev

RAPORTY:

/usr/bin/xev

$ xev

(zignoruj ​​kolejne pięćdziesiąt wierszy)

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

Ważna jest trzecia linia każdego naciśnięcia klawisza:

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

ODWRÓĆ MAPOWANIE:

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

ZAPISZ WYNIKI:

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

DODAJ

 xmodmap ~/.Xmodmap

$ sudo reboot

Głównym problemem było to, że odwrócenie NIE zadziałało. ENTERKlucz został odwzorowany do SHIFT_Rklucza; ale SHIFT_Rklucz nie został zmapowany na ENTERklucz. Domyśl.


7

Aby wykonywać globalne remapy niezależnie od X, możesz zamiast tego skorzystać z konfiguracji konsoli (5) .

W moim przypadku chciałem zmienić mapowanie Caps Lockklucza D, ponieważ mój klawisz Djest zepsuty :)

Najpierw użyłem dumpkeys (1), aby uzyskać szablon do mapowania, w przypadku Dklawisza interesującym bitem jest mapowanie kodu klucza 32 (na mojej klawiaturze); Zauważ, że we wzorze grep są dwie spacje!

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

Aby zmienić mapę, aby zastosować Caps Lock(kod klucza 58 na mojej klawiaturze)

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

Teraz czyta

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

Aby dodać to mapowanie do domyślnej mapy, wystarczy dołączyć go do pliku dołączanego do mapowania w celu konfiguracji konsoli

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

i konfiguracja konsoli wymaga ponownej konfiguracji (pomijając pytania o niskim priorytecie -phigh)

sudo dpkg-reconfigure console-setup -phigh

Teraz mapowanie powinno zostać zakończone i załadowane automatycznie przy starcie systemu.


3

Spędziłem cały dzień, próbując stworzyć skrót do Ctrl+Pageup.

Najpierw próbowałem, xmodmapale nie można wygenerować zdarzeń modyfikatora. Nie można więc utworzyć skrótu, który generuje na przykład Controlzdarzenie.

Potem starał xbindkeyssię xmacro. Ten rodzaj działa, ale xbindkeysnie jest w stanie uchwycić niektórych kluczowych kombinacji w moim systemie, takich jak Alt + ___.

W końcu użyłem własnych skrótów klawiaturowych Unity -> Niestandardowe skróty, aby skonfigurować mój skrót.

I zamiast xmacrotego użyłem xvkbdprogramu do generowania zdarzeń klawiatury, ale to tylko osobiste preferencje. Oba xmacroi xvkbddziałają prawie tak samo. Dodatkową wskazówką jest dodanie parametru opóźnienia xmacrolub xvkbdupewnienie się, że zdarzenia nie zostaną utracone.


2

Dla mnie AutoKey z Software Center działało najlepiej. Ma intuicyjny interfejs graficzny, aby dodać nowe wiązanie kliknij Nowy -> Fraza i

  1. Dodaj nazwę, kliknij OK
  2. W sekcji „Ustawienia frazy” upewnij się, że opcja wklejania jest ustawiona na klawiaturę
  3. Dodaj skrót, którego chcesz użyć
  4. Dodaj polecenie do pola tekstowego, np. Aby emulować lewy klawisz strzałki - byłoby <left>(lista klawiszy specjalnych jest tutaj ).

To działało idealnie, aby skonfigurować Super+Ci Super+Vdo Ctrl+Ci Ctrl+V. Idealne rozwiązanie do korzystania z Ubuntu przez VirtualBox na komputerze Mac
Ben

Nie wyłącza to jednak innych poleceń nasłuchujących tych skrótów. Aby wyłączyć, Super+Vaby „pokazać listę powiadomień”, przejdź do Ustawienia -> Urządzenia -> Klawiatura i wyłącz ją
Ben

@Ben tak, byłoby świetnie, gdyby wyświetlał powiązania innych aplikacji, ale raczej wisienką na torcie. Mój problem polega na tym, że nie można ponownie przypisać klawisza „Fn”. Zdecydowałem się wypróbować klawiaturę uhk - ta rzecz programowalna niezależnie od systemu operacyjnego, zobaczy, jak to działa.
ego

0

Jeśli potrzebujesz ponownie przypisać klucz tylko do określonego programu, właśnie dodałem tę funkcję do hax11.

Chciałbym zmienić PgUpna Homelub PgDownna End.

Aby to zrobić za pomocą hax11, otwórz plik konfiguracyjny profilu programu w ~/.config/hax11/profiles(np. ~/.config/hax11/profiles/usr\lib\firefox\firefox) I dodaj:

Enable=1
MapK112=K110
MapK117=K115
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.