> For the complete documentation index, see [llms.txt](https://man.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://man.bsdcn.org/man8/moused.8.md).

# moused(8)

`moused` — 将鼠标数据传递给控制台驱动

## 名称

`moused`

## 概要

`moused [-dfg] [-I file] [-F rate] [-r resolution] [-VH [-U distance -L distance]] [-A exp[,offset]] [-a X[,Y]] [-C threshold] [-m N=M] [-w N] [-z target] [-t interfacetype] [-l level] [-3 [-E timeout]] [-T distance[,time[,after]]] -p port`

`moused [-d] -p port -i info`

## 描述

`moused` 工具与控制台驱动协同工作，以支持文本控制台和用户程序中的鼠标操作。它们将鼠标虚拟化，并以标准格式向用户程序提供鼠标数据（参见 [sysmouse(4)](/man4/sysmouse.4.md)）。

鼠标守护进程监听指定端口上的鼠标数据，解释后通过 ioctl 传递给控制台驱动。支持的数据接口为"input event device"（又称 evdev）和 [sysmouse(4)](/man4/sysmouse.4.md) level 1。鼠标守护进程报告平移移动、按钮按下/释放事件，以及滚轮或滚轮的移动（如果可用）。滚轮/滚轮的移动以"Z"轴移动的形式报告。

如果通过 vidcontrol(1) 在虚拟控制台中启用了鼠标指针，控制台驱动将在屏幕上显示鼠标指针并提供剪切和粘贴功能。如果用户程序打开了 [sysmouse(4)](/man4/sysmouse.4.md)，控制台驱动还会将鼠标数据传递给该设备，以便用户程序能够看到。

如果鼠标守护进程收到 `SIGHUP` 信号，它将重新打开鼠标端口并重新初始化自身。当系统挂起时鼠标被插入/拔出时，这很有用。

如果鼠标守护进程收到 `SIGUSR1` 信号，它将停止传递鼠标事件。再次发送 `SIGUSR1` 信号将恢复传递鼠标事件。当你在笔记本电脑上打字时因意外触碰触摸板而被打断时，这很有用。

以下选项可用：

**`-3`** 为双键鼠标模拟第三个（中）按键。通过同时按下左右物理按键来模拟。

**`-C`** `threshold` 将双击速度设为按钮点击之间的最大间隔（毫秒）。不使用此选项时，默认值为 500 毫秒。此选项仅对文本模式控制台中的剪切和粘贴操作有效。通过 [sysmouse(4)](/man4/sysmouse.4.md) 读取鼠标数据的用户程序不受影响。

**`-E`** `timeout` 当启用第三按键模拟（见上文）时，`moused` 工具最多等待 `timeout` 毫秒来决定是否同时按下了两个按键。默认超时为 100 毫秒。

**`-F`** `rate` 仅适用于 [sysmouse(4)](/man4/sysmouse.4.md) 接口。如果设备支持，设置设备的报告率（报告/秒）。

**`-L`** `distance` 当启用"虚拟滚动"时，`-L` 选项可用于设置鼠标必须移动的 `distance`（以像素为单位）才能生成滚动事件。这实际上控制了滚动速度。默认 `distance` 为 2 像素。

**`-H`** 启用"水平虚拟滚动"。设置此选项后，按住中键将使移动被解释为水平滚动。使用 `-U` 选项设置鼠标必须移动多少距离才能激活滚动模式，使用 `-L` 选项设置滚动速度。此选项可与 `-V` 选项一起使用，也可单独使用。

**`-I`** `file` 将 `moused` 工具的进程 ID 写入指定文件。不使用此选项时，进程 ID 将存储在 **/var/run/moused.pid**。

**`-T`** `distance`\[,`time`\[,`after`]] 终止漂移。如果鼠标未移动时鼠标指针缓慢漂移，请使用此选项。在 `time` 毫秒（默认 500）内最多 `distance`（例如 4）像素（X+Y）的移动将被忽略，但自上次真实鼠标移动后的 `after` 毫秒（默认 4000）内除外。

**`-V`** 启用"虚拟滚动"。设置此选项后，按住中键将使移动被解释为滚动。使用 `-U` 选项设置鼠标必须移动多少距离才能激活滚动模式，使用 `-L` 选项设置滚动速度。

**`-U`** `distance` 当启用"虚拟滚动"时，`-U` 选项可用于设置鼠标必须移动的 `distance`（以像素为单位）才能激活滚动模式。默认 `distance` 为 3 像素。

**`-A`** `exp`\[,`offset`] 对鼠标移动应用指数（动态）加速：鼠标移动得越快，加速越多。这意味着小幅鼠标移动不会被加速，因此仍然非常精确，而较快的移动会快速驱动指针穿过屏幕。`exp` 值指定指数，基本上就是加速量。有用的值在 1.1 到 2.0 范围内，但这取决于你的鼠标硬件和个人偏好。值为 1.0 表示无指数加速。值为 2.0 表示平方加速（即，如果鼠标移动速度加倍，指针在屏幕上的移动速度将增加四倍）。超过 2.0 的值是可能的，但不推荐。起始值大概 1.5 比较好。

可选的 `offset` 值指定加速开始的距离。默认为 1.0，意味着加速应用于大于一个单位的移动。如果指定更大的值，则需要更高的速度才能触发加速，即小幅精确移动的速度范围更宽。通常默认值就足够了，但如果你对行为不满意，请尝试值 2.0。

请注意，`-A` 选项与 X 服务器自身的加速交互不佳，后者本身就不太好。因此，如有必要建议关闭它："xset m 1"。

**`-a`** `X`\[,`Y`] 加速或减速鼠标输入。这仅是线性加速。小于 1.0 的值减慢移动，大于 1.0 的值加快移动。仅指定一个值时，为两个轴设置相同的加速。你可以同时使用 `-a` 和 `-A` 选项以获得线性和指数加速的组合效果。

**`-d`** 启用调试消息。

**`-f`** 不成为守护进程，而是作为前台进程运行。用于测试和调试。

**`-g`** 仅适用于 evdev 接口。成为所有传入输入事件的唯一接收者。这防止其他进程获取该设备上的输入事件。

**`-i`** `info` 打印指定信息并退出。可用信息项有：

* **`port`** 端口（设备文件）名称，即 **/dev/input/event0**、**/dev/ums0** 和 **/dev/psm0**。
* **`if`** 接口类型："evdev"或"sysmouse"。
* **`type`** 设备类型："mouse"或"touchpad"。
* **`model`** 鼠标型号。
* **`all`** 以上所有项。按 port、type 和 model 的顺序在一行中打印。

如果 `moused` 工具无法确定所请求的信息，它会打印"`unknown`"或"`generic`"。

**`-l`** `level` 被忽略。用于与旧版 `moused` 兼容。

**`-m`** `N=M` 将物理按键 `M` 分配给逻辑按键 `N`。你可以按需指定此选项的多个实例。多个物理按键可以同时分配给一个逻辑按键。在这种情况下，只要任一被分配的物理按键被按下，逻辑按键即为按下状态。不要在 `=` 周围加空格。

**`-p`** `port` 使用 `port` 与鼠标通信。

**`-r`** `resolution` 仅适用于 [sysmouse(4)](/man4/sysmouse.4.md) 接口。设置设备的分辨率；以每英寸点数（DPI）为单位，或为 `low`、`medium-low`、`medium-high` 或 `high`。并非所有设备都支持此选项。

**`-t`** `type` 强制指定连接到端口的鼠标的接口类型。你可以显式指定下面列出的类型，或使用 `auto` 让 `moused` 工具为给定字符设备自动选择适当的协议。如果在命令行中完全省略此选项，则假定 `-t` `auto`。此选项的有效类型如下所列。请注意，此选项限制给定端口的使用方式，而不是给出提示。有效类型有：

* **`evdev`** 通常驻留在 **/dev/input** 中的输入事件设备。
* **`sysmouse`** 由例如 [ums(4)](/man4/ums.4.md) 和 [psm(4)](/man4/psm.4.md) 驱动使用的传统协议。

**`-q`** `config` 配置文件路径。

**`-Q`** `quirks` quirks 目录路径。

**`-w`** `N` 使物理按键 `N` 充当滚轮模式按键。按下此按键时，X 和 Y 轴移动报告为零，Y 轴移动映射到 Z 轴。你可以通过下文的 `-z` 选项进一步将 Z 轴移动映射到虚拟按键。

**`-z`** `target` 将 Z 轴（滚轮/滚轮）移动映射到另一个轴或虚拟按键。有效的 `target` 可以是：

* **`x`**
* **`y`** 当检测到 Z 轴移动时，将报告 X 或 Y 轴移动。
* **`N`** 当检测到负向和正向 Z 轴移动时，分别报告虚拟按键 `N` 和 `N+1` 的按下事件。不需要实际存在物理按键 `N` 和 `N+1`。请注意，从 Z 轴移动到虚拟按键的映射完成后，再进行到逻辑按键的映射。
* **`N1 N2`** 当检测到负向和正向 Z 轴移动时，分别报告虚拟按键 `N1` 和 `N2` 的按下事件。
* **`N1 N2 N3 N4`** 这对于带有两个滚轮的鼠标很有用，其中第二个滚轮用于生成水平滚动动作，也适用于带有可检测用户施加水平力的旋钮或摇杆的鼠标。第二个滚轮的移动将映射到按键 `N3`（负方向）和 `N4`（正方向）。如果按键 `N3` 和 `N4` 在此鼠标中实际存在，它们的动作将不会被检测到。请注意，水平移动或第二个滚轮/滚轮移动可能并不总能被检测到，因为对于其编码方式似乎没有公认的标准。还请注意，某些鼠标认为左是负水平方向；其他鼠标可能不这么认为。此外，有些鼠标的两个滚轮都垂直安装，第二个垂直滚轮的方向与第一个不匹配。

### 多鼠标

`moused` 工具可根据 `-p` 选项的值以两种不同模式运行。当以 `-p` `auto` 选项启动时，`moused` 在单个实例中处理所有识别到的指向设备。通过 devd(8) 支持设备热插拔。此模式下仅 evdev 接口可用。当以 `-p` `<selected_port>` 选项启动时，`moused` 处理位于 `<selected_port>` 的单个设备。此模式下 evdev 和 [sysmouse(4)](/man4/sysmouse.4.md) level 1 接口均可用。多个 `moused` 实例可同时运行。

## 文件

* **/dev/consolectl** 控制控制台的设备
* **/dev/input/event%d** 输入事件设备
* **/dev/psm%d** PS/2 鼠标驱动
* **/dev/sysmouse** 虚拟化鼠标驱动
* **/dev/ums%d** USB 鼠标驱动
* **/var/run/moused.pid** 当前运行的 `moused` 工具的进程 ID

## 实例

```sh
moused -p auto
vidcontrol -m on
```

启动 `moused` 工具以自动处理所有 evdev 指向设备并支持热插拔。然后启用文本控制台中的鼠标指针。守护进程也可以不带 `-p` 选项启动。

```sh
moused -f -d -g -p /dev/input/event0
```

以独占前台调试模式在 **/dev/input/event0** 上启动鼠标守护进程。独占模式可能在 Xorg 会话中禁用鼠标。

```sh
moused -p /dev/input/event0 -m 1=3 -m 3=1
```

将物理按键 3（右键）分配给逻辑按键 1（逻辑左键），将物理按键 1（左键）分配给逻辑按键 3（逻辑右键）。这将有效地交换左右按键。

```sh
moused -p /dev/input/event0 -z 4
```

将负 Z 轴移动（即鼠标滚轮）报告为按键 4 按下，将正 Z 轴移动（即鼠标滚轮）报告为按键 5 按下。

如果将

```sh
ALL ALL = NOPASSWD: /usr/bin/killall -USR1 moused
```

添加到你的 **/usr/local/etc/sudoers** 文件，并将

```sh
killall -USR1 moused
```

绑定到窗口管理器中的某个按键，那么当你在笔记本电脑上打字时不断蹭到触摸板，就可以挂起鼠标事件。

## 参见

moused.conf(5), [kill(1)](/man1/kill.1.md), vidcontrol(1), xset(1), [keyboard(4)](/man4/keyboard.4.md), [psm(4)](/man4/psm.4.md), [sysmouse(4)](/man4/sysmouse.4.md), [ums(4)](/man4/ums.4.md), devd(8)

## 历史

`moused` 工具首次出现于 FreeBSD 2.2。它在 FreeBSD 15.0 中被重写以支持多个输入事件设备。

## 作者

`moused` 工具最初由 Michael Smith <msmith@FreeBSD.org> 编写。本手册页由 Mike Pritchard <mpp@FreeBSD.org> 编写。命令和手册页此后由 Kazutaka Yokota <yokota@FreeBSD.org> 更新。多输入事件设备支持由 Vladimir Kondratyev <wulf@FreeBSD.org> 添加。

## 注意事项

虚拟控制台中的剪切和粘贴功能假定鼠标有三个按键。逻辑按键 1（逻辑左键）选择控制台中的文本区域并将其复制到剪切缓冲区。逻辑按键 3（逻辑右键）扩展选定区域。逻辑按键 2（逻辑中键）在文本光标位置粘贴选定的文本。如果鼠标只有两个按键，则中键（"粘贴"按钮）不可用。要获得粘贴功能，请使用 `-3` 选项模拟中键，或使用 `-m` 选项将物理右键分配给逻辑中键："`-m` `2=3`"。
