単一のデバイス(Logitechプレゼンター)のキーマップを変更するにはどうすればよいですか?


20

Logitech R400プレゼンターは次のキーコードを送信します。

keycode 112 (keysym 0xff55,  Prior) [page up]
keycode 117 (keysym 0xff56,   Next) [page down]
keycode  60 (keysym   0x2e, period)
keycode  71 (keysym 0xffc2,     F5)
keycode   9 (keysym 0xff1b, Escape)

基本的に、私は私が再マップしたいと思いますので、リモートでバンシーを制御するには、このプレゼンターを使用するPriorにはBNextN、というように。

このデバイスのキーマップのみを変更するにはどうすればよいですか(これらのキーコードをグローバルに再マップしたくないので)。


AFAIU「スレーブポインター」は、キーボードではなくマウスであることを意味します。キーマップをマウスにロードすることはできません。これらは本当にxinputリストにある唯一のデバイスですか?
マリウスゲドミナス

@MariusGedminas / dev / input / eventXデバイスを経由する必要があり、event5がプレゼンターだったため、結局は「キーボード」のようです。
htorque

回答:


15

私はそれをやったことはありませんが、キーマップファイルを作成/lib/udev/keymaps/し、デバイスのルールを/lib/udev/rules.d/95-keymap.rules


詳細:

  • udevキーマップはスキャンコードをキーコードにマップするため、キーマップファイルを作成するには両方を見つける必要があります。スキャンコードを見つけるには、次を実行し、デバイスのボタンを押します。

    sudo /lib/udev/keymap -i input/event5
    

    event *には異なる番号を試す必要があるかもしれません。出力は次のようになります。

    scan code: 0x70037   key code: dot
    scan code: 0x70029   key code: esc
    scan code: 0x7003E   key code: f5
    scan code: 0x7004B   key code: pageup
    scan code: 0x7004E   key code: pagedown
    

    ここでキーコードのリストを見つけることができます

    次に、キーマップファイルを作成します(/ lib / udev / keymaps / logitech-r400として保存しています):

    0x70037 brightnessdown
    0x70029 brightnessup
    0x7003E brightnessdown
    0x7004B brightnessup
    0x7004E brightnessdown
    

    有用なことは何もしません-動作するかどうかを簡単に確認するためのテストです。

  • 新しいキーマップを一時的にテストするには、次を実行します:

    sudo /lib/udev/keymap input/event5 /lib/udev/keymaps/logitech-r400
    

    結果は次のようになります。

    Remapped scancode 0x70037 to 0xe0 (prior: 0x34)
    Remapped scancode 0x70029 to 0xe1 (prior: 0x01)
    Remapped scancode 0x7003e to 0xe0 (prior: 0x3f)
    Remapped scancode 0x7004b to 0xe1 (prior: 0x68)
    Remapped scancode 0x7004e to 0xe0 (prior: 0x6d)
    

    これでボタンの明るさが変わります。

  • その変更を永続的にしたい場合/lib/udev/rules.d/95-keymap.rulesは、キーマップファイルをデバイスに適用するudevルールを追加する必要があります。

    1. ファイルを開きます。 gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. ファイルの下部で、LABEL="keyboard_end"行の前に、以下を追加します。

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. 保存して閉じ、再起動後にボタンの明るさが変わります。


ああ、どうすればそれを忘れることができますか(/ lib / udev / keymaps / zepto-znoteは私から寄贈されました:D)。答えに、どのように機能させたかについては後で詳しく説明します。
htorque

この答えに加えたいのは、を実行することで、キーボードが「eventX」である可能性があるものをゼロにすることができるということです/lib/udev/findkeyboards。これにより、現在接続されているすべてのキーボードが一覧表示されるので、それほど多くのキーボードを試す必要はありません。logitech r400は「USBキーボード:input / event11」として表示されました。
jat255

いい答えですが、使用するID_VENDORとidProductを見つけるにはどうすればよいですか?私が試した/sys/class/dmi/id/sys_vendorし、/sys/class/dmi/id/product_nameそれはうまくいきませんでした。
PutzKipa

