使用NumberPad数字小键盘
华硕没有公开驱动, 有一个项目实现了他: 链接 原理很简单, 当检测到从右上角边缘向内滑动的时候, 使用i2c总线向触控板发光单元所在寄存器发送点亮/关闭指令, 同时检测到手指按下, 根据位置模拟输入数字. 但是在ArchLinux上存在一点问题:
- 这个项目的shell会将py程序注册成服务使得可以在启动的时候自动执行, 但是Arch的开机策略可能有问题, 导致存在一定概率让服务先启动, 触控板后启动, 这样程序检测不到i2c总线上的触控板设备, 无法开启
- 正则写的稍微有点问题, 导致无法匹配触控板ID, 解决方案是
偶尔无法正确启动的解决方法(重启服务还是不可以的情况)
-
正确执行安装shell -
修改Python程序 vim /usr/share/asus_touchpad_numpad-driver/asus_touchpad.py
-
在offCmd=... 后面添加一行 print(onCmd)
-
反复执行Py程序 sudo python /usr/share/asus_touchpad_numpad-driver/asus_touchpad.py <your option like m433ia>
-
当触控板可以正确点亮的时候记录device_id i2ctransfer -f -y 1 w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x01 0xad
例如这个的ID是1 -
在 /proc/bus/input/devices 中寻找 i2c-<your device_id> 的内容 , 记录下所有符合的行(以 S: 开头) -
重启直到触控板不会正确点亮 -
重新在 /proc/bus/input/devices , 寻找刚刚记录的行, 例如我刚刚记录的是 S: Sysfs=/devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-1/i2c-ASUE140A:00/0018:04F3:3134.0001/input/input11
可以通过MAC快速找到 i2c-ASUE140A:00/0018:04F3:3134.0001 -
无法正确使用的时候的设备ID例如i2c-10 就是 10 -
尝试运行 i2ctransfer -f -y <the device_id you find in step 9> w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x01 0xad
如果成功那么执行11步骤 -
修改PY程序 onCmd = "i2ctransfer -f -y " + device_id + " w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x01 0xad"
offCmd = "i2ctransfer -f -y " + device_id + " w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x00 0xad"
+ onCmd2 = "i2ctransfer -f -y " + "1" + " w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x01 0xad"
+ offCmd2 = "i2ctransfer -f -y " + "1" + " w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x00 0xad"
- print(onCmd2)
+
+ onCmd3 = "i2ctransfer -f -y " + "10" + " w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x01 0xad"
+ offCmd3 = "i2ctransfer -f -y " + "10" + " w13@0x15 0x05 0x00 0x3d 0x03 0x06 0x00 0x07 0x00 0x0d 0x14 0x03 0x00 0xad"
+
+ if subprocess.call(onCmd, shell=True)==1:
+ onCmd = onCmd2
+ offCmd = offCmd2
+ if subprocess.call(onCmd, shell=True)==1:
+ onCmd = onCmd3
+ offCmd = offCmd3
+ if subprocess.call(onCmd, shell=True)==1:
+ subprocess.call("cp /proc/bus/input/devices /home/liukairui/.numPadErr/$(date '+ERR_%Y-%m-%d_%H:%M')", shell=True)
+ subprocess.call("echo '\n========\nDEVICE_ID="+device_id+"\n========\n' >> /home/liukairui/.numPadErr/$(date '+ERR_%Y-%m-%d_%H:%M')", shell=True)
+ sys.exit(1)
这里的1与10分别是正常与不正常时候的设备ID -
尝试重启服务 systemctl restart asus_touchpad_numpad.service
-
如果开机的时候自动点亮那么说明正确运行, 需要滑动两次才能关闭, (因为第一次还是重新点亮设备)
开机偶尔无法正常启动, 但是重启服务可以正常启动的解决方法
很简单, 就是修改启动延迟, 等待i2c设备启动完成, 修改PY文件
tries=5
+ sleep(5)
# Look into the devices file #
while tries > 0:
+ sleep(8)
keyboard_detected = 0
touchpad_detected = 0
如果不想重启服务等5秒,可以写2个py文件,一个是启动时运行,另一个是启动后运行,注册两个服务,一个是开机运行, 一个是平时备用, 可以参阅我的dotfile文件 中的asus* 和 REC.sh
开启红外人脸识别与需要PAM认证的人脸识别登陆
使用的项目是howdy, 这个项目使用了OpenCV实现功能
- 安装相关文件
yay -S howdy python-opencv v4l-utils cheese fswebcam
chmod -R 755 /lib/security/howdy
- 在Howdy - ArchWiki中是这么说的:你想用 howdy 通过 pam 来认证啥就在哪一个配置文件里的首行加入这行配置。
auth sufficient pam_python.so /lib/security/howdy/pam.py
如果想在使用sudo的时候人脸认证登录那么应该修改文件/etc/pam.d/sudo
如果是在登陆的时候那么修改/etc/pam.d/system-local-login
如果使用了SDDM那么还要修改/etc/pam.d/sddm
如果使用了i3-lock, 还要修改/etc/pam.d/i3lock
- 寻找你的设备
ls -al /dev/video*
查看所有的摄像头, 打开VLC, 选择媒体列表左侧的设备-> 视频捕获, 可以看到多个设备, 分别点开, 确认有..IR 的红外设备, 随便双击一个, 选择菜单来中的, 媒体, 打开捕获设备, 高级选项, 替换视频捕获设备中的/dev/videoX 直到找到你的红外摄像头的设备 - 编辑文件
/lib/security/howdy/config.ini , 中的devide_path = none 为你的红外设备(例如devide_path = /etc/video2 ) - 退出, 使用
sudo howdy -U kearney add 添加人脸 - 使用
sudo howdy test 测试是否能检测到人脸 - 重启
p.s.
- 如果出现 3 个 WARN 是正常的,是 GStreamer 的 warning 597、1034、2056,至于为什么可以看Howdy - ArchWiki中的 Troubleshooting
- 根据 Howdy - LinuxReviews 中的描述,KDE 在登陆时并不会自动调用人脸识别登陆,需要点击一下登陆按钮才会启动 howdy(不需要输入密码哈)
- 我最开始使用正常的摄像头录入人脸, 但是登陆校验一直失败, 更换为红外设备才解决, 如果你的电脑没有红外或者红外摄像头无法识别你, 可以将配置文件修改设备为你的正常摄像头
还有不清楚可以参考ArchWiki-Howdy
相关链接
|