複数のスキャンコードを生成するキーの再マッピング


33

ThinkPad W540を持っています。キーボードには、テンキーの上に4つのマルチメディアキーがあります。これらのキーのうち2つは、キーの組み合わせWin_L+ LWin_L+に対応するキーコード(および、明らかに、スキャンコード)を生成しますE。つまり、Win_L+ を生成するキーのL場合、
showkey --scancodesこれを返します。

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

このsetkeycodesコマンドは、スキャンコードを示すために、エスケープされていない1バイトまたはエスケープされた2バイトシーケンスのいずれかを必要とshowkeyし、それ以上の方法を提供しますsetkeycodes <scancode> <keycode>

キーボード上の既存のキーの組み合わせの1つを単純に複製しない他の何かにそのキーを再マップする方法についてのヒントを本当に感謝します。


1
これを見てみたいと思うかもしれません:キーボードレイアウトに依存しないショートカットキー
terdon

1
少なくとも古いThinkpadでは、この種のマッピングはOSではなくオンボードコントローラーによって行われます。
ミラビロス14

1
同じ問題のあるMicrosoft All-in-One Media Keyboardを持っていますが、解決策を見つけることができましたか?
osolmaz

5
少し前に、Thinkpad t61で似たようなことをし/etc/acpi/events ました。acpidパッケージ内のwhich を使用してキーをマッピングし、それらのファンクションキーが押されたときのアクションを定義するだけです。
セザール

2
X-windowsの修飾子としてWin_Lをセットアップしていますか?私のデフォルトです。
mcr

回答:


1

これは2つの手順で実行できます。

  1. キーの組み合わせをキャッチする
  2. 異なるキーの入力をシミュレートします。

あなたは使用することができるxchainkeysために1[xdotool][2]するために2

を使用してシミュレートされた新しいキーを作成するには、元のシミュレートされた修飾キーをxdotool無効--clearmodifierskeyするオプションが重要になる場合があります。

xdotool key --clearmodifiers Shift+a

これはA、テストとして大文字を入力する必要があります。

inの構成でxchainkeys~/.config/xchainkeys/xchainkeys.conf、コマンドをキーの組み合わせにバインドできます。

W-l :exec xdotool key --clearmodifiers Shift+a

これで、キーの組み合わせWinand lWin左または右が同じこと)、およびWin_L + Lを生成するキーにより、大文字が作成されますA

(両方の部分で利用可能な他の多くのプログラムがあります。最初は、デスクトップ環境のホットキー構成を使用できますが、DEから独立したままにしておくことを好みます。)


2
このソリューションの問題は、私が間違えなければ、単に上記のキーの組み合わせを使用してアクションをトリガーすることと同じです。そのアクションは、そのキーだけではトリガーされず、同じキーを生成する実際のキーの組み合わせを押すと、コードでも同じ結果が得られます。言い換えると、「既存のキーの組み合わせの1つを単純に複製しない他のキーにそのキーを再マップする」という条件を満たしていません。しかし、私は努力に感謝します。
ムーンウォーカー

3
はい、それは真実です-あなたはその文が何を意味していたのか分かりませんでした、今私は理解しています。しかし、あなたのキーはハードウェア(つまり、キーボードファームウェア)で2つのキーコードを生成するように見えます。そのため、人工キーを押すタイミングを検出することを除いて、「modifier down」、「other key」、 「修飾子アップ」。うーん...多分はんだ付けを含む解決策はもっと簡単です;)
Volker Siegel

1
@moonwalker他のキーの代わりにWin_Lを再マップして、他のキーの修飾子も再マップするかどうかを確認できますか?
フォルカーシーゲル

1
ええと、Win_L + R、Win + Break、Win + L、Win + etcなどの組み合わせを失うことはないでしょうか。その場合?
ムーンウォーカー

1
いいえ、そうは思いません。Win-LはWin-Shift-l、しかし、キーの組み合わせのチェーンをコマンドにマップすることもできます。好きでWin-a、その後b。を使用しないとWin-ab正常に動作します。これは、の最も便利な機能でxchainkeysあり、非常にユニークです。
フォルカーシーゲル

-2

これは、バックスラッシュ/パイプキーを正しいキーに再バインドするために、Thinkpad Yogaで行ったことです。なぜなら、すべてのLinux仮想マシンでは何らかの理由で、バックスラッシュ\パイプ(\ |)キーが小なり(<)キーとして解釈されたためです。

最初にコマンドを実行します: xev

目的のキーを押して、再バインドするキーのキーコードを取得します。

xev KeyPressイベント出力

この例では、キーコードは94であり、アクションは「少ない」ですが、バックスラッシュとバーの別名「パイプ」のアクションが必要です

キーコード94をバックスラッシュとバーキー(別名「パイプ」)に再マッピングします。

xmodmap -e 'keycode 94 = backslash bar'

これを永続的にしましょう:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

ファイルに次を返します~/.Xmodmap

keycode  94 = backslash bar backslash bar

次に、次のファイルを作成して永続化を完了する必要があります。

echo "xmodmap .Xmodmap" > ~/.xinitrc

1
バックスラッシュ/パイプキーは単一のスキャンコードを生成します。トピックは、複数のスキャンコードを生成するキーの再マッピングについてです。
ムーンウォーカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.