我意识到我有点晚参加这个派对(并且我的回答也不仅仅适用于Ubuntu MATE),但是还是让我来说一下...
我有和你非常类似的需求,但是我在Debian 9(Stretch)上运行xfce,所以没有安装gnome/gsettings。为了在插入/拔出USB鼠标时禁用/重新启用Synaptics触摸板,我使用udev规则来触发一个(posix)Shell脚本,该脚本解绑/重新绑定Synaptics触摸板驱动器:
作为root用户,创建/usr/local/sbin/touchpadctl.sh文件,并将以下内容添加进去:
#!/bin/sh
set -o errexit #(等同于-e)
set -o nounset #(等同于-u)
usage(){
echo "用法: ${0} {-enable|-e|-disable|-d}"
}
if [ $# -ne 1 ]; then
usage
exit 1
fi
base_dir=/sys/bus/serio/drivers/psmouse
device_id=serio1
if [ ${1} = "-disable" -o ${1} = "-d" ]; then
logger "${0}正在禁用触摸板"
echo -n manual > $base_dir/bind_mode
echo -n $device_id > $base_dir/unbind 2>/dev/null || true
elif [ ${1} = "-enable" -o ${1} = "-e" ]; then
logger "${0}正在启用触摸板"
echo -n auto > $base_dir/bind_mode
else
usage
exit 1
fi
使您的触摸板控制脚本可执行:
sudo chmod +x /usr/local/sbin/touchpadctl.sh
现在测试一下您的脚本。要禁用触摸板:
sudo /usr/local/sbin/touchpadctl.sh -d
要启用触摸板:
sudo /usr/local/sbin/touchpadctl.sh -e
由于使用了“驱动解除绑定”,这完全不依赖于X/xorg/wayland/gnome。因此,您可以在启动过程中正确使用它的udev规则。
以root身份创建/etc/udev/rules.d/01-touchpad.rules文件,内容如下:
KERNEL=="mouse*", ATTRS{phys}=="usb*", ACTION=="add", \
RUN+="/usr/local/sbin/touchpadctl.sh -disable"
KERNEL=="mouse*", ATTRS{phys}=="usb*", ACTION=="remove", \
RUN+="/usr/local/sbin/touchpadctl.sh -enable"
与所有Linux相关的事物一样,你可能需要进行一些调整,但我已经尽力使其易于理解。关于驱动程序绑定/解绑的更多信息,请阅读
Greg Kroah-Hartman在Linux Weekly News上发表的2005年文章,还有一些很好的信息可以在
内核源代码中找到。关于编写udev规则的更多信息,请参考
Daniel Drake的优秀教程。