web-dev-qa-db-ja.com

Xmodmapが修飾キーの再マップに失敗する

キーを移動しようとすると、CapsLockをエスケープ、ControlをCapsLock、Escapeを左側のコントロールに設定すると、次のエラーが発生します。

% 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

それは失敗するコードです:

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

addまたはremoveで始まるすべての行をコメントアウトすると、エラーなしで実行されますが、希望どおりに実行されません。

プログラムバージョン(Gentoo x86(安定版)):

  • 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

更新前にすべてが機能しました。

3
ZyX

Xmodmap Manual によると、省略したように見える重要なステップが少なくとも1つあります。モディファイアビットの割り当てを「削除」するだけでなく、モディファイアグループからキーを「クリア」する必要があります。

はい、それはIS紛らわしい、私は知っています!

また、これらのタスク/コマンドは特定の順序で実行する必要があるようです。

  1. グループとキーへの割り当ての削除/クリア
  2. キーシムを目的のキーコードに割り当てます
  3. キーシムを適切な修飾子グループに追加します

このスレッドはしばらくの間非アクティブであり、明らかに死んでいることがわかります(OPはこの問題を解決したか、あきらめました)。しかし、うまくいけば、この説明が他の誰かが同様の状況に対処するのに役立つかもしれません。

4
AuralArch

ほとんどの場合、このエラーが発生するのは、key-symを修飾子に割り当てようとしたが、そのkey-symがすでに別の修飾子に使用されているためです。 「xmodmap-pm」を実行して、修飾子に割り当てようとしているkey-symsがまだ使用されていないことを確認してください。

たとえば、Meta_Lがすでにmod4に割り当てられている場合、最初にmod4から削除せずにMeta_Lをmod1に割り当てようとすると、このエラーが発生する可能性があります。

4
Per Knytt