> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/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)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man4/sysmouse.4.md)）。

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

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

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

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

以下选项可用：

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

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

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

**`-F`** `rate` 仅适用于 [sysmouse(4)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/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)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man4/sysmouse.4.md) 接口。设置设备的分辨率；以每英寸点数（DPI）为单位，或为 `low`、`medium-low`、`medium-high` 或 `high`。并非所有设备都支持此选项。

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

* **`evdev`** 通常驻留在 **/dev/input** 中的输入事件设备。
* **`sysmouse`** 由例如 [ums(4)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man4/ums.4.md) 和 [psm(4)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/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)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/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)](/man/man1/kill.1.md), vidcontrol(1), xset(1), [keyboard(4)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man4/keyboard.4.md), [psm(4)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man4/psm.4.md), [sysmouse(4)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man4/sysmouse.4.md), [ums(4)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/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`"。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man8/moused.8.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
