マルチメディアキーをBluetoothキーボードのファンクションキーに再マップする方法は?

マルチメディアキーをBluetoothキーボードのファンクションキーに再マップする方法は?

Logitech BluetoothマルチデバイスキーボードK480があります。インストール後にBluetoothペアリングに従うだけで、デフォルト設定ではファンクションキーをマルチメディアキーにマッピングするため、背面にアクセスするには長押しする必要がありfnますF1F2F3

これは私にとって非常に直感的で、機能に直接アクセスし、マルチメディアキーを使用できるように再マッピングしたいと思います。fn

ロジクールBluetoothマルチデバイスキーボードK480

押したfnまま押し続けていない状態でF1を行うことです。

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63445847, (-438,408), root:(284,460),
state 0x10, keycode 180 (keysym 0x1008ff18, XF86HomePage), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63445922, (-438,408), root:(284,460),
state 0x10, keycode 180 (keysym 0x1008ff18, XF86HomePage), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63446510, (-438,408), root:(284,460),
state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63446597, (-438,408), root:(284,460),
state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

答え1

Logitechは、文書化されていない魔法のコマンドをキーボードに送信し、これらの交換を実行するLinux以外のさまざまなオペレーティングシステムに特別なドライバを提供するようです。

一部の人々は、他の同様のLogitechキーボードに送信されたコードを見つけるために通信を監視しました。 760話 そして 810。そのうちの1つを試してみてください。

失敗した場合は、xmodmapスワップキー割り当てを使用できます。 Fnを押したかどうかによって、キーボードが2つの異なるキーコードを送信することがわかります。xmodmap -pkeファイル内のすべてのキーマップを一覧表示し、必要なキーコードを参照するキーマップのみを保持するために使用されます。たとえば、

keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode 180 = XF86HomePage NoSymbol XF86HomePage

など。単に数字を逆にしてください。

keycode 180 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode  67 = XF86HomePage NoSymbol XF86HomePage

その後、このファイル名がパラメータとして渡され、地図が更新されますxmodmap

答え2

このコードを「/home/youruser/k480」というスクリプトに入れて実行できます。 Logitech キーが再マップされます。

xmodmap -e "keycode 180 = F1 F1 F1 F1 F1 F1"
xmodmap -e "keycode  23 = F2 F2 F2 F2 F2 F2"
xmodmap -e "keycode 135 = F3 F3 F3 F3 F3 F3"
xmodmap -e "keycode 166 = F4 F4 F4 F4 F4 F4"
xmodmap -e "keycode 225 = F5 F5 F5 F5 F5 F5"
xmodmap -e "keycode 173 = F6 F6 F6 F6 F6 F6"
xmodmap -e "keycode 172 = F7 F7 F7 F7 F7 F7"
xmodmap -e "keycode 171 = F8 F8 F8 F8 F8 F8"
xmodmap -e "keycode 121 = F9 F9 F9 F9 F9 F9"
xmodmap -e "keycode 122 = F10 F10 F10 F10 F10 F10"
xmodmap -e "keycode 123 = F11 F11 F11 F11 F11 F11"
xmodmap -e "keycode 118 = F12 F12 F12 F12 F12 F12"

答え3

このブログを見つけましたが、UbuntuのLogitech K480と「fnボタン」の基本動作、これはあなたが説明するのと同じ問題を解決するようです。

デフォルトでは、このキーボード(および私が知っている限り、Logitechの同様のキーボード)ではデフォルトで「メディアボタン」が有効になっています。つまり、f1-f12はメディアボタンとして機能し、機能ボタンはfnボタン+ f1-を押してアクセスできます。 f12.これは業務上実際には受け入れられません。 K810のMario Scholzの仕事に基づいて、Logitech K480の修正を作成しました。ソースコードはここにあります:

githubのK480を修正

私がしたことは彼の行動を追跡することだけであり、win7を実行している仮想マシンにLogitechのSetPointソフトウェアをインストールし、Bluetoothデバイスの出力をデバッグしました。 K480の場合は、次のようになります。

on (bingo!)
> to keyboard
ffff8801d2173000 2960870190 S Bo:2:013:2 -115 16 = 0c200c00 08004200 a210ff08 1c000000
< from keyboard ffff8801ed13b000
1204929370 C Bi:2:013:2 0 29 = 0c201900 15004200 a111ff08 1b000100 00000000 00000000 00000000 00

off
> to keyboard
ffff88062b7db0c0 3001832891 S Bo:2:013:2 -115 16 = 0c200c00 08004200 a210ff08 1c010000
< from keyboard ffff8801ed368b40
1227979618 C Bi:2:013:2 0 29 = 0c201900 15004200 a111ff08 1b010100 00000000 00000000 00000000 00 

キーボードに送信するメッセージは16進数「a2」で始まり、キーボードに送信するメッセージは「a1」バイトで始まります。おおむねうまく動作します。デバイスIDも0xb330に更新され、K810は0x319です。個人的には私はこのキーボードが大好きです。キーが素敵に「ドロップ」され、ギャップがぴったりです。コードをすばやく書くのに適しています:)

関連情報