通常のキーボードと並んで、マクロやショートカットの起動に使用したい小さなテンキーキーボードがあります。これらのキーにマクロとショートカットをアタッチできます(つまり、テンキー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)]
私の他の答え は、ほとんどのLinuxでおそらく機能しますが、たとえそれらが何年も前のものであったとしても、SystemDとudevは実際に物事を容易にします。
lsusb
を使用して、追加のキーボードのベンダーと製品コードを見つけます。 (私の場合、Vendor 145F、Product 0177です。必ず大文字で入力してください。)
次のような内容のファイル/etc/udev/hwdb.d/90-extra-keyboard.hwdb
を作成します。
evdev:input:b0003v145Fp0177*
KEYBOARD_KEY_7005b=stopcd
1行目はデバイスを識別します。vの後の4文字はベンダーコード、pの後の前のステップの製品コードです。 1行おきにスキャンコードを記号名にマップします。スキャンコードを取得するには、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
を再度実行するか、設定にショートカットを割り当てることにより、新しい設定が機能することを確認します。
アプリケーションでこれを試してみる場合、デスクトップ環境でそのショートカットがすでに使用されている場合、アプリケーションにはキープレスさえ表示されないことに注意してください。
原則として、はい。私が最後に 2012年にこれをやったとき 、行く方法は2番目のキーボードが非常に奇妙で本当に意味することをLinuxに伝えることでした XF86VolumeUp キープレスを送信するとき 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
_を確認してください。そのレイアウトで、追加のキーボードを数十個のメディアキーに変えようとします。私にとっては_rules: evdev
model: pc105
layout: de
variant: nodeadkeys
_
/usr/share/X11/xkb/symbols/inet
_で十分なエントリを見つけます。右側はアプリケーションに表示されるもので、Shiftキー修飾子などが含まれる場合があります。左側はスキャンコードです。私のキーボードには「電卓」キーがないので、これを選びます。_key <I148> { [ XF86Calculator ] };
_
/usr/share/X11/xkb/keycodes/
_にスキャンコードをキーコードにマップするファイルを作成します(最初のステップから)。はい、これは逆のようです。私のファイルはtrustkeypadという名前で、次のようになります。_default xkb_keycodes "trustkeypad" {
minimum= 8;
maximum= 255;
// keypad 9
<I148> = 81;
};
_
このファイルを_xkbcomp -xkb trustkeypad
_でコンパイルします
setxkbmap -v -v -device 17 -keycodes (filename)
で試してください。 (17はxinput
のIDです。)私の結果は次のようになります。
_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を2、3回クラッシュさせた後(キーコードファイルの最小値を高く設定すると効果があるとは思わない)、それはなくなりました。この時点で、単純な再起動が役立つ場合があります。成功したら、次のようなものだけを取得する必要があります
_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%20definitions が役立つ場合があります。 2014年以降の「古い」タグがあります。