Bash 如何使用i3在Arch Linux中使用按键切换命令

Bash 如何使用i3在Arch Linux中使用按键切换命令,bash,sh,key-bindings,archlinux,Bash,Sh,Key Bindings,Archlinux,我觉得我的笔记本电脑上的鼠标垫很烦人,因为我打字时经常用胳膊刷它,所以我想当我想用鼠标时,我会做一个开关来关闭它,然后再打开它。出于某种原因,synaptics没有拿起我的鼠标垫,所以我使用了xinput disable 11,11是我鼠标垫的ID。我试图在i3配置中使用bindsym使“m”切换鼠标垫。我已经制作了一个sh脚本来禁用鼠标垫,但当我再次按下“m”时,它似乎没有打开。我想我应该创建一个系统变量来确定鼠标垫是否打开,但是sh脚本似乎没有正确地看到它。这是我目前在/bin中名为“tra

我觉得我的笔记本电脑上的鼠标垫很烦人,因为我打字时经常用胳膊刷它,所以我想当我想用鼠标时,我会做一个开关来关闭它,然后再打开它。出于某种原因,synaptics没有拿起我的鼠标垫,所以我使用了
xinput disable 11
,11是我鼠标垫的ID。我试图在i3配置中使用bindsym使“m”切换鼠标垫。我已经制作了一个sh脚本来禁用鼠标垫,但当我再次按下“m”时,它似乎没有打开。我想我应该创建一个系统变量来确定鼠标垫是否打开,但是sh脚本似乎没有正确地看到它。这是我目前在/bin中名为“trackpad”的脚本:

然后在我的i3配置文件中,我有:

bindsym $mod+m exec trackpad $TRACKPAD

我不确定这是否是最好的方法,所以任何其他的建议都是很好的。否则,我如何修复此问题?我对Linux相当陌生。

xinput
提供了用于列出设备所有属性的参数
list props
。至少在我的触摸板上,执行
xinput enable
xinput disable
切换属性
设备已启用
(0/1)。灰显此属性的状态使您能够测试设备当前是否已启用

下面的代码片段可能是解决问题的一种快速而肮脏的方法:

#!/bin/bash
if xinput list-props 11 | grep -qE "Device Enabled.*1$"
then 
    xinput disable 11
else 
    xinput enable 11
fi
或者作为简单的一行:

#!/bin/bash
xinput list-props 11 | grep -qE "Device Enabled.*1$" && xinput disable 11 || xinput enable 11

正如您所见,这些脚本不需要传递参数。简单执行可切换设备状态。

是否可以使用
xinput
检查设备当前是否启用?这可能是最简单的解决方案<代码>导出仅适用于当前进程和任何子进程,它不会脱离这些边界,因此不能像这样使用它。它需要是一个用来跟踪它的
i3
变量,才能作为参数使用。我似乎找不到任何显示设备是否使用xinput启用/禁用的信息。。。在这种情况下,如何制作和使用i3变量?我不知道。我甚至不知道你能不能。我不使用
i3
。我的观点是,如果您希望这样的切换能够工作,您需要将状态保持在脚本(以及脚本环境)之外/之上。如果您可以在
i3
绑定中触发更改,您也可以这样做。每次运行都会将绑定设置为相反的参数值(或其他值)。谢谢,这非常有效!:)
#!/bin/bash
xinput list-props 11 | grep -qE "Device Enabled.*1$" && xinput disable 11 || xinput enable 11