查看鼠标的usb设备
$ lsusb
Bus 003 Device 002: ID 8087:8000 Intel Corp.
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 17ef:6050 Lenovo
Bus 001 Device 002: ID 09da:054f A4Tech Co., Ltd.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
在/sys/bus/usb/devices/中找到对应的设备,如上面的
Bus 001 Device 003: ID 17ef:6050 Lenovo
是我的usb鼠标
总线1上,是设备3,在该文件夹中,查看目录
$ ls /sys/bus/usb/devices/
1-0:1.0 1-1:1.0 1-3 2-0:1.0 3-1 usb1 usb3
1-1 1-1:1.1 1-3:1.0 3-0:1.0 3-1:1.0 usb2
可以看到有3个usb总线,执行下面命令确认一下,是该设备
cat /sys/bus/usb/devices/usb1/1-3/idVendor
17ef
和上面的设备ID能对应上。
$ cat /sys/bus/usb/devices/usb1/1-3/power/autosuspend
2
当前状态是自动挂起,执行下面命令改为禁止自动挂起。
$ sudo echo '-1' > /sys/bus/usb/devices/usb1/1-3/power/autosuspend
以上只能临时解决问题,要永久解决问题,可以把上面一句命令加到系统启动脚本里。
以下是自己写的一段自动化脚本,加到系统启动脚本里就可以了,其中第一行的Lenovo是lsusb命令看到的鼠标的名称。
usbl=`lsusb | sed -n '/Lenovo/p'`
busid=`echo $usbl | cut -d " " -f2`
deviceid=`echo $usbl | cut -d " " -f6`
busid=`echo $busid | cut -b 3`
deviceid=`echo $deviceid | cut -d ":" -f1`
echo $deviceid
for((i=0;i<10;i++))
do
if [ -f "/sys/bus/usb/devices/$busid-$i/idVendor" ]; then
idvendor=`cat /sys/bus/usb/devices/$busid-$i/idVendor`
echo "idvendor: $idvendor"
if [ "$idvendor"="$deviceid" ];then
echo "will change it:$idvendor i is:$i"
sudo echo -1 > /sys/bus/usb/devices/$busid-$i/power/autosuspend
fi
fi
done