
しばらく前にお母さんにラップトップを買いました。残念ながらキーボードレイアウト。オペレーティングシステムはLinux Mint 18.2 Cinnamon 64ビットです。
問題は彼女に身長がないことですF1。F12代わりに、他のマルチメディアボタンがあり、さらに重要なのは、飛行機モードボタンがあるということです。 - キーでアクセスできますF1。F12Fn
私たちは多くのペットを持っているので、多くの場合、キーボードにジャンプし、飛行機モードボタンを含む複数のボタンを押してインターネット接続を切断することがよくあります。最近、彼女はこれについて不満を吐露しました。
BIOSから通常のキーボードレイアウトに切り替える方法はありません。したがって、あなたの質問は次のとおりです。
ノートパソコンのキーボードの機内モードボタンを無効にする方法はありますか?
編集1:
ペットは私たちの家族の不可欠な部分なので、自宅で育てることは不可能です。
もちろん、お母さんがコンピュータの前にないときは、コンピュータのふたを閉めておきます。しかし、彼女がラップトップを使用しているとき、彼らはラップトップにジャンプします。この意味では、猫は本当に痛いかもしれません:)
編集2:
機内モードがオフになっている場合、つまりワイヤレスがオンになっている場合は、次のコマンドを実行してください。
rfkill list all
出力:
0: ideapad_wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
1: ideapad_bluetooth: Bluetooth
Soft blocked: yes
Hard blocked: no
2: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
3: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
編集3:
フライトボタンを押すと、前のコマンドでワイヤレスがブロックされます。柔らかい。
編集4:
acpi_listen
ボタンを押すと以下が出力されます。
button/wlan WLAN 00000080 00000000 K
編集5:
sudo evtest
出力:
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Power Button
/dev/input/event2: Power Button
/dev/input/event3: AT Translated Set 2 keyboard
/dev/input/event4: MOSART Semi. 2.4G Wireless Mouse
/dev/input/event5: Video Bus
/dev/input/event6: Video Bus
/dev/input/event7: ETPS/2 Elantech Touchpad
/dev/input/event8: Ideapad extra buttons
/dev/input/event9: Lenovo EasyCamera
/dev/input/event10: HDA Intel PCH Mic
/dev/input/event11: HDA Intel PCH Headphone
/dev/input/event12: HDA Intel HDMI HDMI/DP,pcm=3
/dev/input/event13: HDA Intel HDMI HDMI/DP,pcm=7
/dev/input/event14: HDA Intel HDMI HDMI/DP,pcm=8
Select the device event number [0-14]: 8
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "Ideapad extra buttons"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 1 (KEY_ESC)
Event code 148 (KEY_PROG1)
Event code 149 (KEY_PROG2)
Event code 186 (KEY_F16)
Event code 192 (KEY_F22)
Event code 193 (KEY_F23)
Event code 202 (KEY_PROG3)
Event code 203 (KEY_PROG4)
Event code 212 (KEY_CAMERA)
Event code 227 (KEY_SWITCHVIDEOMODE)
Event code 238 (KEY_WLAN)
Event code 240 (KEY_UNKNOWN)
Event code 248 (KEY_MICMUTE)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 1508927031.158643, type 4 (EV_MSC), code 4 (MSC_SCAN), value 0d
Event: time 1508927031.158643, type 1 (EV_KEY), code 238 (KEY_WLAN), value 1
Event: time 1508927031.158643, -------------- SYN_REPORT ------------
Event: time 1508927031.158680, type 1 (EV_KEY), code 238 (KEY_WLAN), value 0
Event: time 1508927031.158680, -------------- SYN_REPORT ------------
答え1
正確なハードウェアソフトウェアはありませんが、私のシステムで「類似した状況」を見つけようとしています。
そのうちの1つが電源ボタンです。ターゲットは電源ではなく入力キー(例:キー「4」)です。 (私は/dev/input/event2にあり、発行されました。
root# evtest /dev/input/event2
イベント: 時間 1509218410.222521, タイプ 1(EV_KEY), コード 116(KEY_POWER), 値 1
イベント: 時間 1509218410.222521, -------------- SYN_REPORT ----------
イベント: 時間 1509218410.222552, タイプ 1(EV_KEY), コード 116(KEY_POWER), 値 0
イベント: 時間 1509218410.222552, -------------- SYN_REPORT - ----------もう一つは(そしてこれが私がそれほど興味を持っている理由です):WIFIボタンもありますが、「何もしません」。入力イベントを理解していますが、楽しみにしてこの問題を修正したいと思います。ここでの目標は何かをすることです。
このFn + F3は(通常のキーボード入力デバイスで)実行されます。root# evtest /dev/input/event3
イベント: 時刻 1509218870.384483, タイプ 4(EV_MSC), コード 4(MSC_SCAN), 値 86
イベント: 時刻 1509218870.384483, -------------- SYN_REPORT -- ----------
このFn + F3は最初にsyslogに警告ラインを表示しました。
カーネル: [44802.485207] atkbd serio0: 不明なキーが公開されました (翻訳セット 2、isa0060/serio0 のコード 0x86)。
カーネル: [44802.485210] atkbd serio0: わかりやすくするには、「setkeycodes e006」を使用してください。
これまで私がしたこと:
- 「実際」や「実際」ではなく、一連の
setkeycodeを実行しても何も変わりませんでしたが、syslogエントリは消えました。evdev
setkeycodes e006 5
setkeycodes 86 5
同様のhwdbファイルが/etc/udev/hwdbに作成されました。これによりsyslogメッセージも削除されましたが、それ以外は何も削除されませんでした。
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_86=5/etc/udev/rules.dにudevルールを作成して有効にし、
実行し(「Power Button INHIBIT String」が表示され、変更されたすべてのラベルが表示されるため)、すべてのプロパティを変更できます(主に電源ボタンについて))
私のルールファイルは次のとおりです。ACTION!="追加|変更", GOTO="pwr_kbd_end"
SUBSYSTEM!="入力", GOTO="pwr_kbd_end"
KERNEL!="イベント[0-9]*", GOTO="pwr_kbd_end"
ENV{ID_PATH_TAG}== "acpi-LNXPWRBN_00", OPTIONS+="last_rule", RUN+="/usr/bin/logger -t 電源ボタン抑制 %k", ENV{KEYBOARD_KEY_116}="KEY_A",\ TAG:="何ですか", ENV{ EV_KEY_116 }="KEY_B", \ENV{BTN_116}="KEY_C",ENV{BTN_POWER}="KEY_D", ENV{KEY_POWER}="KEY_E" LABEL="pwr_kbd_end"しかし、ルールは何かを接続または切断、変更(たとえば、新しいパーティションの作成やモード変更3Gアダプタを使用)などの「システム変更」のためのものですが、実際の重要なイベント処理とは何の関係もないことを読んで理解しました。 (しかし、影響を与える可能性があります)。またうまく
OPTIONS+="last_rule"
いかないようです。このファイルを01-myrule.ruleと入力し、ハードリンク98-myrule.ruleと入力しました。どちらも「動作」します。その後、イベント処理に注目を集めました。 Pythonスクリプトを
コピーしてevtest.py
遊んだ。
私の概念は、「パワーフェーダーイベントを傍受してイベントを通過させるのではなく、他のイベント(KEY_4 - 値5 - 前のテストで試したように)を注入することです。ほぼ完全に成功しました。 (これはあなたの解決策かもしれません)
from __future__ import print_function import sys import select from evdev import ecodes, list_devices, AbsInfo, InputDevice, UInput def main(): device = InputDevice("/dev/input/event2") # yours should be checked... NOT necessalirly always event8 device.grab() ui = UInput() print('Listening for events (press ctrl-c to exit) ...') fd_to_device = {device.fd: device} while True: r, w, e = select.select(fd_to_device, [], []) for fd in r: for event in fd_to_device[fd].read(): if (event.type == 1) and (event.code==116): # yours is 238 print_event(event) event.code=5 event.value=1 ui.write(event.type, event.code, event.value) # just delete/comment this section if you do not wanna do anything ui.syn event.value=0 ui.write(event.type, event.code, event.value) ui.syn else: ui.write(event.type, event.code, event.value) ui.syn def print_event(e): if e.type == ecodes.EV_SYN: if e.code == ecodes.SYN_MT_REPORT: msg = 'time {:<16} +++++++++ {} ++++++++' else: msg = 'time {:<16} --------- {} --------' print(msg.format(e.timestamp(), ecodes.SYN[e.code])) else: if e.type in ecodes.bytype: codename = ecodes.bytype[e.type][e.code] else: codename = '?' evfmt = 'time {:<16} type {} ({}), code {:<4} ({}), value {}' print(evfmt.format(e.timestamp(), e.type, ecodes.EV[e.type], e.code, codename, e.value)) if __name__ == '__main__': try: ret = main() except KeyboardInterrupt: ret = 0 sys.exit(ret)
繰り返しますが、コンソールにあるかXにあるか、このスクリプトが実行されると、「電源スイッチ」の代わりにキー(現在はデュアルキー)を取得します。
- 傍受(キーボードイベントの進行を許可)マジック86コードを発見したときにEV_KEYシーケンス(EV_KEY KEY_4 down、SYN、EV_KEY KEY_4 up、SYN)を挿入しましたが、イベントが実行されなかったため部分的
に成功しました。既知の理由は互いについて待っていることですが、4つの束で表示されます(私はpython -u wifi.pyを使用しました)。それでバッファリングをしないようにしました。ここでは繰り返さない。 Wi-Fiボタンを4回押すと、コンソールとXに「4444」と表示されます。