web-dev-qa-db-ja.com

Linuxの2番目のキーボードからマクロとショートカットを起動できますか?

通常のキーボードと並んで、マクロやショートカットの起動に使用したい小さなテンキーキーボードがあります。これらのキーにマクロとショートカットをアタッチできます(つまり、テンキー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)]
4
umbro_tracksuit

私の他の答え は、ほとんどの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を再度実行するか、設定にショートカットを割り当てることにより、新しい設定が機能することを確認します。

アプリケーションでこれを試してみる場合、デスクトップ環境でそのショートカットがすでに使用されている場合、アプリケーションにはキープレスさえ表示されないことに注意してください。

4
Ulrich Schwarz

原則として、はい。私が最後に 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年以降の「古い」タグがあります。

2
Ulrich Schwarz