キーコードを探す

キーコードを探す

私はmanjaro i3を使用しており、私が作成したキーマップのいくつかを修正したいと思います。私は現在、xcape、xmodmap、およびsetxkbmapコマンドを使用して次のキーを再マップしています。

  1. 制御するには長押しし、終了するには押します。
  2. セミコロンとコロンの変更

私は次の設定スクリプトを使ってこれを行いました。

setxkbmap -option 'caps:ctrl_modifier'
xcape -e 'Caps_Lock=Escape'
xmodmap -e "keycode 47 = colon semicolon"

キーマップが破損したため、以下に示す印刷画面を使用して再マップするときに最初に戻るには、OSを再インストールする必要があるため、追加の変更についてのヘルプやアドバイスが必要です。私が望む変更は次のとおりです。

  1. スクリーン印刷 - >無効または別のスーパーキーとして使用
  2. 左Alt->モード切り替えキー
  3. Escキー - >チルダとバックティック
  4. 元のチルダとバックティック - >バックスペースキー
  5. バックスペースキー - >削除
  6. ホーム、シャットダウン、挿入、削除キーを無効にしてマッピングして、いくつかのスクリプトを実行します。
  7. mode_switch + h、j、k、l -->追加の矢印キー
  8. mode_switch +バックスペースキー - >ホーム
  9. 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_switchShiftに似た単一の汎用修飾子です。多くのキーボードはMode_switchもはや専用(AltGr)キーを提供していないようですがxmodmap

# Set left Alt as Mode_switch
xmodmap -e "keycode 108 = Mode_switch"

GNOME設定を使用してスクリプトを実行するxbindkeys

どのように使用するのかわかりませんxmodmap。しかし、いくつかの簡単な方法があります。

i3構成で

これi3 ドキュメントファイルに/ディレクティブを使用する例がありますbindsymbindcode~/.config/i3/config

bindcode 214 exec /home/you/some_script.sh

まだi3を設定しておらず、これをテストしていませんが、ユーザーズマニュアルからすぐに来たのです。私の考えでは、このコードはxmodmap&Friendsで見つけたコードと一致すると思います。

小人

確認する設定>デバイス>キーボード>キーボードショートカット。プラス記号をクリックしてスクリプト/キーの組み合わせを追加します。フルパス(ルートディレクトリから)をスクリプトに入力し、実行可能であることを確認する必要があります。

キーボードショートカットのGNOME設定ウィンドウのスクリーンショット

私のテストでは、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に関する追加情報
より包括的で難しい解決策は次のとおりです。独自のキーボードレイアウトを作成

おすすめ記事