12.17. 指向设备 - 鼠标及其亲戚

12.17.1. Linux 兼容性检查

您可以使用 GPM 软件包中的 mev 命令检查您的鼠标。

12.17.2. 相关文档

  1. 3-Button-Mouse-HOWTO,适用于串行鼠标

  2. Kernel-HOWTO

12.17.3. 鼠标种类

  1. 触控板 (Trackpad, Touchpad),用于当前大多数笔记本电脑

  2. 轨迹球 (Trackball),例如 COMPAQ LTE

  3. 弹出式鼠标 (Pop-up-Mouse),例如 HP OmniBook 800

  4. 指点杆 (Trackpoint, Mouse-Pin),例如 IBM™ ThinkPad 和 Toshiba 笔记本电脑

  5. 三键鼠标 (3 Button Mice),例如 IBM™ Thinkpad,至少 600s 型号以及一些 COMPAQ 型号,例如 Armada M700。我听说过关于德州仪器 Travelmates 的三键鼠标的传闻,但尚未证实。

  6. 触摸屏 (Touchscreen),例如一些 Fujitsu-Siemens 笔记本电脑、平板电脑和 PDA

12.17.4. PS/2 鼠标

笔记本电脑中使用的大多数鼠标都是 PS/2 鼠标(实际上我不知道有其他鼠标协议)。您可以通过以下方式与 PS/2 鼠标通信:/dev/psaux/dev/psmouse。如果您使用 X Windows,则必须在以下位置设置此设备和协议:/etc/X11/XF86Config。在早期版本中,当同时启用 GPM 鼠标管理器和 X Windows 时,它们有时在共享鼠标方面存在问题。但据我所知,对于最新版本来说,这已不再是问题。

说到 Emulate3Buttons,100 毫秒通常比大多数默认设置中允许的 50 毫秒要好,适用于/etc/X11/XF86ConfigXFree86 3.x

Section "Pointer"
	...
	Emulate3Buttons
	Emulate3Timeout    100
	...
EndSection

或者在/etc/X11/XF86Config-4适用于 XFree86 4.x

Section "InputDevice"
	...
	Option		"Emulate3Timeout"	"100"
	Option		"Emulate3Buttons"	"true"
	...
EndSection

12.17.5. 触控板

通常,触控板与 PS/2 鼠标设备一起工作/dev/psaux和 PS/2 协议(对于 GPM 和 X11,对于 X11,似乎也值得检查 GlidePointPS/2 协议)。

Synaptics 触控板驱动程序具有以下功能(某些功能需要触控板必须具备的特性,例如多指轻击):

  1. 具有可调、非线性加速度和速度的移动(选项:MinSpeed、MaxSpeed、AccelFactor)

  2. 通过短暂触摸触控板的按钮事件(选项:MaxTapTime、MaxTapMove)

  3. 通过双击短暂触摸触控板的双按钮事件

  4. 通过短暂触摸并按住触控板上的手指进行拖动

  5. 触控板上角和下角的中间和右键按钮事件(选项:Edges)

  6. 通过在触控板右侧移动手指进行滚动(按钮四和五事件)(选项:Edges、VertScrollDelta)

  7. 向上/向下按钮发送按钮四/五事件

  8. 可调节的手指检测(选项:Finger)

  9. 外部鼠标中继器支持 - Alpha! (选项:Repeater)

  10. 多指轻击:两指代表中间按钮事件,三指代表右键按钮事件

  11. 通过共享内存进行在线配置(开发中)(选项:SHMConfig)

synclient 命令随驱动程序源代码一起提供(请注意,它未包含在 SuSE Linux 中,至少在 9.3 版本之前没有)。该命令可以动态查询和修改 Synaptics 触控板驱动程序参数。

Tip

同时用一根、两根或三根手指轻敲触控板会导致分别按下鼠标左键、中键和右键。

还有另一个触控板驱动程序可用。Synaptics 触控板 Linux 驱动程序 - tpconfig 支持 Acer、Compaq、Dell、Gateway、Olivetti、Texas Instruments、Winbook 等笔记本电脑中使用的指向设备。

戴尔和索尼已开始采用 ALPS 的触控板和指点杆。它们至少在戴尔 Latitude CPx 和索尼 VAIO 笔记本电脑系列中。维护者 Bruce Kall 写道:“tpconfig 目前不支持它们,但我正在从 ALPS 获取 API,并将其纳入下一个版本的 tpconfig 中。戴尔还在键盘中间集成了 ALPS GlideStick(类似于某些 IBM Thinkpad 中的指点杆)。我还打算支持禁用 GlideStick 的“轻击”功能。触控板/指点杆的轻击让我抓狂,我不确定你是否也这样(当您不想“选择”屏幕上的内容时,会导致误操作)!”

