アプリケーションキーマップの修飾キーとしてのCapsLock


11

私は開発者であり、現在、ウェブサイトの開発に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キーボードを使用しています

回答:


20

インターネットには無数の回答があり、それらのほとんどは混乱しています。

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

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

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


@antindexerはうまくいきましたか?
heymatthew 14

私はかなり多くの答えを試しましたが、これは私のために働いたものです。少なくとも、ベアメタルLinuxインストールではそれが行われました。奇妙なことに、QEMU / KVMで失敗し、Caps Lockキーを交互に押したときにのみ機能します。
ダイアゴン2018年

0

私はこの質問がかなり古いことを知っていますが、(欲求不満で)heymantthewの答えが私にとってうまくいかなかったので、私の解決策を共有する必要があります。最終的に私のために働いたこと:

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

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

その他の背景:標準のgnome環境から切り替えて、1年前にi3ウィンドウマネージャーを実行しているUbuntuマシンでxmodmapアプローチを試しました。「us」のxkbキーボードレイアウト、特にデッドキーを使用する国際的なレイアウトを変更しました。gnome-desktop-managerを使用すると問題なく機能しました(mod3キーとしてcaps-lockを設定するオプションがあります)が、できませんでした。 xmodmapで動作するようにします。これは私の間違いでした:gdm GUIがxmodmapを使用してcaps lockをmod3にマッピングしていると思いましたが、実際にはこのX11オプションを設定していました。Archに切り替えたので、それを理解する必要がありました。

これをいじって、localectl、xmodmap、setxkbmapのmanページを読んで、sleepとrevertの部分を追加してレイアウトをテストすることを計画している人にすすめます。

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

これにより、かなりの時間を節約できました。

ただし、xmodmapアプローチが機能しない理由はまだわかりません。これが誰かを助けることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.