我有一个简单的脚本来转动我的键盘,使用 xinput 编写。如何获取设备的当前状态(启用或禁用),以便在运行脚本时不必指定开/关,它只是反转状态?
(警告 - 这可能会关闭您的键盘;请小心操作)
#!/bin/bash
case "$1" in
on)
export DISPLAY=:0
xinput set-prop 14 "Device Enabled" 1
killall -q onboard
;;
off)
onboard &> /dev/null 2>&1
export DISPLAY=:0
xinput set-prop 14 "Device Enabled" 0
;;
esac
现在我运行:./my_keyboard on
如果键盘关闭。我想运行./my_keyboard
并让它改变状态。 xinput 中似乎没有任何内容文档(查询状态没有该属性)。
答案1
直接回答您的问题:您可以解析此命令的输出以获取设备的状态:
xinput list-props $DEVICE_NAME_OR_ID
我认为设备 ID 可能会有所不同,因此我建议使用名称。不过我对此不太确定。
我写了一个小脚本来切换我自己的触摸板:
#!/bin/bash
DEVICE='SynPS/2 Synaptics TouchPad'
enabled=$(xinput list-props "$DEVICE" | awk '/^\tDevice Enabled \([0-9]+\):\t[01]/ {print $NF}')
case $enabled in
0)
xinput enable "$DEVICE"
echo "$DEVICE enabled"
;;
1)
xinput disable "$DEVICE"
echo "$DEVICE disabled"
;;
*)
echo
xinput list --name-only
;;
esac
答案2
下面是切换“USB键盘”的功能
function toggle-keyboard()
{
DEVICE="USB keyboard"
DEVID=`xinput list | grep -i $DEVICE | head -1 | cut -f2 | grep -oE '[[:digit:]]+'`
STATE=`xinput list-props $DEVID | grep "Device Enabled" | cut -d$'\t' -f3 | tr -d '\n'`
[ $STATE -eq 1 ] && STATE=0 || STATE=1
xinput set-prop $DEVID "Device Enabled" $STATE
[ $# -gt 1 ] && $(echo Changing \"$DEVICE\"State to $STATE)
}; declare -fx toggle-keyboard
用法:切换键盘