本脚本背景交代: 有些时候,想要在桌前看实体书,嫌屏幕开着碍事,用xset关闭屏幕后,书一翻页就有可能触发鼠标移动,导致屏幕自动点亮。为了开开心心的看书而不被鼠标移动自动点亮显示器影响,故此有了该脚本。
这次主要用到了python3和shell。说来惭愧,本来应该全部用shell写的,但是我太菜了,不会用awk,故此改用python3的re模块代替awk来进行解析。
在开始用禁用鼠标脚本前,必须要先使用xinput –list看看自己想要禁用哪个设备:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| > xinput --list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ SONiX USB DEVICE Keyboard id=13 [slave pointer (2)] ⎜ ↳ HOLTEK USB Gaming Mouse Keyboard id=15 [slave pointer (2)] ⎜ ↳ AlpsPS/2 ALPS GlidePoint id=17 [slave pointer (2)] ⎜ ↳ HOLTEK USB Gaming Mouse id=14 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Video Bus id=8 [slave keyboard (3)] ↳ Power Button id=9 [slave keyboard (3)] ↳ Sleep Button id=10 [slave keyboard (3)] ↳ USB HD WEBCAM: USB HD WEBCAM id=11 [slave keyboard (3)] ↳ SONiX USB DEVICE id=12 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=16 [slave keyboard (3)] ↳ SONiX USB DEVICE Keyboard id=18 [slave keyboard (3)] ↳ HOLTEK USB Gaming Mouse Keyboard id=19 [slave keyboard (3)]
|
这个id号就是设备的id号,我们后面要通过这个id来确定要对哪个设备进行操作。在这里,我的鼠标的id号是14,即”HOLTEK USB Gaming Mouse”,把它记下来,待会儿写脚本的时候会用到。
关于为什么不记id而是记设备名的原因: 因为把设备换插USB口会导致id号变化(有时候插入新设备也会导致已插入设备的id号变化),所以我们要记设备名字。
那么既然我们已经知道了设备名字,那么接下来要通过名字匹配到对应的id号来禁用设备:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import re import sys import os
for line in sys.stdin: mouse_id = None rst = re.search("HOLTEK USB Gaming Mouse\s+id=(\d+)", line, re.S) if rst: mouse_id = rst.groups()[0] exec_str = "xinput -set-prop " + mouse_id + ' "Device Enabled" 0' os.system(exec_str) break
|
那么接下来我们可以通过sh脚本来把xinput的信息传入到py脚本里:
1 2 3
| # lock_mouse.sh # 路径是python文件的路径 xinput --list | python3 /home/fire/toolSet/mySh/mouseSh/lock.py
|
然后当我们想禁用鼠标的时候,直接执行这个脚本就好了。
当然,有禁用鼠标的脚本当然还得有解禁用的脚本,不然就麻烦了,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import re import sys import os
for line in sys.stdin: mouse_id = None rst = re.search("HOLTEK USB Gaming Mouse\s+id=(\d+)", line, re.S) if rst: mouse_id = rst.groups()[0] exec_str = "xinput -set-prop " + mouse_id + ' "Device Enabled" 1' os.system(exec_str) break
|
sh脚本代码如下:
1 2
| # unlock_mouse.sh xinput --list | python3 /home/fire/toolSet/mySh/mouseSh/unlock.py
|
本篇完。