解決済み(2016-11-15):質問の下で詳細を確認してください。
問題の詳細な説明
Lenovo Yoga 900-13ISK2でFn + F6キーを押したときにタッチパッドを無効にしたい(実際にはBIOS設定のためにFnキーを押す必要はありません)。
何も試す前にFn + F6キーを押すたびに、次のメッセージが表示されますdmesg
。
atkbd serio0: Unknown key pressed (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
atkbd serio0: Unknown key released (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
また、ラップトップを「タブレットモード」に切り替えるたびに、dmesgに次のことが表示されます。
atkbd serio0: Unknown key pressed (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
ideapad_laptop: Unknown event: 1
atkbd serio0: Unknown key released (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
したがって、タブレットモードに入るときにFn + F6キーとは異なるイベントを押すか離すのと同じです。最後のイベントはキーボードのバックライトに関連しているようです(バックライトを制御するためにFn + Spaceを押すと同じログインが発生するためdmesg
)。タブレットモードからノートブックモードに切り替えたときにのみ
ideapad_laptop: Unknown event: 1
記録されます。
これはすべてLinux 4.8で発生します。私はファイルを
config-4.4.0-43-generic
生成するためのベースとしてUbuntuを使用しています.config
(例:https://gist.github.com/mvaled/36b2aa23b194d33ecd5e43efe8905cba)。
その後、私は以下を作成しました/etc/udev/hwdb.d/10-yoga.hwdb
。
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*80UE*:pvr*YOGA*900-13ISK2*
KEYBOARD_KEY_bf=touchpad_toggle
udevadm hwdb -u
(または再起動)後にudevadm trigger
Fn + F6を押すと、不明なキーイベントの記録が停止し、次のevtest
キーが表示されます。
Event: type 4 (EV_MSC), code 4 (MSC_SCAN), value bf
Event: type 1 (EV_KEY), code 530 (KEY_TOUCHPAD_TOGGLE), value 0
ただし、タッチパッドはアクティブなままです。
次のコマンドを実行してタッチパッドを無効/有効にすることができました。
$ xinput set-prop "SYNA2B29:00 06CB:77C6" 'Device Enabled' 0
$ xinput set-prop "SYNA2B29:00 06CB:77C6" 'Device Enabled' 1
この時点で私は詰まった。どのコンポーネントがKEY_TOUCHPAD_TOGGLEイベントをキャプチャしてそれを行う必要がありますか?
タッチパッドが「i2c_designware_platform」ドライバによって駆動されることを知っています。キーボードは"ideapad_laptop"によって駆動されるようです。これは合理的ですか?
解決策
回避策は、ファイルを次の/etc/udev/hwdb.d/10-yoga.hwdb
ように変更することです。
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*80UE*:pvr*YOGA*900-13ISK2*
KEYBOARD_KEY_bf=f21
@dirktはファイルに関する情報を提供しました/usr/share/X11/xkb/symbols/inet
。この文書を読むと、X11がF21キーをXF86TouchpadToggleにマップすることは明らかです。
key <FK21> { [ XF86TouchpadToggle ] };
そのため、スキャンコードをマッピングするのではなく、ファンクションtouchpad_toggle
キーF21にマッピングしました。
スクリプトは必要ありません。
残りの問題
このイベントは、ノートブックをタブレットモードに切り替えたときにノートブックから送信されます。ただし、ノートブックモードに戻ると再送信されず、タッチパッドは無効になります。
また、ノートブックモードでタッチパッドを無効にした場合は、タブレットモードに切り替えると有効になります。
答え1
パズルの難しい部分をすべて解決しました:-)
トグルコマンドに応答する専用プログラムを実行または実行しており、キーの押下に応答できる既存のプログラムを使用する必要があります。一部のウィンドウマネージャは、fvwm
ノートブックで使用される明るさや音量キーなどのキー押下に反応するように非常に柔軟に設定できます。したがって、使用しているウィンドウマネージャとそれを設定する方法を学びます。
xev
実行してピントを合わせてFn + F6を押すと、カーネルキーコードの代わりにXキーコードを見つけることができます。
2番目の問題は、スイッチ操作を実行するには現在の状態を知る必要があることです。最も簡単な方法は、おそらく小さなシェルスクリプトを書いてDevice Enabled
プロパティxinput
を読んでくださいxinput set-prop
。 X偶数コードが見つかるたびに、ウィンドウマネージャでこのシェルスクリプトを実行します(可能な場合)。
解決策
回避策は、ファイルを次の/etc/udev/hwdb.d/10-yoga.hwdb
ように変更することです。
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*80UE*:pvr*YOGA*900-13ISK2*
KEYBOARD_KEY_bf=f21
@dirktはファイルに関する情報を提供しました/usr/share/X11/xkb/symbols/inet
。この文書を読むと、X11がF21キーをXF86TouchpadToggleにマップすることは明らかです。
key <FK21> { [ XF86TouchpadToggle ] };
そのため、スキャンコードをマッピングするのではなく、ファンクションtouchpad_toggle
キーF21にマッピングしました。
スクリプトは必要ありません。
残りの問題
このイベントは、ノートブックをタブレットモードに切り替えたときにノートブックから送信されます。ただし、ノートブックモードに戻ると再送信されず、タッチパッドは無効になります。
また、ノートブックモードでタッチパッドを無効にした場合は、タブレットモードに切り替えると有効になります。
答え2
xorgでシナプティックを使用するとき、私はしばしば以下を使用します。
synclient touchpadoff=1 # for disable and =0 for enable