문맥:
2-in-1 컨버터블에 드라이버가 없어 화면을 뒤로 접으면 덮개 스위치 이벤트만 트리거됩니다. 이로 인해 노트북이 정지되거나 Gnome에서 "노트북 덮개를 닫은 상태에서 매달기"가 비활성화되어도 여전히 모든 입력 장치가 비활성화됩니다(태블릿 모드를 쓸모 없게 만드는 터치스크린 포함).
해결 방법으로 수동으로 태블릿 모드로 전환하고 싶습니다. 이를 위해서는 모든 덮개 전환 이벤트를 비활성화해야 합니다.
질문:
Linux에서 덮개 스위치 이벤트를 완전히 억제하는 방법은 무엇입니까?
또는 덮개 스위치에 응답하는 프로세스를 나열/비활성화하는 방법을 찾으면 문제를 해결할 수 있습니다.
현재 태블릿 모드에서 화면을 접었다가 다시 접으면 다음 이벤트가 기록됩니다.
Jul 25 23:58:54 jl-xps systemd-logind[816]: Lid closed.
Jul 25 23:58:58 jl-xps systemd-logind[816]: Lid opened.
덮개 스위치 이벤트는 에 매핑됩니다 /dev/input/event0
. /proc/bus/input/devices
목록(잘림):
I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0
U: Uniq=
H: Handlers=event0
B: PROP=0
B: EV=21
B: SW=1
노력하다:
방법 1: systemd-inhibit
, 에서 가져옴노트북 덮개를 닫을 때 자동 일시 중지를 비활성화하는 방법은 무엇입니까?
# systemd-inhibit --what=handle-lid-switch sleep 1m
그런 다음 타이머가 끝나기 전에 화면을 뒤집으세요. 덮개 스위치 이벤트는 계속 기록 systemd-logind
되며 쓰기가 진행되는 것을 볼 수 있습니다 /dev/input/event0
(다른 입력 장치는 여전히 비활성화되어 있습니다).
방법 2:ACPI
$ echo "LID0" | sudo tee /proc/acpi/wakeup
그리고 실제로 비활성화되어 있는지 확인하십시오.
LID0 S3 *disabled platform:PNP0C0D:00
동일한 systemd-logind
로그가 있고 /dev/input/event0
여전히 작성 중입니다.
방법 3: 무차별 대입
# mv /dev/input/event0 /dev/input/event0-off
# ln -s /dev/null /dev/input/event0
덮개 스위치 이벤트는 계속 기록됩니다 systemd-logind
. 따라서 이것은 /dev/input/event0
단지 정보 제공용인 것 같습니다.
시스템 메시지:
$ inxi -Fxmz
System: Host: jl-xps Kernel: 4.18.0-0.rc5.git4.1.fc29.x86_64 x86_64 bits: 64 compiler: gcc v: 8.1.1
Desktop: Gnome 3.28.3 Distro: Fedora release 28 (Twenty Eight)
Machine: Type: Laptop System: Dell product: XPS 15 9575 v: N/A serial: <filter>
Mobo: Dell model: 0C32VW v: A00 serial: <filter> UEFI: Dell v: 1.1.5 date: 05/30/2018
Battery: ID-1: BAT0 charge: 72.3 Wh condition: 72.3/75.0 Wh (96%) model: BYD DELL TMFYT84 status: Full
Memory: RAM Report: permissions: Unable to run dmidecode. Are you root?
CPU: Topology: Quad Core model: Intel Core i7-8705G bits: 64 type: MT MCP arch: Skylake rev: 9
L2 cache: 8192 KiB
flags: lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx bogomips: 49536
Speed: 900 MHz min/max: 800/4100 MHz Core speeds (MHz): 1: 900 2: 900 3: 900 4: 900 5: 900 6: 900
7: 900 8: 900
Graphics: Card-1: Intel driver: i915 v: kernel bus ID: 00:02.0
Card-2: Advanced Micro Devices [AMD/ATI] Polaris 22 [Radeon RX Vega M GL] driver: amdgpu v: kernel
bus ID: 01:00.0
Display: wayland server: Fedora Project X.org 11.0 driver: amdgpu resolution: 3840x2160~60Hz
OpenGL: renderer: Mesa DRI Intel HD Graphics 630 (Kaby Lake GT2) v: 4.5 Mesa 18.1.4
direct render: Yes
Audio: Card-1: Intel CM238 HD Audio driver: snd_hda_intel v: kernel bus ID: 00:1f.3
Card-2: N/A type: USB driver: snd-usb-audio bus ID: 3:2
Sound Server: ALSA v: k4.18.0-0.rc5.git4.1.fc29.x86_64
Network: Card-1: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter driver: ath10k_pci v: kernel
bus ID: 02:00.0
IF: wlp2s0 state: up mac: <filter>
Card-2: Intel I210 Gigabit Network Connection driver: igb v: 5.4.0-k port: 2000 bus ID: 40:00.0
IF: enp64s0 state: up speed: 1000 Mbps duplex: full mac: <filter>
Card-3: Realtek RTL8153 Gigabit Ethernet Adapter type: USB driver: r8152 bus ID: 10:3
IF: enp65s0u2u2 state: down mac: <filter>
IF-ID-1: tap0 state: unknown speed: 10 Mbps duplex: full mac: <filter>
IF-ID-2: virbr0 state: up speed: N/A duplex: N/A mac: <filter>
IF-ID-3: virbr0-nic state: down mac: <filter>
Drives: HDD Total Size: 232.89 GiB used: 77.91 GiB (33.5%)
ID-1: /dev/sda type: USB vendor: Samsung model: Portable SSD T3 size: 232.89 GiB
RAID: Hardware-1: Intel 82801 Mobile SATA Controller [RAID mode] driver: ahci v: 3.0 bus ID: 00:17.0
Partition: ID-1: / size: 114.35 GiB used: 77.69 GiB (67.9%) fs: ext4 dev: /dev/sda3
ID-2: /boot size: 975.9 MiB used: 202.9 MiB (20.8%) fs: ext4 dev: /dev/sda2
ID-3: swap-1 size: 16.00 GiB used: 0 KiB (0.0%) fs: swap dev: /dev/sda4
Sensors: System Temperatures: cpu: 50.0 C mobo: 37.0 C gpu: amdgpu temp: 49 C
Fan Speeds (RPM): cpu: 0
Info: Processes: 381 Uptime: 3h 01m Memory: 15.36 GiB used: 7.66 GiB (49.9%) Init: systemd runlevel: 5
Compilers: gcc: 8.1.1 Shell: fish v: 2.7.1 inxi: 3.0.14
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ xwayland-pointer:15 id=6 [slave pointer (2)]
⎜ ↳ xwayland-relative-pointer:15 id=7 [slave pointer (2)]
⎜ ↳ xwayland-touch:15 id=9 [slave pointer (2)]
⎜ ↳ xwayland-stylus:15 id=10 [slave pointer (2)]
⎜ ↳ xwayland-eraser:15 id=11 [slave pointer (2)]
⎜ ↳ xwayland-cursor:15 id=12 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ xwayland-keyboard:15 id=8 [slave keyboard (3)]
sudo libinput debug-events
태블릿 모드로 변경했다가 노트북 모드로 다시 전환할 때의 출력은 다음과 같습니다(뚜껑 스위치 장치 비활성화됨).
-event3 DEVICE_ADDED Power Button seat0 default group1 cap:k
-event5 DEVICE_ADDED Video Bus seat0 default group2 cap:k
-event1 DEVICE_ADDED Power Button seat0 default group3 cap:k
-event2 DEVICE_ADDED Sleep Button seat0 default group4 cap:k
-event9 DEVICE_ADDED Integrated_Webcam_HD: Integrate seat0 default group5 cap:k
-event10 DEVICE_ADDED Integrated_Webcam_HD: Integrate seat0 default group5 cap:k
-event13 DEVICE_ADDED Wacom HID 486A Pen seat0 default group6 cap:T size 344x194mm calib
-event14 DEVICE_ADDED Wacom HID 486A Finger seat0 default group6 cap:t size 344x194mm ntouches 10 calib
-event12 DEVICE_ADDED DELL080D:00 06CB:7A13 Touchpad seat0 default group7 cap:pg size 102x77mm tap(dl off) left scroll-nat scroll-2fg-edge click-buttonareas-clickfinger dwt-on
-event15 DEVICE_ADDED CalDigit, Inc. CalDigit Thunderbolt 3 Audio seat0 default group8 cap:k
-event16 DEVICE_ADDED Razer Razer Imperator seat0 default group9 cap:p left scroll-nat scroll-button
-event23 DEVICE_ADDED Razer Razer Imperator Keyboard seat0 default group9 cap:k
-event24 DEVICE_ADDED Razer Razer Imperator Consumer Control seat0 default group9 cap:kp scroll-nat
-event25 DEVICE_ADDED Razer Razer Imperator System Control seat0 default group9 cap:k
-event26 DEVICE_ADDED TypeMatrix.com USB Keyboard seat0 default group10 cap:k
-event27 DEVICE_ADDED TypeMatrix.com USB Keyboard System Control seat0 default group10 cap:k
-event28 DEVICE_ADDED TypeMatrix.com USB Keyboard Consumer Control seat0 default group10 cap:kp scroll-nat
-event8 DEVICE_ADDED Intel Virtual Button driver seat0 default group11 cap:kS
-event17 DEVICE_ADDED HDA Intel PCH Headphone Mic seat0 default group12 cap:
-event18 DEVICE_ADDED HDA Intel PCH HDMI/DP,pcm=3 seat0 default group12 cap:
-event19 DEVICE_ADDED HDA Intel PCH HDMI/DP,pcm=7 seat0 default group12 cap:
-event20 DEVICE_ADDED HDA Intel PCH HDMI/DP,pcm=8 seat0 default group12 cap:
-event21 DEVICE_ADDED HDA Intel PCH HDMI/DP,pcm=9 seat0 default group12 cap:
-event22 DEVICE_ADDED HDA Intel PCH HDMI/DP,pcm=10 seat0 default group12 cap:
-event6 DEVICE_ADDED Intel HID events seat0 default group13 cap:k
-event7 DEVICE_ADDED Intel HID 5 button array seat0 default group14 cap:k
-event11 DEVICE_ADDED Dell WMI hotkeys seat0 default group15 cap:k
-event4 DEVICE_ADDED AT Translated Set 2 keyboard seat0 default group16 cap:k
-event8 SWITCH_TOGGLE +3.90s switch tablet-mode state 1
event8 SWITCH_TOGGLE +5.44s switch tablet-mode state 0
전환을 담당하는 것으로 보이는 "Intel Virtual Button Driver"에 대한 자세한 내용은 다음과 같습니다 tablet-mode
.
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="Intel Virtual Button driver"
P: Phys=
S: Sysfs=/devices/pci0000:00/0000:00:1f.0/PNP0C09:00/INT33D6:00/input/input8
U: Uniq=
H: Handlers=kbd event8
B: PROP=0
B: EV=33
B: KEY=2000000000000 0 0 0 0 1000000000000 0 201c000000000000 0
B: MSC=10
B: SW=2
$ find /sys/bus/ -name 'PNP0C09:00'
/sys/bus/platform/devices/PNP0C09:00
/sys/bus/acpi/devices/PNP0C09:00
/sys/bus/acpi/drivers/ec/PNP0C09:00
$ find /sys/devices/ -name 'PNP0C09:00'
/sys/devices/pci0000:00/0000:00:1f.0/PNP0C09:00
/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:11/PNP0C09:00
$ udevadm info /sys/class/input/event8
P: /devices/pci0000:00/0000:00:1f.0/PNP0C09:00/INT33D6:00/input/input8/event8
N: input/event8
S: input/by-path/pci-0000:00:1f.0-platform-INT33D6:00-event
E: DEVLINKS=/dev/input/by-path/pci-0000:00:1f.0-platform-INT33D6:00-event
E: DEVNAME=/dev/input/event8
E: DEVPATH=/devices/pci0000:00/0000:00:1f.0/PNP0C09:00/INT33D6:00/input/input8/event8
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_SWITCH=1
E: ID_PATH=pci-0000:00:1f.0-platform-INT33D6:00
E: ID_PATH_TAG=pci-0000_00_1f_0-platform-INT33D6_00
E: MAJOR=13
E: MINOR=72
E: SUBSYSTEM=input
E: TAGS=:power-switch:
E: USEC_INITIALIZED=5811208
답변1
상위 장치에서 드라이버 바인딩 해제를 테스트할 수 있습니다. 이렇게 하면 하위 장치가 제거됩니다 input0
.그리고 거기에 있는 다른 모든 하위 장치.
cd /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00
echo PNP0C0D:00 | sudo tee driver/unbind
두 번째 예는 언급한 다른 입력 장치를 기반으로 합니다.
cd /sys/devices/pci0000:00/0000:00:1f.0/PNP0C09:00/INT33D6:00
echo INT33D6:00 | sudo tee driver/unbind
(이와 같은 명령이 자동으로 실행되도록 예약하는 경우 드라이버가 바인딩된 후에 실행되는지 확인해야 합니다... 많은 경우에 이를 에 넣을 수 있다고 생각합니다 rc.local
).
추가 읽기
LWN.net에서는 이 기능을 다음과 같이 설명합니다.드라이버를 수동으로 바인딩 및 바인딩 해제.
답변2
당신은 할 수끈질기게systemd-logind 에서 구성을 변경하여 덮개 스위치 이벤트를 무시합니다 /etc/systemd/logind.conf
.
내 시스템에서:
[Login]
HandleLidSwitch=ignore
HandleLidSwitchDocked=ignore
변경한 후에는 systemctl restart systemd-logind
이를 효과적으로 적용할 수 있습니다.