![노트북 키보드의 비행기 모드 버튼을 비활성화하는 방법이 있습니까?](https://linux55.com/image/120322/%EB%85%B8%ED%8A%B8%EB%B6%81%20%ED%82%A4%EB%B3%B4%EB%93%9C%EC%9D%98%20%EB%B9%84%ED%96%89%EA%B8%B0%20%EB%AA%A8%EB%93%9C%20%EB%B2%84%ED%8A%BC%EC%9D%84%20%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
얼마전에 어머니께 노트북을 사드렸어요안타깝게도키보드 레이아웃. 운영 체제는 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
정확한 하드웨어 소프트웨어가 없지만 내 시스템에서 "유사한 상황"을 찾으려고 노력하고 있습니다.
그 중 하나가 전원 버튼입니다. 대상은 전원이 아닌 입력 키(예: 키 "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"가 표시됩니다.