Xmodmap nie zmienia mapowania klawiszy modyfikatora

2

Kiedy próbuję przenieść klucze, aby mieć CapsLock podczas ucieczki, Control na CapsLock i Escape na lewym klawiszu sterowania, pojawia się następujący błąd:

% xmodmap ~/.Xmodmap
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  15
  Current serial number in output stream:  15

Oto kod, który zawodzi:

remove Lock = Caps_Lock

! ESC
keycode 9 = Caps_Lock
add Lock = Caps_Lock
remove Control = Control_L

! CapsLock
keycode 66 = Control_L
add control = Control_L

! Control_R
keycode 37 = Escape

! 2*Meta_L
keycode 148 = Meta_L
add mod1 = Meta_L

Jeśli skomentuję wszystkie wiersze, które zaczynają się od któregoś z nich addlub removedziałają bezbłędnie, ale nie robią tego, co chcę.

Wersje programu (Gentoo x86 (stabilny)):

  • xorg-server-1.7.6
  • xmodmap-1.0.4
  • xf86-input-evdev-2.3.2

Xorg.conf:

# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 1.0  (buildmeister@builder63)  Fri Aug 14 17:54:58 PDT 2009

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
    InputDevice    "Evdev Keyboard" "CoreKeyboard"
    InputDevice    "Evdev Mouse" "CorePointer"
EndSection
Section "Module"
    Disable "dri"
    Disable "dri2"
EndSection

Section "InputDevice"
    Identifier  "Evdev Keyboard"
    Driver      "evdev"
    Option      "Device"     "/dev/input/event2"
    Option      "CoreKeyboard"
    Option      "AutoRepeat" "500 25"
    Option      "XkbRules"   "xorg"
    Option      "XkbModel"   "yahoo"
    Option      "XkbLayout"  "dvp2"
    Option      "XkbOptions"  "grp_led:scroll,grp:rctrl_toggle,compose:rwin,grp:lwin_switch"
EndSection

Section "InputDevice"
   Identifier    "Evdev Mouse"
   Driver        "evdev"
   Option        "CorePointer"
   Option        "Device"                    "/dev/input/event3"
   Option        "Name"                      "Genius Ergo Mouse"
   Option        "HWHEELRelativeAxisButtons" "7 6"
   Option        "WHEELRelativeAxizButtons"  "4 5"
   Option        "SendCoreEvents"            "true"
   Option        "Buttons"                   "11"
EndSection

Section "Files"
    FontPath "/usr/share/fonts/misc"
    FontPath "/usr/share/fonts/Type1"
    FontPath "/usr/share/fonts/100dpi"
    FontPath "/usr/share/fonts/75dpi"

    FontPath "/usr/share/fonts/terminus"
    # FontPath "/usr/share/fonts/intlfonts"

    FontPath "/usr/share/fonts/ttf-bitstream-vera"
    # FontPath "/usr/share/fonts/ttf"
    FontPath "/usr/share/fonts/corefonts"

    FontPath "/usr/share/fonts/paratype"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

#Section "Extensions"
    #Option "Composite" "Disable"
#EndSection
Section "ServerFlags"
    Option         "AutoAddDevices" "false"
    Option         "DontVTSwitch" "false"
    Option         "DontZap" "false"
    Option         "DontZoom"     "true"
EndSection

Wszystko działało przed aktualizacją.

ZyX
źródło
Mogę zapomnieć o Caps Lock: nie używam go i używam xkboption ctrl:nocapsdo mapowania kontroli na Caps Lock. Ale jak zmapować mod1 (alt) na XF86Calculatorklawisz (znajduje się w pobliżu spacji na klawiaturze)?
ZyX
Ostatni problem został rozwiązany: aby zmapować XF86Calculatormodyfikator alt, muszę wziąć nazwę postaci istniejącego modyfikatora (tak jest Alt_L). Nadal zastanawiam się, jak odwzorować ucieczkę na czapkę, ale, jak powiedziałem, nigdy jej nie używam.
ZyX
Otrzymuję ten sam błąd, także w Gentoo.
Flow

Odpowiedzi:

3

W większości przypadków, gdy pojawia się ten błąd, to dlatego, że próbuję przypisać symulator klucza do modyfikatora, ale symulator ten jest już używany dla innego modyfikatora. Spróbuj uruchomić „xmodmap -pm” i sprawdź, czy kombinacje klawiszy, które próbujesz przypisać modyfikatorom, nie są już używane.

Na przykład, jeśli Meta_L jest już przypisany, powiedzmy, do mod4, możesz otrzymać ten błąd, jeśli spróbujesz przypisać Meta_L do mod1 bez uprzedniego usunięcia go z mod4.

Per Knytt
źródło
3

Zgodnie z instrukcją Xmodmap istnieje co najmniej jeden kluczowy krok, który wydaje się pominięty. Musisz nie tylko „usunąć” przypisania bitów modyfikatora, ale także „wyczyścić” klucze z grup modyfikatorów.

Tak, to jest mylące, wiem!

Wydaje się również, że te zadania / polecenia muszą być uruchamiane w określonej kolejności:

  1. Usuwanie / usuwanie przypisań do grup i kluczy
  2. Przypisz klawisze do żądanych kodów klawiszy
  3. Dodaj klucze do odpowiednich grup modyfikatorów

Widzę, że ten wątek był przez jakiś czas nieaktywny i jest wyraźnie martwy (PO rozwiązał ten problem lub zrezygnował z niego). Ale mam nadzieję, że to wyjaśnienie może pomóc komuś innemu poradzić sobie z podobną sytuacją.

AuralArch
źródło