tpconfig 是一个命令行实用程序,用于设置 Synaptics 触控板和(现在)ALPS Glidepad/Stickpointers 的选项。大多数人主要使用它来关闭笔记本电脑触控板上的“轻击模式”。

如何使用 tpconfigtpconfig 当前作为命令行配置工具受支持。PS/2 端口目前不支持共享。因此,当加载任何其他鼠标驱动程序(例如 gpm)时,tpconfig 实用程序将无法工作。这也意味着您在 X Windows 运行时无法使用 tpconfig。建议 tpconfig 的用法是在启动 gpm 之前从启动脚本运行它。

IBM ThinkPad 滚动守护程序

并非所有触控板都来自 Synaptics,例如,一些 Gateway 电脑采用了 EZ-Pad (Registered TM),可能还有其他品牌。TPREV.EXE 实用程序将验证您是否拥有 Synaptics 触控板。

最新的 gpm 软件包(版本 >=1.8,也许早期版本也包含触控板支持)包含上述 Synaptics 触控板设备驱动程序。此设备驱动程序由 H. Davies <hdavies_AT_ameritech.net> 开发。现在,您可以使用原生触控板模式,而不是使用触控板设备的 PS/2 兼容模式,它具有一些令人印象深刻的功能。

除了将手指运动转换为鼠标运动并支持按钮外,此支持目前还具有以下几个功能(来自 README):

这些功能可以启用/禁用,并且它们中的许多功能都有时间和速度参数,可以根据用户的喜好进行调整。

似乎 gpm 最为人所知的是一个面向控制台的工具。这是事实,但您可以将其用作 X11 输入设备。gpm 用作中继器设备。通过这种方式,您可以同时使用内置的 Synaptics 触控板的所有功能和串行鼠标(带有三个按钮)。这一切都顺利地协同工作。X11 从命名管道读取鼠标事件/dev/gpmdata以它理解的协议,在我的情况下是Mouse-Systems-Compatible (5bytes)。大多数三键鼠标都使用默认协议。因此,只需在 XF86Config 中进行简单的重新配置即可,当然,前提是以适当的方式启动 gpm

可以在您的笔记本电脑上使用以下参数启动 gpm/usr/bin/gpm -t synps2 -M -t ms -m /dev/ttyS0。触控板和串行鼠标都在控制台和 X11 模式下工作。您必须创建命名管道/dev/gpmdata自己创建。

同时用两根手指轻击以模拟鼠标中键在一些机器上使用的 Logitech 触控板上有效。

感谢 Geert Van der Plas 撰写了大部分触控板章节。

12.17.6. Jog-Dial 飞梭旋钮

“Jog-Dial”是 SONY VAIO 笔记本电脑系列中使用的一种输入设备。您可以在 Takaya Kinjo 的网站上找到 Jog-Dial 驱动程序。您可能需要在spicdriver/Makefile:

中更改两件事:CCFLAG 必须扩展为 -D_LOOSE_KERNEL_NAMES

CCFLAG 必须扩展为 -I/usr/src/linux-<kernel-version>/include

README 似乎是日文的,这里是英文版本。

$ tar xvzf jogutils.tar.gz
$ cd jogutils
$ make
$ su
# mknod /dev/spic c 60 0
# modprobe spicdriver/spicdriver
# exit
$ cp jogapp/rcfile ~/.jogapprc
$ jogapp/jogapp

ISHIKAWA Mutsumi 编写了 jogdiald 驱动程序,该驱动程序完全在用户空间中运行(不需要内核模块)。

rsjogsjog 实用程序的修改版。

12.17.7. 触摸屏

据我所知,唯一包含触摸屏的现代笔记本电脑是 Fujitsu Biblo 112/142(又名 MC 30)和 Palmax PD 1000/1100(又名 IPC 1000/1100)。

最新版本的 Linux Compaq Concerto Pen Driver 可从 Joe Pfeiffer 的主页获得。

您可以在我的页面 触摸屏笔记本电脑和 Linux 上找到当前驱动程序调查。

12.17.8. 笔设备、指点杆

IBM 和 Toshiba 笔记本电脑目前配备了笔设备,而不是鼠标垫或轨迹球。

Tip

需要一些时间来习惯这种类型的指针设备。将手掌放在前部支撑处可能会有所帮助。还建议降低鼠标速度。

12.17.9. 外部鼠标

