Ponowne mapowanie kluczy generujących wiele kodów skanowania


33

Mam ThinkPad W540. Na klawiaturze znajdują się cztery klawisze multimedialne nad klawiaturą numeryczną. Dwa z tych kluczy generują kody klawiszy (i, najwyraźniej, scancodes), które odpowiadają kombinacji klawiszy, Win_L+ Li Win_L+ E. Innymi słowy, dla klucza, który generuje Win_L+ L,
showkey --scancodeszwraca to:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

setkeycodesPolecenie wymaga ani jednego bajta Niecytowany lub uciekł sekwencje dwóch bajtów oznaczające kody skanowania i showkeydaje mi dużo więcej niż to, więc nie mogę całkiem ponownie mapę, która klucz do jednego z wolnych kody klawiszy w moim systemie z prostych setkeycodes <scancode> <keycode>.

Byłbym naprawdę wdzięczny za wszelkie wskazówki, jak mogę przypisać ten klucz do czegoś innego, co nie powiela jednej z istniejących kombinacji klawiszy na mojej klawiaturze.


1
Możesz
rzucić

1
Myślę, że może to być trudne: przynajmniej na starszych Thinkpadach tego rodzaju mapowanie jest wykonywane przez kontroler pokładowy, a nie system operacyjny.
mirabilos

1
Mam klawiaturę multimedialną Microsoft All-in-One, która ma ten sam problem. Czy udało Ci się znaleźć rozwiązanie?
osolmaz

5
Zrobiłem coś podobnego na Thinkpad t61 jakiś czas temu, mapując klawisze, /etc/acpi/events które są w acpidpakiecie i po prostu definiując akcję po naciśnięciu tych klawiszy funkcyjnych.
cesar

2
Czy masz konfigurację Win_L jako modyfikator w X-Windowsie? To jest dla mnie domyślne.
mcr

Odpowiedzi:


1

Możesz to zrobić w dwóch krokach:

  1. łapać kluczowe kombinacje
  2. symulować pisanie różnych klawiszy.

Można używać xchainkeysna 1. i [xdotool][2]na 2. :

Aby utworzyć nowy klucz z symulowanym xdotool, opcja --clearmodifiersz keymoże być ważne, aby zneutralizować oryginalny symulowane modyfikujący prasy:

xdotool key --clearmodifiers Shift+a

To powinno wpisać kapitał Ajako test.

W konfiguracji xchainkeysin ~/.config/xchainkeys/xchainkeys.confmożemy powiązać polecenie z kombinacją klawiszy:

W-l :exec xdotool key --clearmodifiers Shift+a

Teraz kombinacja klawiszy Wini l( Winlewy lub prawy to samo), a także klawisz, który generuje Win_L + L, powinny stworzyć kapitał A.

(Istnieje wiele innych programów dostępnych dla obu części. Po pierwsze, można użyć konfiguracji skrótu w środowisku pulpitu, ale wolę zachować niezależność od DE).


2
Problem z tym rozwiązaniem, jeśli się nie mylę, byłby taki sam jak zwykłe użycie wspomnianej kombinacji klawiszy do uruchomienia akcji - ta akcja nie byłaby wyzwalana tylko przez ten klawisz, naciskając rzeczywistą kombinację klawiszy, która generuje to samo kody również dawałyby ten sam wynik. Innymi słowy, nie spełnia warunku „zmiany przypisania tego klucza do czegoś innego, co nie powiela jednej z istniejących kombinacji klawiszy”. Ale doceniam wysiłek.
moonwalker

3
Tak, to prawda - nie byłem pewien, co masz na myśli przez to zdanie, teraz rozumiem. Ale wygląda na to, że twój klucz wytwarza dwa kody klucza w sprzęcie (to znaczy w oprogramowaniu klawiatury) - więc nie widzę żadnej wojny, z wyjątkiem tego, że wykrywasz czas naciśnięcia sztucznego klawisza „modyfikator w dół”, „inny klucz”, „modyfikator w górę”. Hmm ... może rozwiązanie polegające na lutowaniu jest prostsze;)
Volker Siegel

1
@moonwalker Czy możesz spróbować ponownie mapować Win_L zamiast drugiego klawisza i sprawdzać, czy to również mapuje modyfikator drugiej osoby?
Volker Siegel,

1
um, czy nie straciłbym kombinacji takich jak Win_L + R, Win + Break, Win + L, Win + itp. w tym wypadku?
moonwalker

1
Nie, nie sądzę. Win-L to Win-Shift-lAle możesz również odwzorować łańcuchy kombinacji klawiszy na polecenie. Jak Win-ai po tym b. Zz Win-a, bzachowuje się normalnie. To zdecydowanie najbardziej użyteczna funkcja xchainkeys, jak sądzę, dość wyjątkowa.
Volker Siegel

-2

Tak zrobiłem na moim Thinkpad Yoga, aby ponownie powiązać klawisz odwrotnego ukośnika / potoku z odpowiednim klawiszem. Ponieważ z jakiegoś powodu w każdej maszynie wirtualnej systemu Linux interpretował klawisz ukośnika \ potok (\ |) jako klawisz mniejszy niż (<).

Najpierw wykonaj polecenie: xev

Naciśnij żądany klawisz, aby uzyskać kod klucza, który chcesz ponownie powiązać:

xev Wyjście zdarzenia KeyPress

W tym przykładzie kodem kluczowym jest 94, a akcja jest „mniejsza”, ale chcemy, aby miała działanie odwrotnego ukośnika i baru, czyli „potoku”

Zmień przypisanie kodu 94 do odwrotnego ukośnika i klawisza paska, zwanego „potokiem”:

xmodmap -e 'keycode 94 = backslash bar'

Teraz uczyńmy to trwałym:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

Zwraca do pliku ~/.Xmodmap:

keycode  94 = backslash bar backslash bar

Następnie musisz utworzyć następujący plik, aby zakończyć tworzenie trwałego pliku:

echo "xmodmap .Xmodmap" > ~/.xinitrc

1
Klawisz odwrotnego ukośnika / potoku generuje pojedynczy kod skanowania, tematem jest ponowne mapowanie kluczy generujących wiele kodów skanowania.
moonwalker
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.