コンパクトキーボードを購入しました。 F1=Fn+1、F2=Fn+2... ただし、F1-F12キーはUbuntu 16.04では機能しません。例えば、F1は輝度を増加させることができる。 F1〜F12キーのキーコードを確認しましたが、無効です。したがって、F1はキーコード232(67の代わりに)を返します。
以下を使用して問題を解決しようとしましたが、xmodmap -e "keycode 232 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1"
役に立ちませんでした。 F1はまだ明るさを変更します。結果のない別のF1-F12キーを再マップしてみました。 Xmodmapはファンクションキーでない場合にのみ機能します。
F1~F12キーの変更は可能ですか? (キーコードを交換しますか?)
Xmodmapは正しく設定されていますが、F1は依然として明るさを変更します。:
$ xmodmap -e "keycode 232 = F1 F1 F1 XF86Switch_VT_1" # IT DON'T HELP!!
$ xmodmap -pke # everything is OK!
keycode 67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1 F1 F1 XF86Switch_VT_1
keycode 232 = F1 F1 F1 XF86Switch_VT_1
$xev # take a look: XKeysymToKeycode = 67... F1... everything is OK again...
KeyRelease event, serial 40, synthetic NO, window 0x5000001,
root 0xf5, subw 0x0, time 921326, (236,-87), root:(236,403),
state 0x0, keycode 232 (keysym 0xffbe, F1), same_screen YES,
XKeysymToKeycode returns keycode: 67
XLookupString gives 0 bytes:
XFilterEvent returns: False
$sudo evtest
Event: time 1497517949.369064, -------------- SYN_REPORT ------------
Event: time 1497517949.458895, type 1 (EV_KEY), code 224 (KEY_BRIGHTNESSDOWN), value 0
$ setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete+ledscroll(group_lock)" };
xkb_symbols { include "pc+us+inet(evdev)+capslock(swapescape)" };
xkb_geometry { include "pc(pc105)" };
};
PS F1-F12はWindowsでもうまく動作します。
修正する:
@dirktさん、ありがとうございます。詳細を見てください:
- Ubuntu 16.04.1 LTSを使用していますつかむ
/dev/input/event11: RK61 Bluetooth keyboard
sudo lsof /dev/input/event11
出力:山,Xorgevtest --grab /dev/input/eventX
結果:あなたは正しいです。なぜなら、ノートパソコンの画面が明るいからです。そのまま維持(私はFn + 1 => F1を押しました)!
殺そう山プロセス:
sudo kill 757
//殺す山プロセスsudo lsof /dev/input/event11
出力:Xorg // OK acpidが死亡しました。- F1を押す - >明るさが変わります! //失敗する
これは私のrdescファイルです。https://pastebin.com/vxDvwMwr
16進ダンプは次のとおりです。https://pastebin.com/eT9mNnGV
また、キーコードを変更してみましたが役に立ちxkbcomp
ませんでした。
どんな考えでも書いてください。ありがとうございます!
答え1
ここで解決策を見つけました。https://forums.gentoo.org/viewtopic-t-1063898-start-0.html
change behaviour on the fly
# echo 2 > /sys/module/hid_apple/parameters/fnmode
or modify it in config
[/etc/conf.d/modules]
module_hid_apple_args="fnmode=2 iso_layout=0"
答え2
部分的な答え:xmodmap
実際にはマッピングが正しく機能します。図xev
に示されているように、あなたが得るkeysym 0xffbe
ことはF1
正確にする必要があるのと同じです。
したがって、質問は(1)まだ明るさが変わる理由と、(2)KEY_BRIGHTNESSDOWN
F1キー(67)のキーコードの代わりにキーコード232(の場合)を返す理由です。
(1)の場合、Ubuntuはデフォルトで/dev/input
キーを処理するXイベントを処理するのではなく、直接読み込みを実行すると疑われますxmodmap
。どのデスクトップ環境(Gnome?)を実行しているのかわかりませんでした。lsof
ソースコードを直接読み取るプロセスを見つけることができます/dev/input/eventX
(ここから数字Xを取得しますevtest
。数字は他のブートで変更される可能性があります)。以下を実行してこの理論をテストすることもできますevtest --grab /dev/input/eventX
。これにより、専用プログラムがイベントを処理できるため、evtest
Fn + F1を押すと表示され続けますが、KEY_BRIGHTNESSDOWN
PC /ノートブック画面の明るさは変わりません。
(2)の場合、Googleでブランド名を検索するとBluetoothキーボードであることがわかります。つまり、HIDデバイスである可能性が高いです。デバイスファイルとdmesg
デバイスを識別するBluetooth識別子を確認してデバッグできます。hidraw
それから
mount -t debugfs none /sys/kernel/debug
正しいデバイスをrootとして見てくださいsys/kernel/debug/hid/*/rdesc
(利用可能なサブディレクトリを参照)。わからない場合は、貼り付けボックスに入れてリンクを含む質問を編集してください。または、生のHIDイベントをダンプするには、hexdump -C /dev/hidrawX
FnとF1、F2などを数回押します。これにより、カーネルがなぜそのように変換するのかというアイデアを得ることができます。
編集する
hidrawダンプを見ると、キーボードはHID記述子の説明に従ってファンクションキーのスキャンコードなどを正しく生成します3a
。3b
したがって、問題はHID入力変換レイヤーにあることに違いありません。
ioctlでこのレイヤーを調べることができます。私が知っている限り、利用可能な公開ツールはありませんが、完了したらgithubに公開できます。
このマッピングを設定する方法について私が知っている唯一の方法は、以下のhwdb
ようにudevデータベースを使用することです。ここ。
そのため、F1を明るさ制御にマッピングするデータベースエントリを提供し、それに直接監視して、それに反応するプログラムを提供するパッケージを誰がインストールしたのかを推測します/dev/input/event*
。システムが見つかるかどうかを確認してください。lsof
役に立つかもしれません。