为了更好的操作,例如使用三键鼠标,您可以使用外部鼠标。这通常是串行鼠标或 PS/2 鼠标,或者在今天,是 USB 鼠标,适用于您的笔记本电脑提供的端口。通常这没有问题。目前我不知道解决方案的唯一问题是 X11 自动检测新插入的鼠标。要使其工作,您必须重新启动 X 服务器。

12.17.9.1. PS/2 鼠标

对于 PS/2 端口,有所谓的 Y 型电缆可用,如果您的笔记本电脑支持此功能,则可以使用外部鼠标和外部键盘。

Warning

请勿在开机状态下插入外部鼠标。如果您有单独的鼠标和键盘端口,请确保将鼠标插入鼠标端口,将键盘插入键盘端口。如果您不这样做,您可能需要硬重启笔记本电脑才能使其恢复。

12.17.9.2. 滚轮鼠标

Imwheel 使您的 Intellimouse(和其他滚轮和指点杆鼠标)在 Linux/X11 中工作,以向上和向下滚动窗口,或向程序发送按键。它在后台作为守护程序运行,并且只需要对 XWindows 设置进行少量重新配置。也可以使用 4 个或更多按钮的鼠标和 Alps Glidepad “轻击”。imwheel 包括一个修改后的 gpm,用于滚轮输入的替代方法。

另请参阅 WHEEL Mouse FAQ,其中描述了如何使许多 X 应用程序识别滚动操作。有关 XFree86 4.x 的当前说明,请参阅 XFree86 4.x - 鼠标文档

12.17.9.3. USB 鼠标

此部分摘自 Brad Hards 的 Linux USB 子系统。

12.17.9.3.1. USB 人体学接口设备 (HID) 配置

12.17.9.3.1.1. 通用 HID 配置

使用 USB 鼠标或 USB 键盘有两种选择 - 独立的 Boot Protocol 方式和功能齐全的 HID 驱动程序方式。Boot Protocol 方式通常较差,本文档描述了功能齐全的方式。Boot Protocol 方式可能适用于嵌入式系统和其他资源受限且不需要完整键盘和鼠标功能的系统。

重要的是要记住,HID 驱动程序处理那些声明符合人体学接口设备 (HID) 规范的设备(或实际上是每个设备上的那些接口)。但是,HID 规范没有说明 HID 驱动程序应该如何处理从 HID 设备接收的信息,或者发送到设备的信息来自何处,因为这显然取决于设备应该做什么以及操作系统是什么。Linux(在操作系统内核级别)支持 HID 设备的四个接口 - 键盘、鼠标、操纵杆和通用接口,称为事件接口。

12.17.9.3.1.2. HID 鼠标配置

在内核配置阶段,您需要启用 USB 人体学接口设备 (HID) 支持和鼠标支持。不要启用 USB HIDBP 鼠标支持。执行正常的内核重建和安装步骤。如果您作为模块安装,则需要加载input.o, hid.omousedev.o模块。

插入 USB 鼠标并检查内核是否已正确感应到您的鼠标。如果您没有内核消息,请查找对/proc/bus/usb/devices.

的更改。由于 USB 支持多个相同的设备,因此您可以插入多个鼠标。您可以分别获得每个鼠标,也可以将它们混合在一起。您几乎总是想要混合版本,这就是将一起使用的版本。您需要为混合鼠标设置设备节点条目。习惯上在 /dev/input/ 目录中为此设备创建条目。

使用以下命令

mkdir /dev/input
mknod /dev/input/mice c 13 63

Tip

如果您不确定是否正在配置正确的鼠标设备,请使用 cat /dev/input/mice(或其他适当的设备名称)。如果您为正确的鼠标执行此操作,则当您移动鼠标或单击任何按钮时,您应该会看到一些奇怪的字符。

如果您想在 X 下使用鼠标,您有多种选择。您选择哪一个取决于您正在使用的 XFree86 版本,以及您是否仅将 USB 用于鼠标(或多个鼠标),或者您是否想使用 USB 鼠标和某些其他类型的指针设备。

您需要编辑XF86Config文件(通常是/usr/X11R6/lib/X11/XF86Config/etc/X11/XF86Config).

如果您使用的是 XFree86 4.0 或更高版本,请添加一个 InputDevice 部分,如下所示

Section "InputDevice"
     Identifier  "USB Mice"
     Driver      "mouse"
     Option      "Protocol"   "IMPS/2"
     Option      "Device"     "/dev/input/mice"
EndSection
或者,如果您想使用滚轮鼠标,类似这样的内容可能更有用
Section "InputDevice"
     Identifier  "USB Mice"
     Driver      "mouse"
     Option      "Protocol"   "IMPS/2"
     Option      "Device"     "/dev/input/mice"
     Option      "ZAxisMapping"   "4 5"
     Option      "Buttons"        "5"
