我有一个脚本可以禁用我的 thinkpad 上的触摸板:
#!/usr/bin/env bash
xinput --disable 12
我如何调整脚本,以便它不只是禁用,而是检查触摸板的当前状态并切换启用/禁用?
答案1
奇怪的是xinput
不能过滤它的输出本身。但我们有grep
!
xinput --list-props 12 | grep -q 'Device Enabled.*1$' && echo enabled || echo disabled
答案2
到切换对于触摸板,您可以从以下脚本运行 Perl 单行代码:
perl -e '$dev="SynPS/2 Synaptics TouchPad"; `xinput list-props $dev` =~ /^.*Device Enabled.+?(\d)$/m ; $1 ? `xinput --disable $dev` : `xinput --enable $dev`;
简短的扩展:
- 反引号执行系统/linux命令
- 在匹配显示“Device Enabled”的行时,正则表达式会查找该行的最后一个数字字符(0 ... 表示关闭,1 ... 表示打开)
- 正则表达式中的 /m 表示:使用命令输出中的每一行作为单独的元素(否则正则表达式的 ^ 和 $ 将表示字符串的开头/结尾,而不是行
- 括号将匹配的数字保存到变量 $1 中
- 剩下的就是三元运算符:“if true”? "do this" : "else to this",意思是如果 $1 等于 0 或 1 -> 禁用或启用
(要在“i3”窗口管理器中使用它:您必须编写:
bindsym XF86TouchpadToggle exec --no-startup-id perl -e '{`xinput list-props 10` =~ /^.*Device Enabled.+?(\d)$/m and {$1 ? `xinput --disable 10` : `xinput --enable 10`}} '