web-dev-qa-db-ja.com

CtrlキーとAltキーを再割り当てします-xmodmap'BadValue 'エラー

Emacsを使用できるようにするために、キーボードを再マップしようとしています。私の人間工学に基づいたキーボードでは、単一のControlキーを、左側の分離された4キーの島に配置しています。

OSはDebian squeezeです。

xmodmapにフィードしようとしている行は次のとおりです。それらをファイル〜/ .Xmodmapに入れます。

コントロールのクリア
 Mod1のクリア
! Altキーは、キーボードの「オプション」と表示されています
! xevを使用すると、Alt_LおよびAlt_Rキーシムをそれぞれ送信することが示されます
 keysym Alt_L = Control_L 
 keysym Alt_R = Control_R 
! Super_LキーとSuper_RキーはWindowsキーです
 keysym Super_L = Alt_L 
 keysym Super_R = Alt_R 
 add Control = Control_L Control_R 
 add Mod1 = Alt_L Alt_R 

私の目標は私のオプションを作ることです(別名 Alt)キーはControlキーのように動作し、Windows(別名スーパー)キーを次のように動作させます Alt

問題のキーに対してxevによって出力されるキーコードとkeysmsは次のとおりです。私のキーボード(Goldtouchエルゴノミックキーボード)には、コントロールキーが1つしかありません。

 keycode 37(keysym 0xffe3、Control_L)
 keycode 64(keysym 0xffe9、Alt_L)
 keycode 133(keysym 0xffeb、Super_L)
 keycode 134(keysym 0xffec、 Super_R)
 keycode 108(keysym 0xffea、Alt_R)

xmodmap .Xmodmapの実行中にxevが表示する内容は次のとおりです。

 MappingNotifyイベント、シリアル34、合成NO、ウィンドウ0x0、
リクエストMappingKeyboard、first_keycode 204、カウント1 
 
 MappingNotifyイベント、シリアル34、合成NO、ウィンドウ0x0、
リクエストMappingKeyboard、first_keycode 64、カウント1 
 
 MappingNotifyイベント、シリアル34、合成NO、ウィンドウ0x0、
リクエストMappingKeyboard、first_keycode 108、カウント1 
 
 MappingNotifyイベント、シリアル34、合成NO、ウィンドウ0x0、
リクエストMappingKeyboard、first_keycode 206、カウント1 
 
 MappingNotifyイベント、シリアル34 、合成NO、ウィンドウ0x0、
リクエストMappingKeyboard、first_keycode 133、カウント1 
 
 MappingNotifyイベント、シリアル34、合成NO、ウィンドウ0x0、
リクエストMappingKeyboard、 first_keycode 134、カウント1 

そして、これがxmodmapによって返されるエラーです。

 X失敗したリクエストのエラー:BadValue(整数パラメーターが操作の範囲外です)
失敗したリクエストのメジャーオペコード:118(X_SetModifierMapping)
失敗したリクエストの値:0x17 
失敗したリクエストのシリアル番号:17 
出力ストリームの現在のシリアル番号:17 

これを解決する方法について何か提案はありますか?

13
Aliud Alius

これはすでに Debianバグ#564327Debianバグ#565279buntuバグ#524774 、および FreeDesktopバグ20145)として報告されています。 。 FreeDesktopのバグディスカッションに添付されているソースパッチがあります。 Ubuntuのバグディスカッションにはいくつかの回避策の提案があります。特に a .Xmodmap回避策

Gilesによってリンクされた回避策を見ると、これが私にとってうまくいったことです。

clear Mod1
clear Mod4

keycode 204 = NoSymbol NoSymbol NoSymbol NoSymbol
keycode 206 = NoSymbol NoSymbol NoSymbol NoSymbol

keycode 64 = Control_L Control_L Control_L Control_L
keycode 133 = Alt_L Alt_L Alt_L Alt_L
keycode 134 = Alt_R Alt_R Alt_R Alt_R
keycode 108 = Control_R Control_R Control_R Control_R

add Control = Control_L Control_R
add Mod1 = Alt_L Alt_R

OptionキーはControlキーのように機能し、WindowsキーはAltキーのように機能します。

7
Aliud Alius

別の修飾キーにすでに追加されている修飾キーにkeysymを追加しようとすると、問題が発生します。修飾子にキーシムを追加すると、場合によってはキーシムに付随する他のすべてのキーシムがその修飾子にも追加されることを知っておくことが重要です。

例えば:

clear mod5
add mod5    = ISO_Level3_Shift Mode_switch

結果として生じる可能性があります

mod5        backslash (0x33),  Caps_Lock (0x42),  ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

あなたはのようなものを持っているので

keycode  66 = Caps_Lock NoSymbol ISO_Level3_Shift

〜/ .Xmodmap内(xmodmap -pkeを介して現在のキーコードからkeysymへのマッピングを表示します)

次のようなこともしようとすると、問題のBadValueエラーが発生します

add lock    = Caps_Lock

caps_Lockはすでにmod5モディファイアに追加されているためです。

3
Flow

これは実際の問題の答えにはなりませんが、問題の別の解決策です。 xorg.confを編集し、セクション「InputDevice」に以下を挿入します。

 Option "XkbOptions" "ctrl:swapcaps"
2
dotplus