作者cuello (cuello)
看板Linux
标题[问题] 2.4G 无线滑鼠键盘凭甚麽关我笔电?
时间Sun Mar 21 11:04:21 2021
Hi,
我笔电是个 ASUS X205TA, kernel 5.10.24, Debian buster
笔电 USB 插了一个所谓 "空中飞鼠" 的 HID.
这是一个两面, 有陀螺仪的"飞鼠"跟键盘.
其中一面是个简单的配置:游标,[OK], 音量,
最上面还一颗红色的 [POWER] 键,是我需要各位解惑的地方!
1. 它凭啥关我笔电?甚麽管道?我自己都还要 sudo, 它谁?
2. 如何告诉我的系统,不准接受 hid 来的 shutdown 命令?
系统只有最小的 window manager, 不用 desktop.
------------- 背景补充说明 -----------
我把这笔电当电视盒用,是不关机的
拉 HDMI 线到一个甚麽都没有的电视
平常盖子都合起来的,上面堆满杂物
看电视或换 kernel 重开机... 都是经 ssh
或是 barrier(前身叫 synergy)直接把滑鼠滑过去
不用电脑的时候,就用这支 "空中飞鼠"
这支空中飞鼠有两个红外线 LED, 平常也没在用吧
^^^^^^^^^^^^^
改错字,是一颗,不是两颗!
没错,我也一直把 HID 视为恐怖的安全威胁...
没想到,它连 "正常" 的 feature 就这麽恐怖了喔
我一按到见它红色的 [POWER] 键,系统就 shutdown!
所以一直避免去碰那一颗红色键
昨天,痒痒的,心想它的 IR LED 总有个功能吧
虽然找不到资料说它可以学习电视机的摇遥控码
终於试出来了!它确实可以经由 LED 关我电视
so far so good... 但是它确同时关电视也关电脑!
哈罗~
我不晓得怎麽告诉空中飞鼠请它不要这麽做
因为实在找不到资料
所以,只好回到我本来就要认真面对的问题:
它是怎麽关我电脑的???
我 Linux 这边的确 load 了一个叫 cec.ko 的 module
但我的电视根本不懂甚麽是 CEC... 所以应该无关
再来就是,
我要怎麽 disable 掉来自 HID 的恐怖指令?
好了,还有甚麽我根本没搞清楚的事呢?拜托了~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.115.174.130 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1616295863.A.647.html
1F:推 Bencrie: 还好吧,一般桌面环境按关机也不用 root privilege03/21 11:38
2F:推 Bencrie: 如果你 init 没换还是 systemd 的话就去改 logind 的03/21 11:40
3F:→ Bencrie: config 把 HandlePowerKey 改掉试试看03/21 11:41
4F:推 Gold740716: 就像你短按电源键会正常关机一样03/21 11:53
题外话,听起来,好像我可以把 systemd 弄掉,是吗?忍很久了...
HandlePowerKey=ignore 吗?那我就不能按笔电的电源键了吗?
disable power key, 这我得确没想到.
但是这台只要用 XHCI 就会随机当掉, 或卡住
常常需要按住电原源键很久才能关机呀....
所以,你们是说,它是送 ACPI 信号下的手吗?
你们都觉得还好喔...
是说,一个 remotely accessable device
(广告上说 15 公尺, 天啊~)
可以有这 privilege 真的让我担心啊,
那 proximity 这一层安全保障不是彻底被 neutralized 了? ....
我先来改 logind.conf 看看... hmmm 怎麽 reload 呢?
算了,重开好了
※ 编辑: cuello (59.115.174.130 台湾), 03/21/2021 12:13:51
回来报告,没有用,我的 logind.conf 现在只有4行有效:
HandlePowerKey=ignore
HandleSuspendKey=suspend
HandleHibernateKey=hibernate
HandleLidSwitch=ignore
只是,就算完全 disable 掉电源键,
听起来还是不理想说....
※ 编辑: cuello (59.115.174.130 台湾), 03/21/2021 12:23:22
喔还有,刚刚确认了一下,电源键真的失效了,
但是那个东西,说关就关,哈罗~
※ 编辑: cuello (59.115.174.130 台湾), 03/21/2021 12:26:53
5F:推 Bencrie: 反正你只用 wm,没用到 logind 的话就可以换 init03/21 12:26
6F:→ Bencrie: 传统的 sysvinit、busybox、openrc、runit03/21 12:27
感谢!你传的是福音啊~ 有空时,给个有详细说明的 pointer 吧!
※ 编辑: cuello (59.115.174.130 台湾), 03/21/2021 12:30:17
7F:→ cuello: 我想去睡了,还没....03/21 12:36
不能睡啊~
刚刚才在想先把 logind.conf 改回来,
免得关不了机,没想到,已~经~当~了~ :)
救命啊~ 我现在怎麽关机? .....
※ 编辑: cuello (59.115.174.130 台湾), 03/21/2021 12:42:25
8F:推 Hurricaneger: 你电源键压着也是直接关啊!03/21 12:41
9F:推 Bencrie: 另外你的系统有 lirc ?03/21 12:43
对对!抱歉!刚刚按着不放,还好关了,多谢!
另外,我这笔电没红外线也,
我也好久没看到 lirc 这个字了..
是在怀疑笔电接收了"它"的 IR 信号吗?
※ 编辑: cuello (59.115.174.130 台湾), 03/21/2021 12:47:13
10F:推 s9209122222: systemd 很赞呀,自从有了它我才觉得 Linux 操作比较03/21 12:50
11F:→ s9209122222: 有逻辑03/21 12:50
12F:→ s9209122222: 旧的方式根本莫名其妙03/21 12:50
※ 编辑: cuello (59.115.174.130 台湾), 03/21/2021 12:56:21
13F:推 Bencrie: 举个莫名其妙的例子吧 XD03/21 13:06
14F:嘘 LinBuoRen: 临机能让系统正常关机算啥危险权限03/21 15:49
除了 hid 的 DoS, 还有更多事可以做...
15F:嘘 brli7848: 还需要啥详细说明?有关键字还找不到官网吗?03/21 17:37
啊就是技不如人,就找人帮忙罗~
16F:→ da21510: 无熔丝开关可以在超过15米的地方关你机03/21 17:38
17F:→ Bencrie: 人家笔电有电池啦03/21 17:58
※ 编辑: cuello (39.12.130.207 台湾), 03/21/2021 19:31:05
18F:→ tomsawyer: 不要用systemd阿 换alphine linux03/21 22:25
19F:推 btzhang2718: 在OpenBSD上,电源键的行为可以透过用sysctl改kerne03/22 14:57
20F:→ btzhang2718: l parameter来改变,不知道linux上面有没有类似的功03/22 14:57
21F:→ btzhang2718: 能03/22 14:57
是的,Linux 也有 sysctl(8)
我刚刚去看 linux-5.10.24/Documentation/admin-guide/kernel-parameters.txt
机器没在用的时候, 再来试试 acpi=off 或是 pci=noacpi
但是,我也真的搞不清楚两者的区别
我对这些 kernel param. 完全没有掌握...
真的是,别人怎麽用,我也跟着试试看而已
感觉上,电源键所产生的,
是个 acpi event, udev 拦不到...
不然,我是可以自己来拦住的
但是它一定是模拟电源键 event 吗?
刚刚也看了一下, /etc/acpi/powerbtn-acpi-support.sh
well... systemd 介入得真很深, 然後也创造了一堆 "policies"
无论如何,我们上次已经试过把 power button disable 掉了
但是它还是可以关我机...
它是经由甚麽管道关我机器的,相信不只我一个人会想知道吧...
它是触发了一个 acpi event 吗?
我不知道.... 现在只能乱想...
※ 编辑: cuello (59.115.174.130 台湾), 03/23/2021 00:39:46
令外,刚刚又看了一下 `sysctl -a`
里面有一行 kernel.poweroff_cmd = /sbin/poweroff
/sbin/poweroff --- sym-link ---> /bin/systemctl
还是 systemd 在掌控
※ 编辑: cuello (59.115.174.130 台湾), 03/23/2021 00:59:28
所以,基本上我可以到
/etc/acpi/events/powerbtn-acpi-support
去拦截看看,试过再来报告
※ 编辑: cuello (59.115.174.130 台湾), 03/23/2021 01:27:15
22F:→ Bencrie: sysrq 好像也能关机,不过 systemd 应该不会这麽干吧03/23 01:59
23F:推 Bencrie: 然後 poweroff、reboot 这些本来就 init 在管的吧03/23 02:02
:) 忘了 systemd 就是 init
是说... 我到底是忘了,还是害怕想起来...
我去试了 echo o | sudo tee /proc/sysrq-trigger
是关机了, 不过非常暴力,没 sync, 没 umount,看起来不像"它"关机的样子
然候 `cat /proc/sys/kernel/sysrq` 是 438, 我的其它机器也是
手痒就乱试了一下 # echo 0 > /proc/sys/kernel/sysrq 但"它"关机还是很顺畅
※ 编辑: cuello (59.115.208.54 台湾), 03/23/2021 12:43:25
我试过了 kernel param. acpi=off 但是这一台开机不起来
(root fs 的 UUID "不存在", 进入 initramfs 的 prompt)
就没再试 pci=noiacpi 了...
去检查 /etc/acpi/events/ 有两个档案
1. /etc/acpi/events/powerbtn-acpi-support 有2行
---
event=button[ /]power
action=/etc/acpi/powerbtn-acpi-support.sh
---
2. /etc/acpi/events/powerbtn 有4行
---
# /etc/acpi/events/power
# This is called when the user presses the power button
event=button/power (PWR||PBTN)
action=/sbin/poweroff
---
其中,第2个档案有点奇怪,因为我其它机器都没有,
用 "dpkg -S" 查已安装 pkg
也用 "apt-file find" 找未安装 pkg
都查不到 "/etc/acpi/events/powerbtn" 是哪里来的
两个有不一样的 event 的写法,反正我不懂
就把两个档岸的 action 都改成指到我家的 one-liner
sudo /bin/sh -c "echo $0: down down down > /dev/kmsg"
(大概不需要 sudo,但无论如何我这麽做了)
(我会尽量必不漏细节,像个合作的 patient)
没有用,只是 "隐约觉得" 电源键不太灵敏,似乎按两三次才关机?
anyway, 无论是按哪一个电源键,我都没能阻止关机
因为看不到 `dmesg`, 又新增一行
date +%s >> /我家/down
开开关关忙乱中,印象里,"/我家/down" 不曾出现过
还好编辑的时候,又去确认一下,有!它们(?) 的确有被叫到过
忙乱中,忘了去区分是哪个档案...
(後记:刚才又去看 "/我家/down"
epoch 时间都是成双成对!
所以档案 1跟2 都有被执行.
我前面说 "好像没出现过" 很能是看错机器...)
不过结论还是,改掉以上两个档案的 action= 没能阻止关机.
补充说明一些或许不该遗漏的细节:
改这两个档案时,我先是用 # 把原来那一行 action= comment 掉
发现这麽做没有用之後,就把 comment-line 去掉,保留原始模样
因为我实在不能假设他们会如预期去 parse 这两行
所以,我现在的 /etc/acpi/events/ 还有另外两个档:
powerbtn-acpi-support.org 跟 powerbtn.org
※ 编辑: cuello (59.115.208.54 台湾), 03/23/2021 13:31:33
※ 编辑: cuello (59.115.208.54 台湾), 03/23/2021 13:33:10
忘了一件事,本来想要 purge 掉 acpi-support-base 并重装
因为,我多出一个来源不明的 "/etc/acpi/events/powerbtn"
# apt autoremove --purge acpi-support-base
却看到它要移除5个 packages:
acpi-fakekey* acpi-support* acpi-support-base* pm-utils* vbetool*
因为看 acpi-fakekey 似乎有可能塞给 key-buffer 像是 "init 0" 啊,
或是 sysrq 啊 .... etc. 就没有继续下去,而是把 acpi-fakekey 解除安装
但这件事对於关机的事情丝毫没有影响
(我是说,我没看到任何影响... god...)
解安装 pkg acpi-fakekey 时,没有其它的 dependancies
※ 编辑: cuello (59.115.208.54 台湾), 03/23/2021 13:44:47
※ 编辑: cuello (59.115.208.54 台湾), 03/23/2021 13:45:06
※ 编辑: cuello (59.115.208.54 台湾), 03/23/2021 14:00:37
※ 编辑: cuello (59.115.208.54 台湾), 03/23/2021 14:02:26
24F:推 Bencrie: 我都用 aptitude 处理 dependencies,关 solver 跟03/23 19:25
25F:→ Bencrie: autoremove,全部手动调03/23 19:25
好,下次应该会记得你提过这事。
断断续续偶而玩一下我现在的
shutdown sequence.
感觉愈来愈佩服这个 "空中飞鼠"
玩电源键玩到因为这个或那个而当机
但是"它"办起事情总是乾净俐落
所以,让我们崇拜吧
https://i.imgur.com/7mJwOoi.jpg
※ 编辑: cuello (59.115.208.54 台湾), 03/24/2021 19:29:42
上几此提起到 /etc/acpi/events/ 里"来源不明"档案 (2)
原来是约一年前因为按电源键不能关机, 忘了怎麽建立的
刚刚,为了玩这两个档案,系统卡住了了无数次, 硬关, 再开
最後,居然是舍弃 acpi-support-base 套件的
/etc/acpi/events/powerbtn-acpi-support
而用我自己不知哪里看来,抄来的
/etc/acpi/events/powerbtn (那四行前面有抄进来)
相较於档 1,这个档案关机似乎是 *绕过* systemd 的
听说有一些事情是 *绕过* systemd 比较方便
而且看起来是日常的, 相当正式的 practice!
常常让我想起自己初学计算机所写的程式...
我以前因为电源直键没作用, 忙了一阵子
後来,我自己相信是因为装了 acpid 才好的
但是, 我自己是非常不可靠的...
刚刚把 acpid 停用了, 我的"两个"电源键都还很好用
所以, $ service --status-all | grep ${1:-"+"}
现在是
[ + ] cron
[ + ] dbus
[ + ] exim4
[ + ] kmod
[ + ] network-manager
[ + ] networking
[ + ] ntp
[ + ] procps
[ + ] rsyslog
[ + ] ssh
[ + ] tlp
[ + ] udev
(题外话,还有甚麽多余的吗? :)
稍微整理一下, 目前的状态 ("两个"电源键都正常动作)
1. logind.conf 没有动, i.e. HandlePowerKey=poweroff
2. /etc/acpi/events/powerbtn 是绕过 systemd 的(再抄一次好了)
---
# /etc/acpi/events/power
# This is called when the user presses the power button
event=button/power (PWR||PBTN)
action=/sbin/poweroff
---
3. acpid 停用了
4. logind.conf: HandlePowerKey=ignore 的话
电源键失效, 但是 "空中飞鼠" bypass systemd 还是关我机
而且是... err.... gracefully!
(想到再补)
5. 也试过 # echo 0 > /proc/sys/kernel/sysrq (它照关不误)
※ 编辑: cuello (59.115.208.54 台湾), 03/24/2021 20:01:41
26F:推 Bencrie: journalctl 那边不知道有没有得查,一般关机只会知道 03/24 20:01
27F:→ Bencrie: logind 会打 log 03/24 20:01
我不熟,所以只有 $ sudo journalctl -a |grep shut |less -r
(删掉了,见以下修正,因为忘了 case)
刚刚又在想,照片上的产品是要卖给所有人的(包括 windows 用户)
所以,它应该做的是很低阶的事情... 我不晓得有无包含 mac 用户...
※ 编辑: cuello (59.115.208.54 台湾), 03/24/2021 20:26:34
喔,还有,这东西买家很多是拿来插各厂牌智慧型电视机的
不过, 当初,这个是跟 remix mini 电视盒来的(Android 5)
※ 编辑: cuello (59.115.208.54 台湾), 03/24/2021 20:33:38
※ 编辑: cuello (59.115.208.54 台湾), 03/24/2021 20:34:18
抱歉!case! $ sudo journalctl -a |grep -i shut |less -r
Mar 24 20:05:53 h systemd[1]: Starting Update UTMP about System Boot/Shutdown...
Mar 24 20:05:54 h systemd[1]: Started Update UTMP about System Boot/Shutdown.
Mar 24 20:05:54 h systemd[1]: Starting Restore /etc/resolv.conf if the system crashed before the ppp link was shut down...
Mar 24 20:05:54 h systemd[1]: Started Restore /etc/resolv.conf if the system crashed before the ppp link was shut down.
Mar 24 20:05:58 h systemd[1]: Starting TLP system startup/shutdown...
Mar 24 20:05:58 h systemd[1]: Started TLP system startup/shutdown.
$ sudo journalctl -a |grep -i power |less -r
Mar 24 20:05:50 h kernel: ACPI: Power Resource [P18P] (off)
Mar 24 20:05:50 h kernel: ACPI: Power Resource [P1XT] (off)
Mar 24 20:05:52 h kernel: input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input15
Mar 24 20:05:52 h kernel: ACPI: Power Button [PWRB]
Mar 24 20:05:54 h dbus-daemon[1730]: dbus[1730]: Unknown group "power" in message bus configuration file
Mar 24 20:05:55 h kernel: Modules linked in: uvcvideo(+) videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev mc intel_soc_dts_thermal intel_powerclamp coretemp kvm_intel kvm irqbypass crc32_pclmul nls_ascii aesni_intel crypto_simd cryptd nls_cp437 intel_cstate vfat brcmfmac brcmutil deflate efi_pstore asus_nb_wmi pcspkr evdev cfg80211 intel_chtdc_ti_pwrbtn ofpart iTCO_wdt intel_pmc_bxt iTCO_vendor_support intel_spi_platform intel_spi spi_nor mtd tiny_power_button button
soc_button_array int3403_thermal int3406_thermal int3400_thermal processor_thermal_device int340x_thermal_zone acpi_thermal_rel intel_soc_dts_iosf snd_intel_sst_acpi snd_soc_acpi_intel_match snd_soc_acpi snd_intel_sst_core acpi_pad intel_int0002_vgpio asus_wireless ac snd_soc_rt5645 snd_soc_sst_atom_hifi2_platform snd_soc_rl6231 snd_soc_core elan_i2c snd_compress snd_pcm_dmaengine snd_pcm snd_timer snd soundcore i915 cec rc_core drm_kms_helper drm i2c_algo_bit fb_sys_fops syscopyarea sysfillrect
sysimgblt efivarfs
Mar 24 20:05:56 h systemd-logind[1723]: Watching system buttons on /dev/input/event14 (Power Button)
Mar 24 20:05:58 h tlp[2736]: Applying power save settings...done.
※ 编辑: cuello (59.115.208.54 台湾), 03/24/2021 21:05:05
※ 编辑: cuello (59.115.208.54 台湾), 03/24/2021 21:19:40
28F:推 Bencrie: journalctl -b 1 从 systemd-logind: System is powering 03/24 23:31
29F:→ Bencrie: down 开始算吧。 03/24 23:31
hmmm... 我的麻烦是会得到
Specifying boot ID or boot offset has no effect,
no persistent journal was found.
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 00:57:59
然後,我又直接去动 /etc/acpi/powerbtn-acpi-support.sh
把最後一行(叫 /sbin/shutdown 那行) 改为叫我家的 script
它只做写 /dev/kmsg 的事李情, 按笔电电源键, 不仅事情没做, 还会当机
但是,空中飞鼠的电源键关机动作很乾净, 它根本就绕过 systemd
至於会当机... 大概,反正... 我干扰了整个 interrupt handling 吧...
好,就乾脆在 /etc/acpi/powerbtn-acpi-support.sh 的第一行写:
echo "$0: power button pressed..." > /dev/kmsg
exit 0
然後, guess what :)
无论是笔电,还是"飞鼠" 的电源键 都可正常关机... 一如往常 XD
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 17:50:22
下一步玩的是 xinput(1), 跟 "空中飞鼠" 有关的几行是:
$ DISPLAY=:0.0 xinput --list | grep RFIC
FREEWAY TECHNOLOGY RFIC-MOUSE Consumer Control id=16 [slave pointer (2)]
FREEWAY TECHNOLOGY RFIC-MOUSE id=18 [slave pointer (2)]
FREEWAY TECHNOLOGY RFIC-MOUSE Keyboard id=15 [slave keyboard (3)]
FREEWAY TECHNOLOGY RFIC-MOUSE System Control id=17 [slave keyboard (3)]
FREEWAY TECHNOLOGY RFIC-MOUSE Consumer Control id=26 [slave keyboard (3)]
$ xinput disable 16 18 15 17 26 (我是分开做的, 不知能不能写在一行)
好,这样,"空中飞鼠" 武功就废了吧! 没错!全废了!......
除了.... 那一颗红色的[电源]键! 难怪他们漆成红色的... 厉害吧~
所以,不晓得有没有硬体比较熟的网友?
另外,那.... 我们的 USB 好像还真的蛮 weak 的说....
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 19:09:08
30F:推 Bencrie: 你要不要直接 boot 进 bash 按看看到底是不是真的绕过 03/25 19:59
31F:→ Bencrie: init 直接关机 03/25 19:59
好,我来试看看,平时用 lilo, 但这台是 grub....
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 21:30:07
我在 google .... 刚是到 grub 里把
command line 加了 "init=/bin./bash"... 不是喔....
你的意思是到最单纯的 single user mode 吗?
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 21:40:22
啊对啦,忘了讲,我想在 grub 画面用键盘,必须先拔掉 USB 的发射器
不然键盘不动...
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 21:42:14
先讲你上次提的,我改了 /etc/systemd/journald.conf (Storage=persistent)
可以看到最後一次关机 (按飞鼠关的)
(我觉得有关的)
(...)
Mar 25 21:53:56 h sudo[3573]: pam_unix(sudo:session): session closed for user root
Mar 25 21:54:14 h systemd-logind[1840]: Power key pressed.
Mar 25 21:54:14 h systemd-logind[1840]: Powering Off...
Mar 25 21:54:14 h systemd-logind[1840]: System is powering down.
Mar 25 21:54:15 h systemd[1]: Stopped target Graphical Interface.
(...)
Mar 25 21:54:16 h systemd[2804]: Reached target Shutdown.
这样的话,又不像是绕过 init 啊....
只是目前看不到 key press 来源...
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 22:03:23
有啦, -a -o verbose 可以看到
(...)
SYSLOG_IDENTIFIER=systemd-logind
_COMM=systemd-logind
_EXE=/usr/lib/systemd/systemd-logind
_CMDLINE=/lib/systemd/systemd-logind
_CAP_EFFECTIVE=24420002f
_SYSTEMD_CGROUP=/system.slice/systemd-logind.service
_SYSTEMD_UNIT=systemd-logind.service
CODE_FILE=../src/login/logind-button.c
CODE_LINE=158
CODE_FUNC=button_dispatch
MESSAGE=Power key pressed.
(...)
还有刚刚 xinput 的故事,我也不会讲了
整支都变砖块了,只有「电源键」」会动
另外,grub 我後面加了 init=/bin/bash 还是开到最高 runlevel...
真的不会用... :(
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 22:16:37
再来把一些东西整理一下
$ lsusb -t
Bus 001 Device 005: ID 25a7:2402
^^^^^^^^^^^^ 刚忘了讲是这个
Bus 001 Device 006: ID 2318:2808 Shining Technologies, Inc. [hex]
Bus 001 Device 004: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 003: ID 0bda:57b5 Realtek Semiconductor Corp.
Bus 001 Device 002: ID 8087:07e6 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ ls -l /dev/input/by-id/usb-FREEWAY_TECHNOLOGY_RFIC-MOUSE-* | cut -d " " -f9-
/dev/input/by-id/usb-FREEWAY_TECHNOLOGY_RFIC-MOUSE-event-if00 -> ../event2
/dev/input/by-id/usb-FREEWAY_TECHNOLOGY_RFIC-MOUSE-event-joystick -> ../event4
/dev/input/by-id/usb-FREEWAY_TECHNOLOGY_RFIC-MOUSE-event-kbd -> ../event1
/dev/input/by-id/usb-FREEWAY_TECHNOLOGY_RFIC-MOUSE-if01-event-mouse -> ../event5
/dev/input/by-id/usb-FREEWAY_TECHNOLOGY_RFIC-MOUSE-if01-mouse -> ../mouse0
/dev/input/by-id/usb-FREEWAY_TECHNOLOGY_RFIC-MOUSE-joystick -> ../js0
先前把 event[2415] mouse0 js0 都 rm 掉, 所有功能都正常
这我也不懂... 要不是 Bencrie 一路陪到底,我自己才不会玩到这里咧....
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 22:40:51
※ 编辑: cuello (59.115.208.54 台湾), 03/25/2021 22:45:06
32F:推 Bencrie: init 指到 bash 那个我省略太多细节 orz 03/26 11:33
33F:推 Bencrie: journalctl 应该可以看到 systemd 监控哪些input devices 03/26 11:45
34F:推 mgdesigner: 不要用systemd ,MX Linux也可以 03/26 12:34
35F:推 holishing: 还有 Devuan GNU+Linux 03/26 23:17
又有许多功课要作了, mx, devuan :)
有啦,我用 devuan usb-live 开过机, 後来不知怎样不了了之...
无论如何, Bencrie 给了一个, 我想是很关键的提示啦
就是 systemd 跟 desktop 的关系
而我是从来不用 desktop 的,以後应该也不会
这给了我具体的感觉:抽掉 systemd 原来是可能的
但是还没有机会开始着手去爬文就是
无意引起 "vi-或是-emacs" 的讨论
我从来不详 systemd 发展过程, 只是有一天突然找不到 inittab ...
先来跟大家报告,目前为止暂时的结论:
问题 (1)
至今无解, 也就是, 这个 "空中飞鼠" 是怎麽关我机的.
目前比较可靠的想像是
它最像是触发了一个 [临机按下电源键的 event]
不管是甚麽 event...
我先前要坚称的"它绕过" init,似乎很错...
问题 (2)
我怎麽阻止它关我机?现在只能用 Bencrie 一开始的提议
/etc/systemd/logind.conf: HandlePowerKey=ignore
就是完全不用笔电的电源键.
大家会说,啊~ 我不是说,改 logind.conf 无效吗?
是这样的,我当时不是还碎碎念说,
改了之後怎麽 reload 让它生效吗...
其实到现在我也没有个确定的答案
那重新开机不是就生效了?!
这就是我必须说声抱歉的主因
情况显示,并非如此!!!
我最近机器开开关关的都已经三位数了
所以我後来愈保守,不想随便把实验结果po出来乱!
根据 sudo journalctl -f 里所看到的红字, 例如:
i2c i2c-3: i2c write failed: -121
i2c_designware 80860F41:04: controller timed out
intel_soc_pmic_chtdc_ti i2c-INT33F5:00: Failed to ack 0x1: -110
intel_soc_pmic_chtdc_ti i2c-INT33F5:00: Failed to read IRQ status: -110
爬了许多文,很多是在规定蛮严的地方
(我没有全部都列举 也没真的彻底爬完所有的讨论)
大家会碰到一个还蛮头痛的问题, 就是
"你上一次关机前的 state,会影响到这次..."
用我的话说:关机并没有 initialize 机器到同样的状态向量.
更何况,在这中间,我又 compiled 过 kernels
从 5.10.24 到 5.10.26,然後又换到 5.4.108
然後,他们也认真地在考虑 patch 某 .c 档案里的*常数*(!)
当然,我并没有跟着玩进去...
想说,我既然决定躲在 longterm 的 kernel 就不该这麽勇敢吧...
voila
※ 编辑: cuello (59.115.200.5 台湾), 03/29/2021 21:31:35
36F:→ tomsawyer: 还是南桥直接把usb讯号转成关机键讯号了 03/30 00:48
是的,虽然我的是 Atom Z3735F Bay Trail 是个 SoC
但相信对应的功能都在里面
所以无论是笔电的电源验键或是 USB HID 的电源键
经过 hardware abstraction 都成为所谓的 "KEY_POWER"
$ grep KEY_POWER /usr/src/linux-`uname -r`/include/uapi/linux/input-event-codes.h
#define KEY_POWER 116 /* SC System Power Down */
#define KEY_POWER2 0x164
我不晓得 KEY_POWER2 是甚麽...
37F:推 joe820730: 那颗红色按钮最终送到系统的动作就是短按电源按钮, 04/01 22:02
38F:→ joe820730: 中间的过程则是由driver(或者说kernel module)实现, 04/01 22:02
39F:→ joe820730: 要保留原本电源按钮的功能的话只能driver 04/01 22:02
是,不管是从 USB, 还是从笔电的键直接焊到 GPIO 或哪里...
它们应该都是被 abstracted 成 KEY_POWER...
只是如果我在上层玩, 会区分不出是哪里来的信号
我心里一直偷偷地在想的就是 interrupt source...
事实上, 我这一两天已经成功区分出两个电源键
并且只禁用我不想要的那一颗电源键
所以, /etc/systemd/logind.conf 已改回
HandlePowerKey=poweroff
这个档案是满头痛的, 因为我需要 HandleLidSwitch=ignore
而每一次更新 systemd 都会覆概过去
但现在找到一个可以一并处理的办法
放在属於自己管理的地方
不必每次安装系统都要一个一个去 "修复" 到 "堪用" 为止...
不过,我想... 看甚麽时候来另外回一篇
回报到目前为止的结果好了
这篇已经太长,太乱了...
※ 编辑: cuello (59.115.154.132 台湾), 04/04/2021 23:53:49
※ 编辑: cuello (59.115.154.132 台湾), 04/04/2021 23:55:46
40F:推 skycat2216: 你要不要测试看看Windows to go会不会有这种状况好了 04/08 19:53
41F:→ skycat2216: WTG会关就是南桥问题了 04/08 19:53
没有 WTG, 改天有机会再看看, 我想应该会是一样的结果吧...
基本上, 两个电源键分别走不同的路径一直到 kernel 的
/usr/src/linux-`uname -r`/drivers/input/evdev.c
笔电上的电源键或可以很直接到 GPIO, 但 USB HID 总是要
经过 USB controller, 经 usbhid, 到 ... evdev ...
我先前想像得那麽 "硬体" 应该是蛮错的 ... :(
※ 编辑: cuello (59.115.221.229 台湾), 04/10/2021 02:16:12