如何在鼠标插入时自动禁用Touch板(Fedora 13)

插入鼠标时如何自动禁用触控板(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'
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