web-dev-qa-db-ja.com

アプリケーションキーマップの修飾キーとしての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を使用するには、別のアプローチを使用する必要がありますか?

P.S. Microsoft Natural Ergonomic7000キーボードを使用しています

11
Khamidulla

インターネット上には何百万もの答えがあり、それらのほとんどは混乱しています。

重要なのは、「キーコード66」をハイパーキーにマッピングし、そのキーのマッピングを他のmod {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が別の場所にマップされていることです。 argsなしでxmodmapを実行してこれを修正し、Hyper_Lに他に何がバインドされているかを調べます。何を削除する必要があるかがわかったら、.Xmodmapファイルの「remove BINDING = Hyper_L」をチャックします。

.Xmodmapファイルは、X11セッションを開いたときに読み込まれます。次回ログインまたは再起動したときに、このマッピングを設定しておく必要があります。

この構成は、ubuntu 14.04セットアップで機能します。別の* nixを使用していて、これが機能しない場合は、それを回避するために行ったことをここに投稿してください。回答に組み込みます。

20
heymatthew

私はこの質問がかなり古いことを知っていますが、(イライラして)heymantthewの答えが私にとってうまくいかなかったので、私の解決策を共有する必要があります。何が私のために働いたのか:

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

これにより、mod3キーとしてcapslockが有効になり、レイアウトを「us」に設定し、バリアントを「intl」に設定します。魚のようなインタラクティブシェルを使用する場合は、「-layout」、「-option」、または「-variant」の後にTabキーを押すと、可能なパラメーターの完全なリストを取得できます。

その他の背景:1年前にi3ウィンドウマネージャーを実行しているUbuntuマシンで、標準のgnome環境から切り替えて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アプローチが機能しない理由はまだわかりません。これが誰かを助けることを願っています。

0
Mark I.O.