使用xinput命令,可以查看和更改当前系统的输入设备状态。
xinput -list可以查看当前系统存在的输入设备和其id

$ xinput -list                                                                                                                                             
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Logitech M720 Triathlon                     id=12    [slave  pointer  (2)]
⎜   ↳ LogiOps Virtual Input                       id=16    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                  id=15    [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)]
    ↳ HID 046a:0011                               id=11    [slave  keyboard (3)]
    ↳ Chicony USB2.0 Camera: Chicony              id=13    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=14    [slave  keyboard (3)]
    ↳ Logitech M720 Triathlon                     id=17    [slave  keyboard (3)]
    ↳ LogiOps Virtual Input                       id=18    [slave  keyboard (3)]

通过设备的id,可以禁用或启用设备。例如我们更改上面名为SynPS/2 Synaptics TouchPad的设备,也就是触控板的状态,可以通过其id 15来操控。

#启用
xinput enable 15
#禁用
xinput disable 15

想要查看一个设备的状态,可通过xinput list-props <id>。比如查询上面的触控板的状态就可以这样。

$ xinput list-props 15                                                                                                                                     
Device 'SynPS/2 Synaptics TouchPad':
    Device Enabled (214):    0
    ...

实际上会输出很多状态信息,但最有用的是第一行的Device Enabled,若是为0,则代表设备被禁用,若是为1,表示设备被启用。

知道上面那些信息,就可以写一个脚本开关指定名字设备的状态。这里我用的是python,通过检测xinput的输出,找到指定名字的设备id。通过id查询其状态,若是禁用则启用,若是启用则禁用。

# -*-coding:utf-8-*-
import subprocess
import re

dev_name='设备名称'
dev_id=None
dev_status=None

output=subprocess.run('xinput -list',shell=True,stdout=subprocess.PIPE).stdout.decode().split('\n')
dev_list=output

for dev in dev_list:
    if dev_name in dev:
        dev_id=re.findall(r'id=(\d.*?)\s',dev)[0]
        #print(dev_id,type(dev_id))
        break
output=subprocess.run('xinput list-props 15 |grep "Device Enabled" ',shell=True,stdout=subprocess.PIPE).stdout.decode()
dev_status=int(re.findall(':.*(\d)',output)[0])
#print(dev_status,type(dev_status))


if dev_status==0:
    #print("开启")
    subprocess.run('xinput enable '+dev_id,shell=True)
elif dev_status==1:
    #print("关闭")
    subprocess.run('xinput disable '+dev_id,shell=True)

python 脚本.py命令添加到你的linux桌面的自定义快捷键上,就可以快速开关指定名称的输入外设。


rwxe
91 声望5 粉丝

no tengo trabajo.