插入鼠标时如何自动禁用触控板(Fedora 13)
大家好,希望这个简短的方法可以帮助别人,这个问题已经让我多年了。 我想要在最新版本的Windows中存在的Fedora中具有相同的功能 - 如果插入外部鼠标,则禁用笔记本电脑上的Touch板。请注意,我的操作方法是关于实际禁用Touch板的一点硬件; 在本指南的最后,我将再讨论一下。
所以,这里:
对于我的操作系统(Fedora 13 x86_64)和硬件(Dell Precision M4500) - 我需要一个特定的实用程序和三个脚本。 戴尔的触控板和接头棒被Fedora视为“内部”PS / 2鼠标,所以我不得不安装“xinput”来禁用它(并使用非常神秘的小命令行)。
# yum -y install xorg-x11-apps
启用/禁用命令对于不同的硬件可能是不同的...我不得不使用一些xinput命令来找出我需要的值:
$ xinput list
? Virtual core pointer id=2 [master pointer (3)]
? ? Virtual core XTEST pointer id=4 [slave pointer (2)]
? ? USB Optical Mouse id=10 [slave pointer (2)]
? ? PS/2 Generic Mouse id=13 [slave pointer (2)]
$ xinput list-props "PS/2 Generic Mouse"
Device 'PS/2 Generic Mouse':
Device Enabled (119): 1
...
这告诉我,我可以使用以下内容:
禁用Touch板:
xinput --set-prop "PS/2 Generic Mouse" "Device Enabled" 0
启用Touch板:
xinput --set-prop "PS/2 Generic Mouse" "Device Enabled" 1
Google了解有关使用xinput的更多信息。
然后,3个脚本:
- 将以下内容添加为/etc/udev/rules.d/61-touchpad.rules
:
# 61-touchpad.rules # # this rules file must be named 61* or later because it won't work # unless it runs after '/lib/udev/rules.d/60-persistent-input.rules' # # NOTE: will only affect DISPLAY :0 # # run: # udevadm test --action=add /sys/devices/platform/i8042/serio1/input/input6/mouse1 # or similar to test the following rules # # disable PS/2 touchpad on DISPLAY :0 if a mouse is added to the system ACTION=="add", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", RUN+="/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 0'"
# enable PS/2 touchpad on DISPLAY :0 if a mouse is removed from the system ACTION=="remove", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", RUN+="/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 1'"
- 更新/ etc / gdm / Init / Default
。
- 在文件末尾的'exit 0'之前添加以下内容:
# disable touchpad if more than one mouse is available if [ `ls -d /sys/class/input/mouse* | wc -l` -gt 1 ]; then /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 0
fi
- 将以下内容添加为/etc/pm/sleep.d/99touchpad
:
#!/bin/sh # # disable touchpad if more than one mouse is available # # NOTE: will only affect DISPLAY :0 # disable_touchpad() { /bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 0'
} case "$1" in thaw|resume) if [ `ls -d /sys/class/input/mouse* | wc -l` -gt 1 ]; then disable_touchpad fi ;; *) exit $NA ;; esac
udev规则注意,当鼠标热插拔时,并根据需要启用或禁用Touch板。 gdm脚本是必要的,以处理系统使用鼠标插入引导的情况(因此不会发生热插拔事件)。 我以为是这样,但在暂停和恢复之后,我发现Touch板再次活跃。 所以,更多的谷歌搜索,我添加了/etc/pm/sleep.d
脚本来处理事情的简历。
实际的禁用实用程序将针对不同类型的硬件; 突触Touch板将使用'syndaemon'实用程序,我相信。 这个过程有很多细微之处 - udev规则文件和sleep.d脚本的命名很重要(规则必须在其他鼠标设置规则运行后运行),DISPLAY变量必须设置为禁用命令(因为执行脚本的守护进程不在X服务器中运行),并且确定是否有多个鼠标可能不如我想要的那么强大。 但是,它正在为我工作。 此外,Fedora的不同版本可能需要不同的udev规则,或脚本放置的不同目录,或文件名中的不同数字...这不是很漂亮,它应该真正由与发行版捆绑的实用程序来处理。
最后,请注意,我假设DISPLAY:0是感兴趣的DISPLAY,如果插入两只以上的老鼠,udev规则将无法正常工作(...)...如果有人感兴趣,他们可能会能够使这个更健壮...去吧!
所以,这不是最完整的,但是我想把它拿出来。 如果存在更好的操作方法,或者更好的程序可用,我很抱歉。 如果你知道更好的东西,请跟进。
附录:
FYI - udev的东西不容易弄清楚。 这里有一些命令我跑的时候我试图得到这个排序:
- 获取Touch板的udev环境信息:
udevadm info --query=all --name=/dev/input/mouse1
- 测试具体的udev规则:
# udevadm test --action=add /sys/devices/platform/i8042/serio1/input/input6/mouse1 2>&1 | grep "run:"
udevadm_test: run: '/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 0''
udevadm_test: run: 'socket:@/org/freedesktop/hal/udev_event'
# udevadm test --action=remove /sys/devices/platform/i8042/serio1/input/input6/mouse1 2>&1 | grep "run:"
udevadm_test: run: '/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 1''
udevadm_test: run: 'socket:@/org/freedesktop/hal/udev_event'