私はmanjaro i3を使用しており、私が作成したキーマップのいくつかを修正したいと思います。私は現在、xcape、xmodmap、およびsetxkbmapコマンドを使用して次のキーを再マップしています。
- 制御するには長押しし、終了するには押します。
- セミコロンとコロンの変更
私は次の設定スクリプトを使ってこれを行いました。
setxkbmap -option 'caps:ctrl_modifier'
xcape -e 'Caps_Lock=Escape'
xmodmap -e "keycode 47 = colon semicolon"
キーマップが破損したため、以下に示す印刷画面を使用して再マップするときに最初に戻るには、OSを再インストールする必要があるため、追加の変更についてのヘルプやアドバイスが必要です。私が望む変更は次のとおりです。
- スクリーン印刷 - >無効または別のスーパーキーとして使用
- 左Alt->モード切り替えキー
- Escキー - >チルダとバックティック
- 元のチルダとバックティック - >バックスペースキー
- バックスペースキー - >削除
- ホーム、シャットダウン、挿入、削除キーを無効にしてマッピングして、いくつかのスクリプトを実行します。
- mode_switch + h、j、k、l -->追加の矢印キー
- mode_switch +バックスペースキー - >ホーム
- mode_switch +削除 - >終了
これらの再マッピングを実行するにはどのツールを使用する必要がありますか?また、過去に使用した類似の例を持っている人がいるなら、それも本当に役に立ちます!助けてくれてありがとう。
答え1
GNOMEでPop!_OS(Ubuntu 18.10の派生バージョン)を実行しているThinkPad P1で、以下のすべてを確認しました。
キーコードを探す
xev
端末で実行して入力を開始します。多くのデータがありますが、探しているのは通常、次の単語の後のブロックの2番目の3行目ですkeycode
。
KeyRelease event, serial 37, synthetic NO, window 0x3c00001,
root 0x1a5, subw 0x0, time 291165043, (404,446), root:(454,634),
state 0x0, **keycode 107** (keysym 0xff67, Menu), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
一部のキーはxev
「Print Screen」などのキーコードを印刷しません。これを行うには、次のセクションで生成されたファイルをgrepできます。
必要なツール
xmodmap
現在のバインディングダンプ
を実行して、現在のマッピングを標準出力として印刷できますxmodmap -pke
。まず、レイアウトをファイルにバックアップすると、xmodmap
潜在的な問題を回避できます。
xmodmap -pke ~/.Xmodmap.orig
キーがに表示されない場合xev
。
cat ~/.Xmodmap | grep Print
keycode 107 = Print Sys_Req Print Sys_Req
バインドコマンドをすばやく変更
すでに知っていますが、もう一度申し上げると次のようになります。
xmodmap -e "keycode [number] = [keys...]"
これにより、セッションのキーが一時的に再バインドされます。再実行すると、xmodmap -pke
これらの変更が反映されます。
通事論
xmodmap
スペースで区切られた列を使用して表示されますkeycode
。左から右へ:
- キー自体
- Shift+キー
- モード切替+ボタン
- モード_スイッチ+Shift+キー
たとえば、
xmodmap -e "44 = j J Down Next"
これは「J」キー「j」のみを設定し、Shiftキーを押すと「J」を設定し、Mode_switchを押すと下矢印を設定し、Mode_switchとShiftを押すとPage Downを設定します。
Mode_switch
Mode_switch
Shiftに似た単一の汎用修飾子です。多くのキーボードはMode_switch
もはや専用(AltGr)キーを提供していないようですがxmodmap
。
# Set left Alt as Mode_switch
xmodmap -e "keycode 108 = Mode_switch"
GNOME設定を使用してスクリプトを実行するxbindkeys
どのように使用するのかわかりませんxmodmap
。しかし、いくつかの簡単な方法があります。
i3構成で
これi3 ドキュメントファイルに/ディレクティブを使用する例がありますbindsym
。bindcode
~/.config/i3/config
bindcode 214 exec /home/you/some_script.sh
まだi3を設定しておらず、これをテストしていませんが、ユーザーズマニュアルからすぐに来たのです。私の考えでは、このコードはxmodmap
&Friendsで見つけたコードと一致すると思います。
小人
確認する設定>デバイス>キーボード>キーボードショートカット。プラス記号をクリックしてスクリプト/キーの組み合わせを追加します。フルパス(ルートディレクトリから)をスクリプトに入力し、実行可能であることを確認する必要があります。
私のテストでは、GNOMEではHomeやEndなどの特定のキーを使用できませんでした。
xbindkeys
xbindkeys
すべてのキーストロークを傍受してスクリプトを実行できます。
一部の構成ファイルの例については、xbindkeys --defaults > $HOME/.xbindkeysrc
ファイルを実行して確認してください。
端末を開かずにプロセスでファイルを実行するだけです。
あなたの模範
これは必要に応じて実行される実際のコマンドです。自分のキーコードをぜひご確認ください。私が持っているキーコードです。
ステップ1:再マッピングxmodmap
# print screen --> use as another super key, print screen with Mode_switch
# Note: On GNOME, it appears Super_R doesn't work the same as Super_L
xmodmap -e "keycode 107 = Super_L NoSymbol Print Sys_Req"
# left alt --> mode_switch key
xmodmap -e "keycode 64 = Mode_switch NoSymbol"
# escape key --> tilde and backtick
# Note: this can have unexpected consequences if you use `xcape` to map
# Control/Caps to send Escape when tapped. It will instead send `/~ when you
# press Caps Lock attempting to get Escape.
# A solution might be to switch the keys around and use a non-op key as a
# placeholder, like in the xcape README
# https://github.com/alols/xcape/blob/master/README.md#examples
xmodmap -e "keycode 9 = grave asciitilde grave asciitilde"
# original tild and back tick --> backspace
xmodmap -e "keycode 49 = BackSpace"
# backspace --> delete, and
# mode_switch + backspace --> home
xmodmap -e "keycode 22 = Delete NoSymbol Home"
# mode_switch + delete --> end
# Note: This won't work when combined with `xbindkeys`, since `xbindkeys`
# hijacks the entire Delete key from X.
xmodmap -e "keycode 119 = Delete NoSymbol End"
# mode_switch + h, j, k, l --> additional arrow keys
# Bonus: capital J/K are Page Down/Up, H/L are Home/End with Mode_switch + Shift
xmodmap -e "keycode 43 = h H Left Home"
xmodmap -e "keycode 44 = j J Down Next"
xmodmap -e "keycode 45 = k K Up Prior"
xmodmap -e "keycode 46 = l L Right End"
ステップ2:変更を保存
# Write current config to a file
xmodmap -pke > ~/.Xmodmap
# Load the config into xmodmap
xmodmap ~/.Xmodmap
上記の最後のコマンドをまたは~/.profile
に追加すると、ログインする~/.bash_profile
たびにロードされます(標準設定があると仮定)。私にとっては少し遅いので、すべてのxmodmap -e
コマンドを手動で追加したいかもしれません。
ステップ3:カスタムスクリプトのバインディングを設定するxbindkeys
インストールされていることを確認し、xbindkeys
ファイルに追加します~/.xbindkeysrc
。
# disable home, end, insert, delete keys and map them to run some script, and
"some-script-in-PATH"
Home
"some-script-in-PATH"
End
"some-script-in-PATH"
Insert
"some-script-in-PATH"
Delete
その後、再ロードしてくださいxbindkeys -p
。
ステップ4:ステップ4なし
追加読書
再マッピングに関するEmacs Wikiページ
xmodmapのEmacs Wikiページ
XmodmapのArch Wiki
StackExchangeのMode_switchに関する追加情報
より包括的で難しい解決策は次のとおりです。独自のキーボードレイアウトを作成。