Ubuntu Desktop禁用 开启笔记本触控板

Ubuntu Desktop禁用 开启笔记本触控板

设备 ID

输入一下命令查看设备 id

1
$ xinput list

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer             id=4 [slave pointer (2)]
⎜   ↳ E-Signal USB Gaming Mouse               id=10 [slave pointer (2)]
⎜   ↳ E-Signal USB Gaming Mouse               id=11 [slave pointer (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad             id=14 [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)]
  ↳ HP Truevision HD: HP Truevision         id=12 [slave keyboard (3)]
  ↳ AT Translated Set 2 keyboard           id=13 [slave keyboard (3)]
  ↳ HP Wireless hotkeys                     id=15 [slave keyboard (3)]
  ↳ HP WMI hotkeys                         id=16 [slave keyboard (3)]

找到 TouchPad 那一行,设备 id 为 14;

脚本

新建 touchpad 脚本;

1
$ sudo vim /{自定义路径}/touchpad.sh

touchpad1.sh

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

var=$(xinput list-props 14 | grep "Device Enabled")

if   [ ${var:((${#var}-1))} == "1" ];then
xinput set-prop 'SynPS/2 Synaptics TouchPad' 'Device Enabled' 0

elif [ ${var:((${#var}-1))} == "0" ];then
xinput set-prop 'SynPS/2 Synaptics TouchPad' 'Device Enabled' 1

fi

保存退出;
最后,通过 添加系统快捷键 或者 直接运行脚本 来开关触控板,也可以借助开源软件 touchpad-indicator 更好地实现。但是,为了个人为了保持系统简洁,首选使用脚本。

更新:2018/07/21

由于最近系统 upgrade 了,脚本不能自动获取 TouchPad 的 id,google 了一下发现有人写了一个更自动化的脚本,接近 touchpad-indicator 的功能,在这里贴上。

touchpad2.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash

# 如果检测到有外接USB键盘鼠标则禁用笔记本键盘触摸板

SLEEP_TIME=5

# 自带的键盘触摸板名字 这里要用xinput list命令查看你的电脑自带键盘触摸板的名字
KEYBOARD_IN='AT Translated Set 2 keyboard'
MOUSE_IN='ETPS/2 Elantech Touchpad'

# 外接的键盘触摸板名字,同上插拔外接键鼠,并用xinput list命令确定你的外接键鼠的名字
USB_KEYBOARD_OUT='Logitech USB Keyboard'
USB_MOUSE_OUT='USB OPTICAL MOUSE'

while true
do
   # 处理键盘的逻辑
   HAVE_USB_KEYBOARD=`xinput list | grep "$USB_KEYBOARD_OUT"`
   if [ "" != "$HAVE_USB_KEYBOARD" ]; then
       if [ `xinput list-props "$KEYBOARD_IN" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 1 ]; then
          xinput set-prop "$KEYBOARD_IN" 'Device Enabled' 0
           # echo Disable keyboard
       fi
   else
       if [ `xinput list-props "$KEYBOARD_IN" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 0 ]; then
          xinput set-prop "$KEYBOARD_IN" 'Device Enabled' 1
           # echo Enable keyboard
       fi
   fi

   # 处理键鼠标的逻辑
   HAVE_USB_MOUSE=`xinput list | grep "$USB_MOUSE_OUT"`
   if [ "" != "$HAVE_USB_MOUSE" ]; then
       if [ `xinput list-props "$MOUSE_IN" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 1 ]; then
          xinput set-prop "$MOUSE_IN" 'Device Enabled' 0
           # echo Disable Touchpad
       fi
   else
       if [ `xinput list-props "$MOUSE_IN" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 0 ]; then
          xinput set-prop "$MOUSE_IN" 'Device Enabled' 1
           # echo Enable Touchpad
       fi
   fi

   sleep $SLEEP_TIME
done

该脚本唯一的缺点就是不能自动获取外置鼠标键盘的设备名称,由于个人有两套以上的鼠标键盘,所以根据自己的使用习惯,还是选择了快捷键控制的方式。

touchpad3.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

# 笔记本自带 TouchPad 名称,可用 xinput --list 获取
TOUCHPAD_NAME='SynPS/2 Synaptics TouchPad'

# 自定义快捷键触发 TouchPad 控制逻辑
if   [ `xinput list-props "$TOUCHPAD_NAME" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 1 ];then
xinput set-prop "$TOUCHPAD_NAME" 'Device Enabled' 0
# echo Disable Touchpad

elif [ `xinput list-props "$TOUCHPAD_NAME" | grep "Device Enabled" | awk -F ':' '{print $2}'` == 0 ];then
xinput set-prop "$TOUCHPAD_NAME" 'Device Enabled' 1
# echo Enable Touchpad

fi

参考

赞赏