web-dev-qa-db-ja.com

Fn + F6の発行されたキーコードを把握する

Windows上のLenovoIdeaPad Yoga 2 Proには、利用可能な機能があります Fn+F6 それはタッチパッドのオンとオフを切り替える必要があります(正しいキーを ここのaskubuntuのスクリプト にマップしたいと思います)。

しかし、Linuxでは機能しません。

この組み合わせを押したときに出力されるイベントキーコードを確認するにはどうすればよいですか?

私は試した showkey -ashowkey -kxevはどちらも押すとほとんどのキーコードを表示しますが、 Fn+F6 彼らは静かなままです。他の Fn+F1-F5 出力のみを表示 F6 Windowsでは動作しますが、動作しません。 xevshowkeyには他にどのような代替がありますか?

私がこれまでに見つけた唯一のヒントは次のとおりです。

grep TOUCHPAD /usr/include/linux/input.h

#define KEY_TOUCHPAD_TOGGLE 0x212   /* Request switch touchpad on or off */
#define KEY_TOUCHPAD_ON     0x213
#define KEY_TOUCHPAD_OFF    0x214

出典:コメント https://askubuntu.com/a/270428/34298 へのリンク付き この記事

多分誰かがアイデアを持っていますか?

4
rubo77

https://wiki.ubuntu.com/Hotkeys/Troubleshooting このようなキーボードの問題をトラブルシューティングするためのヒントがいくつかあります。

インストール

Sudo apt-get install evtest

実行します

Sudo evtest

選択する 3 にとって

/dev/input/event3:  AT Translated Set 2 keyboard

そして、あなたは次のようなものを見るでしょう

Event: time 1397868878.732211, -------------- SYN_REPORT ------------
Event: time 1397868878.915728, type 4 (EV_MSC), code 4 (MSC_SCAN), value bf
1
rubo77

xevまたはshowkeyのいずれかを実行すると、次のキーコードを取得できます。 Fn+F6

showkey -kを使用すると、ThinkpadT410ラップトップで次のようになります。

$ Sudo showkey -k 
kb mode was ?UNKNOWN?
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
keycode  28 release
keycode 143 press                   <--- Fn press + release
keycode 143 release
^[[17~keycode  64 press             <--- F6 press + release
keycode  64 release
keycode 212 press                   <--- Fn + F6 press + release
keycode 212 release
keycode  29 press                   <--- Ctrl + C press + release
^Ccaught signal 2, cleaning up...

おそらくそれはサポートされていませんか?

このArchLinuxwikiの記事「 LenovoIdeapad Yoga 2 Pro 」を見つけました。これは、このキーが直接マッピングされていないことを示しているようです。掘り下げていきますが、ここにもこの情報を追加したいと思いました。

抜粋

キーボード専用キー

BIOSには、FNキーの動作を反転する設定があります。

  fn+F1   XF86AudioMute
  fn+F2   XF86AudioLowerVolume
  fn+F3   XF86AudioRaiseVolume
  fn+F4   Alt_L+<F4>
  fn+F5   <F5>
  fn+F6   n/a
  fn+F7   n/a
  fn+F8   Alt_L+Tab
  fn+F9   n/a?
  fn+F10  super_L+p
  fn+F11  XF86MonBrightnessDown
  fn+F12  XF86MonBrightnessUp

変更されたideapad_laptopモジュールを使用しますか?

LinLapWikiで次のタイトルのページを見つけました: Lenovo IdeaPad Yoga 2 Pro 。この記事では、ideapad_laptopモジュールのパッチが適用されたバージョンについて説明しています。これにより、特定のキーが機能しないという問題が解決される可能性があります。

抜粋

ブラックリストideapad_laptopを機能させるには、ブラックリストideapad_laptopを/etc/modprobe.d/blacklist.confに追加します。パッチが適用されたideapad_laptopモジュールは、yoga_laptopディレクトリの https://github.com/pfps/yoga-laptop から入手でき、ワイヤレスが正しく機能し、機内モードキーも処理します。

このパッチが適用されたモジュールのREADMEには、F6キーについても次のように書かれています。

タッチパッドを無効にする(F6)は、認識されないスキャンコードを生成します。これは、Sudo setkeycodes e03f 191を手動で修正してからXF86TouchPadToggleを設定して、タッチパッドの状態を切り替えるスクリプトをトリガーすることで修正できます。一時停止と中断は同じキャラクターを生成します。これはSudo setkeycodes e046 194; xmodmap -e "keycode 202 = Break"で修正できます。これを行うためのより良い方法は、udevルールを使用することです。詳細については、yoga_laptop/READMEを参照してください。

参考文献

5
slm

私のボックス(Lenovo Yoga 900 13ISK2)では、Fn F6を押すたびに、dmesgに次の出力が表示されます。

[20468.127492] atkbd serio0: Unknown key pressed (translated set 2, code 0xbf on isa0060/serio0). [20468.127504] atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.

Gitソースツリーからの4.8カーネルコンパイルを使用しています。 include/uapi/linux/input-event-codes.h そうですか:

#define KEY_TOUCHPAD_TOGGLE 0x212   /* Request switch touchpad on or off */

だから私はsetkeycodes e03f 530。その後、dmesgはメッセージを表示しなくなりましたが、キーを押してもタッチパッドのオン/オフは切り替わりませんでした。

もう1つの興味深い事実:画面を「タブレットモード」に切り替えると、dmesgで同じメッセージが表示されるため、BIOSがFnF6を押すのと同じイベントを送信しているように見えます。残念ながら、これは画面を完全に反転させた後でのみ発生し、190º程度を超えた後では発生しません。

1
manu

これは少し古いですが、私はラップトップで同様の問題を抱えていました(モードを切り替えるのではなく、マップされていないのも同様です)。 「Fn」キーを押すたびに、6fがマップされていないことが報告されます。私はついに「Fn」キーのマッピングが https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes)から464(0x1D0)であることがわかりました。 h ...次に、次を使用できます。

setkeycodes 6f 464そして、代わりに「KEY_FN」として表示されるようになりました。しかし、それを永続的にするために、私はスタートアップスクリプトを作成することになりました。あなたの場合、それがトグルで機能しなかった場合、より良い別のキーコードがあるかもしれませんか?しかし、「fn + f6」がbfを生成することを確認するには、(誰かがすでに指摘したように)evtestが本当に必要です。 「e0xx」を言ったように使ったときはうまくいかなかったので、dmesgの言うことには賛成しません。あなたのものは次のようになります:

setkeycodes bf 530

0
roboknave