2
/lib/udev/keymapそして/lib/udev/findkeyboards13.10にはもう存在しません。forum.ubuntu-fr.org/viewtopic.php?id=1395051は、代わりにevtestを使用するよう指示しています。
ステファンゴーリチョン

6
こんにちは、@ htorque、新しい方法への答えを更新していただけますか?Ubuntu Trustyでは、これらのファイルはすべて存在しません。あなたは私が同じ問題を持っているネットで見た唯一の人です。
londumas 14年

4

Ubuntu 16.04を使用しています。ここでガイドを作りました

evtestで検出する

sudo evtest

デバイスリストを見てください:

/dev/input/event0:  Lid Switch
/dev/input/event1:  Power Button
/dev/input/event2:  Sleep Button
/dev/input/event3:  Power Button
/dev/input/event4:  AT Translated Set 2 keyboard
/dev/input/event5:  Video Bus
/dev/input/event6:  USB Optical Mouse
/dev/input/event7:  AlpsPS/2 ALPS DualPoint Stick
/dev/input/event8:  AlpsPS/2 ALPS DualPoint TouchPad
/dev/input/event9:  Logitech USB Receiver
/dev/input/event10: Logitech USB Receiver
/dev/input/event11: HDA Intel PCH Dock Mic
/dev/input/event12: HDA Intel PCH Headset Mic
/dev/input/event13: HDA Intel PCH Dock Line Out
/dev/input/event14: HDA Intel PCH Headphone
/dev/input/event15: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event16: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event18: Integrated Webcam
/dev/input/event19: Dell WMI hotkeys
Select the device event number [0-19]: 9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc52d version 0x111
Input device name: "Logitech USB Receiver"

最初の「Logitech USB Receiver」を取得しました。ここでは、イベントIDは9です。

Testing ... (interrupt to exit)

OK evtestは入力を求めています。Logitechのリモートボタンをクリックするだけです。

[>] value 7003e (KEY_PRESENTATION)
[>] value 70029 (KEY_PRESENTATION)
[ ] value 70037 (KEY_DISPLAYTOGGLE)
 <  value 7004b (KEY_PAGEUP)
 >  value 7004e (KEY_PAGEDOWN)

注: [>]を複数回クリックすると、7003e、70029、7003eなどが発生することがわかりました。理由はわかりません。

udev confの変更

入力コードができたので、udev confを見てみましょう。

sudo gedit /lib/udev/hwdb.d/60-keyboard.hwdb

「R400」を検索し、プレゼンテーションとディスプレイの切り替えを希望するものに切り替えplaypausestopcd矢印キー:

# Logitech Presenter R400
evdev:input:b0003v046DpC52D*
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"   
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"  
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

先に述べたように07003e&070029は、同じボタンであるため、私は彼らに同じ出力与えアップキーを。7004bおよび7004eはデフォルトではここに表示されません。おそらく、これらはネイティブのPAGEUPおよびPAGEDOWN入力であり、「Logitech Presenter R400」に関連していないためです。それらを追加しましょう:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >  

最終的な設定は次のとおりです。

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

(新しい)ルールの再読み込み

sudo udevadm hwdb --update

次に、前に選択した同じイベントIDを使用して、ここでイベントID 9を指定します。

sudo udevadm trigger /dev/input/event9

Webブラウザでこの新しいマッピングを確認できます。次に例を示します。

$('body').on('keydown', function(e){ console.log(e.key) })

それは私に与えた:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight

GitHubのオリジナルのlogitech-r400-remap.mdガイドにいくつかの小さな改善を加えました。必要に応じて、それらを自由に変更するか、GitHub Webページに編集してください(私に帰属する必要はありません)。あなたの答えは、私の意見ではリンクのみの答えだったので、ダウン投票されました。そのため、私もダウン投票を取り消しました。
karel

ダウントートは削除されたため、ここでの他の回答と同様に、あなたの回答を独自のメリットで検討する機会があります。
-karel

1
ガイドを使用しました。魅力のように働いた:)
コスタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.