アプリケーションキーマップの修飾キーである CapsLock

アプリケーションキーマップの修飾キーである CapsLock

私は開発者で、現在Ubuntu LinuxとPyCharm IDEを使用してウェブサイトを開発しています。タイピングのパフォーマンスを向上させるために、CapsLockをHyper_Lに変更し、xmodmapを使用してmod3に割り当てることを検討しました。次に、「i」キーのmod3を「Up」にマッピングしたいと思います。これまで私がしたことは次のとおりです。

xmodmap -e "keysym Caps_Lock = Hyper_L"

出力は次のとおりです。

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

その後、mod4からHyper_Lを削除しました。

xmodmap -e "remove Mod4 = Hyper_L"

その後、Hyper_Lをmod3に割り当ててみました。

xmodmap -e "add Mod3 = Hyper_L"

ただし、次のエラーが発生します。

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:  11
  Current serial number in output stream:  11

それでは、ここで何が間違っていますか?どのように動作させることができますか?私がしっかりしているのか?それとも、mod3をカスタムキーとして使用するために別のアプローチを使用する必要がありますか?

PS 私はMicrosoft Natural Ergonomic 7000キーボードを使用しています。

答え1

インターネットには多くの答えがあり、ほとんど混乱しています。

キーは、「キーコード66」をスーパーキーにマッピングし、他のモード{1,2,4,5}(存在する場合のみ)からそのキーのマッピングを削除してからmod3を設定する必要があることです。

~/.Xmodmap を開き、次のように入力します。

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

これを実行

xmodmap ~/.Xmodmap

問題が発生した場合は、次の方法でキーボードをリセットできます。

setxkbmap -layout us

爆発の考えられる原因は、Hyper_Lが他の場所にマッピングされていることです。パラメータなしでxmodmapを実行して、Hyper_Lにバインドされている他のエントリを見つけて、この問題を解決してください。削除する項目がわかったら、.Xmodmap ファイルに「remove BINDING=Hyper_L」を追加します。

X11セッションを開くと、.Xmodmapファイルがロードされ、次回ログインまたは再起動するときにマップを準備する必要があります。

この設定は私のUbuntu 14.04設定で動作します。他の* nixがあり、これがうまくいかない場合は、ここで問題を解決するために行ったことを投稿してください。答えにマージします。

答え2

この質問は古くなっていることを知っていますが(残念ながら)heymanthewの答えが私には合わなかったので、ソリューションを共有する必要があります。ついに私に効果があったのは次のとおりです。

setxkbmap -layout us -option lv3:caps_switch -variant intl

これにより、caps lockがmod3キーでアクティブになり、レイアウトが「us」に設定され、バリアントが「intl」に設定されます。 Fishなどの対話型シェルを使用している場合は、「-layout」、「-option」、または「-variant」の後にTabキーを押して、可能な引数の完全なリストを取得できます。

追加の背景情報:1年前、私は標準のgnome環境で切り替えてi3ウィンドウマネージャを実行しているUbuntuシステムでxmodmapメソッドを試しました。 "us" xkbキーボードレイアウト、特にデッドキー付きの国際キーボードレイアウトを修正しました。 gnome-desktop-managerを使用するとうまく機能しますが(caps-lockをmod3キーに設定するオプションがあります)、取得できません。 xmodmapで動作します。これは私の間違いでした。 gdm GUIがxmodmapを使ってcaps lockをmod3にマッピングすると考えましたが、実際にはこのX11オプションを設定していました。 Archに切り替えたので、この問題を解決する必要があります。

この問題を解決したい人は、誰でもlocalectl、xmodmap、setxkbmapのマニュアルページを読んで、スリープセクションと再開セクションを追加してレイアウトをテストすることをお勧めします。

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

これにより時間が大幅に節約されます。

しかし、xmodmapメソッドが機能しない理由はまだ理解されていません。これが誰かに役立つことを願っています。

関連情報