EndSection

有关详细说明和更多示例,请查阅 当前的 XFree86 文档

您还需要向每个适用的 ServerLayout 部分添加一个条目。这些通常位于配置文件的末尾。如果您只有 USB 鼠标(或多个 USB 鼠标),则将带有“CorePointer”条目的行替换为以下行

InputDevice "USB Mice" "CorePointer"

如果您想同时使用 USB 鼠标(或多个 USB 鼠标)和某些其他类型的指针设备,则将以下行添加到(不要替换)适用的 ServerLayout 部分

InputDevice "USB Mice" "SendCoreEvents"

如果您仅将 USB 鼠标(或多个 USB 鼠标)与 XFree86 3.3 一起使用,请编辑 Pointer 部分,使其看起来像这样

Section "Pointer"
    Protocol    "IMPS/2"
    Device      "/dev/input/mice"
EndSection

如果您尝试将 USB 鼠标(或多个 USB 鼠标)添加到 XFree86 3.3 的另一种指针类型设备中,则需要使用 XInput 扩展。保留现有的 Pointer(或根据需要修改它以适应其他设备,如果您正在进行初始安装),并添加以下条目(任何合理的位置,最好是在 Input devices 区域中)

Section "Xinput"
   SubSection "Mouse"
  DeviceName   "USB Mice"
  Protocol     "IMPS/2"
  Port         "/dev/input/mice"
  AlwaysCore
   EndSubSection
EndSection

重新启动 X 服务器。如果您此时没有任何鼠标支持,请记住 Ctrl-Alt-F1 将为您提供一个虚拟终端,您可以使用该终端杀死 X 服务器并从错误消息开始调试。

如果您想在 gpm 下使用鼠标,请使用以下选项运行(或杀死并重新启动,如果它已经在运行)gpm。gpm -m /dev/input/mice -t imps2(作为超级用户)。如果您编辑初始化文件,则可以将其设置为默认值。这些文件通常命名为类似 rc.d 的名称,并且位于/etc/rc.d/在 RedHat 发行版上。

如果您同时拥有 USB 鼠标(或多个 USB 鼠标)和某些其他类型的指针设备,您可能希望在 repeater 模式下使用 gpm。如果您在 /dev/psaux 上有一个 PS/2 鼠标,在 /dev/input/mice 上有一个 USB 鼠标(或多个 USB 鼠标),则以下 gpm 命令可能是合适的:gpm -m /dev/input/mice -t imps2 -M -m /dev/psaux -t ps2 -R imps2。请注意,这将使输出显示在/dev/gpmdata,这是一个 FIFO,不需要预先创建。您可以将其用作非 X 程序的鼠标“设备”,并且两个鼠标将协同工作。

表 12-1. gpm-t-R 选项的参数。

选项描述
msMicroSoft 兼容串行鼠标
ps2PS/2 或 C&T 82C710
bmLogitech 总线鼠标
bmATI XL 总线鼠标
mbMicroSoft 总线鼠标
mscMouse Systems 串行鼠标
logi较旧的鼠标
mmanMouse Man 协议,串行 Logitech 鼠标
sunSUN 鼠标,三键
ms3带滚轮的 Intellimouse,在串行端口
imps2带滚轮的 Intellimouse,在 PS/2 端口
pnpPnP 鼠标,ms 的替代方案
mmMM 系列
bare最旧的串行两键鼠标

12.17.9.4. 手腕输入设备 - Twiddler

gpm 包含串行端口上 Twiddler 设备的驱动程序。有关 Twiddler 的信息,请参阅 Handykey Corporation

12.17.10. Macintosh PowerBook

PowerBook 有一个触控板,只有一个按钮,尽管您可以插入外部多按钮 USB 鼠标。通常的做法是将键盘上的几个键映射到鼠标中键和右键;您的 Linux 发行版应附带有关如何配置此功能的说明(它并非特定于笔记本电脑,因为所有 Apple 鼠标都是单按钮的)。

如果您使用的是 Xpmac 服务器,则默认值为 option-1 和 option-2,您可以通过将 -middlekey <keycode> -rightkey <keycode> 参数传递给 Xpmac 来更改此设置,如果您不希望需要 option 键,则传递 -nooptionmouse 参数。

如果您使用的是 XFree86,则传递 adb_buttons=<middlekey>,<rightkey> 内核参数(不需要 option)。我使用 adb_buttons=58,55 来映射 option 和 Apple/command 键(在 Linux 中很少使用);使用例如 xev 来找出给定键的键码。