通常のキーボードの横にマクロとショートカットを実行するために使用する小さな数字パッドがあります。このキーにマクロとショートカットを添付できます(たとえば、テンキー1はアクティブウィンドウを最小化します。)が、私のデフォルトのキーボードの数字キーパッドもショートカットを有効にします。
セカンダリキーボードを完全に独立して実行し、ショートカットキーを接続する方法が必要です。
これが私が得た結果ですxinput
。
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ LVT Recon gaming mouse id=10 [slave pointer (2)]
⎜ ↳ LVT Recon gaming mouse id=11 [slave pointer (2)]
⎜ ↳ Corsair Corsair K30A Gaming Keyboard id=13 [slave pointer (2)]
⎜ ↳ SIGMACHIP USB Keyboard id=18 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Corsair Corsair K30A Gaming Keyboard id=12 [slave keyboard (3)]
↳ Corsair Corsair K30A Gaming Keyboard id=14 [slave keyboard (3)]
↳ LVT Recon gaming mouse id=15 [slave keyboard (3)]
↳ Corsair Corsair K30A Gaming Keyboard id=16 [slave keyboard (3)]
↳ SIGMACHIP USB Keyboard id=17 [slave keyboard (3)]
↳ SIGMACHIP USB Keyboard id=19 [slave keyboard (3)]
答え1
しかし、私の他の答えおそらくほとんどのLinuxで実行されます。古いものですが、SystemDとudevは実際に作業を簡単にします。
lsusb
追加のキーボードのベンダーと製品コードを見つけるために使用されます。 (私の場合はSupply 145F、Product 0177です。必ず大文字で入力してください。)/etc/udev/hwdb.d/90-extra-keyboard.hwdb
次のような内容でファイルを作成します。
evdev:input:b0003v145Fp0177*
KEYBOARD_KEY_7005b=stopcd
最初の行はデバイスを識別します。 v次の4文字はベンダー・コードであり、pの後には前のステップの製品コードが続きます。各行はスキャンコードをシンボル名にマップします。スキャンコードを取得するにはevtest
:
Event: time 1553711252.888538, -------------- SYN_REPORT ------------
Event: time 1553711257.656558, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70059
Event: time 1553711257.656558, type 1 (EV_KEY), code 79 (KEY_KP1), value 1
シンボル名の目的を理解するには、#define KEY_…
次の行のリストを見てください/usr/include/linux/input-event-codes.h
。
#define KEY_PLAYPAUSE 164
#define KEY_PREVIOUSSONG 165
#define KEY_STOPCD 166
#define KEY_RECORD 167
以下を実行して、内部データベースを再構築してロードします。
systemd-hwdb update; udevadm trigger
evtest
新しい設定をやり直すか、設定からショートカットを割り当てて、新しい設定が機能していることを確認してください。
アプリケーションがこれを試みるときにデスクトップ環境がすでにショートカットを使用している場合、アプリケーションはキーを押しても認識しないことに注意してください。
答え2
原則としてそうです。私が最後にいつ2012年にこんなことをした行く方法は、2番目のキーボードがkeypressなどをXF86VolumeUp送信するときに実際に何を意味するのかをLinuxに伝えることです。Num 1幸いなことに、標準キーボードには存在しないこの方法で使用できるキーコードがたくさんあります。
単一のキーに対してこれを実行しましょう。
- 追加のキーボードでキーを見つけるために使用される
xev | grep -i key
キーコード。たとえば、keypap 9ここではキーコード81を使用します。 (注:私の追加のキーボードには「00」とマークされたキーがありますが、「0」を2回送信するので、どのように処理するのかわかりません。)
KeyPress event, serial 38, synthetic NO, window 0x4400001,
state 0x10, keycode 81 (keysym 0xffb9, KP_9), same_screen YES,
KeyRelease event, serial 39, synthetic NO, window 0x4400001,
state 0x10, keycode 81 (keysym 0xffb9, KP_9), same_screen YES,
request MappingKeyboard, first_keycode 8, count 248
setxkbmap -query
(メイン)キーボードの規則を確認してください。このレイアウトでは、余分なキーボードを12個のメディアキーに変更しようとします。私にとってはそうです。
rules: evdev
model: pc105
layout: de
variant: nodeadkeys
- で十分な項目が見つかりました
/usr/share/X11/xkb/symbols/inet
。右側にはShiftキー修飾子などを使用してアプリケーションに表示される内容があり、左側にはスキャンコードがあります。私のキーボードには「計算機」キーがないので、これを選択します。
key <I148> { [ XF86Calculator ] };
/usr/share/X11/xkb/keycodes/
スキャンコードをキーコードにマッピングするファイルを作成します(手順1)。はい、逆さまのようです。私のファイルはtrustkeypadと呼ばれ、次のようになります。
default xkb_keycodes "trustkeypad" {
minimum= 8;
maximum= 255;
// keypad 9
<I148> = 81;
};
このファイルをコンパイル
xkbcomp -xkb trustkeypad
試してみてください
setxkbmap -v -v -device 17 -keycodes (filename)
。 (17はあなたのIDですxinput
。)私の結果は次のとおりです。
Warning! Multiple definitions of keycodes
Using command line, ignoring rules file
Applied rules from evdev:
rules: evdev
model: pc105
layout: de
variant: nodeadkeys
Trying to build keymap using the following components:
keycodes: trustkeypad
types: complete
compat: complete
symbols: pc+de(nodeadkeys)+inet(evdev)
geometry: pc(pc105)
特にキーコード行がよさそうです。今すぐ実行すると、xev
新しいシンボルが生成されることがわかります。ああ、今私は半分の勝利を収めています。
KeyPress event, serial 39, synthetic NO, window 0x4600001,
root 0x168, subw 0x0, time 24043275, (1666,897), root:(1670,950),
state 0x10, keycode 81 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 39, synthetic NO, window 0x4600001,
root 0x168, subw 0x0, time 24043403, (1666,897), root:(1670,950),
state 0x10, keycode 81 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 39, synthetic NO, window 0x4600001,
root 0x168, subw 0x0, time 24043403, (1666,897), root:(1670,950),
state 0x10, keycode 77 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 39, synthetic NO, window 0x4600001,
root 0x168, subw 0x0, time 24043411, (1666,897), root:(1670,950),
state 0x10, keycode 77 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
しかし、誤ってXを数回クラッシュさせた後(キーコードファイルで最小値を高く設定すると役に立つとは思わないでください)、この問題は消えました。この時点で、簡単な再起動が役立ちます。成功すると、次のような結果が得られます。
KeyPress event, serial 38, synthetic NO, window 0x3e00001,
root 0x168, subw 0x0, time 26443862, (930,972), root:(934,1025),
state 0x10, keycode 81 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 39, synthetic NO, window 0x3e00001,
root 0x168, subw 0x0, time 26444022, (930,972), root:(934,1025),
state 0x10, keycode 81 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
[ユーザー設定]で、そのキーにショートカットキーを割り当てることができ、電卓キーに割り当てられたというメッセージが表示されていることを確認できます。
ここでまだ欠けているもの:標準設定にする方法と再起動時の方法を見つけることです。これにはudevを見ることが含まれます。https://help.ubuntu.com/community/Custom%20keyboard%20layout%20definitions2014年から「旧式」というラベルがついていますが、役に立つかもしれません。
答え3
私はLinuxの専門家ではなく、単なるユーザーであると仮定します。しかし、私は私のニーズに応じてこの問題に対する解決策を共有したいと思います。これは、実際に他のユーザーが提案したソリューションと同じソリューションではなく、問題を解決する方法に近いです。私はこのソフトウェアを見つけました入力リマッパーこれにより、2つのキーボードマッピングを変更できます。それぞれ、デバイスメニューから選択してください。
プログラムはトリガー構文を提供しますキーの組み合わせオプションのカスタマイズがあるようです。マクロ言語。
しかし、私は1行のコードも書くことができないので、マクロを次に割り当てただけです。キーの組み合わせ私のデフォルトのキーボードはまだ使用されていません。たとえば、Ubuntu 22.10では。
その後、割り当てキーの組み合わせ入力リマッパーソフトウェアとkey_combination-sintaxを使用して2番目のキーボードのキー(画像KP_BEGIN)に:
確かにエレガントなソリューションではありませんが、私のように端末に慣れていない人にとっては、実装が簡単になります。
答え4
説明されている修正方法hwdb
は、接続されている複数のUSBキーボードでは機能しません。これは、同じボタンのスキャンコードが他のUSBキーボードで同じで、接続されているすべてのUSBキーボードのボタンを再マップするためです。
内蔵ノートパソコンのキーボードとUSBキーボードのスキャンコードのみが異なります。
私はこのPythonメソッドを試してみます(コメントで見つけてください)https://www.youtube.com/watch?v=Arn8ExQ2Gjg)
Pythonとその
evdev
モジュールのインストール(後で必要です)cd
/dev/input/by-id/キーボードが接続されていない場合
ls
。キーボードを接続してから
ls
。 2つの新しいシンボリックリンクがあります。ファイルシステムの絶対位置を書き留めます(例:/dev/input/by-id/usb-0c45_USB_WIRED_KEYBOARD_event-kbd)端末を終了します。 Pythonファイルを作成し、次の内容を入れてください。
from evdev import InputDevice, categorize, ecodes dev = InputDevice('/absolute/position/of/device') dev.grab() for event in dev.read_loop(): if event.type == ecodes.EV_KEY: key = categorize(event) if key.keystate == key.key_down: if key.keycode == 'KEY_ESC': print("Hello, world!")
2番目のキーボードでEscキーを押すと、「Hello、world!」が印刷されます。