[返回首页](../README.md) # 在 Linux 上部署 ser2net RFC 2217 串口服务器 本页说明如何在 Linux 上安装和配置 ser2net 4.x,以 RFC 2217 模式提供一个或四个串口。RFC 2217 客户端可以远程修改波特率、数据位、校验位、停止位和控制线。 ## 安装 ser2net Debian 或 Ubuntu: ```bash sudo apt update sudo apt install ser2net ``` 其他常见发行版: ```bash # Fedora sudo dnf install ser2net # Arch Linux sudo pacman -S ser2net ``` 确认已安装 ser2net 4.x: ```bash ser2net -v ``` 本文使用 ser2net 4.x 支持的现代 YAML 配置格式。 ## 确认配置文件路径 当前 Debian 和 Ubuntu 软件包通常使用: ```text /etc/ser2net.yaml ``` 并通过 `/etc/default/ser2net` 中的 `CONFFILE` 选择该文件。上游构建版本和部分其他发行版则默认使用: ```text /etc/ser2net/ser2net.yaml ``` 编辑前先检查已安装的 systemd 服务: ```bash systemctl cat ser2net sudo grep -E '^[[:space:]]*CONFFILE=' /etc/default/ser2net 2>/dev/null || true ``` 以下示例使用 Debian/Ubuntu 常见的 `/etc/ser2net.yaml`。如果服务指向其他路径,应编辑它实际加载的文件,不要另建一个不会被使用的配置文件。 ## 配置 RFC 2217 编辑软件包服务选择的配置文件: ```bash sudoedit /etc/ser2net.yaml ``` ### 单端口配置 将串口设备路径替换为已确认的稳定路径: ```yaml %YAML 1.1 --- connections: rs485-1: accepter: telnet(rfc2217),tcp,127.0.0.1,2217 connector: serialdev,/dev/serial/by-id/REPLACE_WITH_YOUR_DEVICE,115200n81,local ``` 配置要点: - `telnet(rfc2217)` 显式启用 RFC 2217 协商及远程串口参数控制; - `tcp,127.0.0.1,2217` 仅监听回环地址,同机进程可以连接,但不会在 Linux 主机的 LAN 接口上单独暴露服务; - `115200n81` 是初始/默认参数:115200 baud、无校验、8 个数据位、1 个停止位; - RFC 2217 客户端连接后可以修改波特率及其他受支持的串口参数; - `local` 忽略调制解调器载波检测,通常适用于 USB 转 RS-485 转换器。 无需添加额外选项来允许修改波特率;关键是使用 `telnet(rfc2217)` accepter。 ### 四端口 FT4232H 或 CH344Q 配置 每个串口通道必须使用独立的本地 TCP 端口: ```yaml %YAML 1.1 --- connections: rs485-1: accepter: telnet(rfc2217),tcp,127.0.0.1,2217 connector: serialdev,/dev/serial/by-id/REPLACE_PORT_1,115200n81,local rs485-2: accepter: telnet(rfc2217),tcp,127.0.0.1,2218 connector: serialdev,/dev/serial/by-id/REPLACE_PORT_2,115200n81,local rs485-3: accepter: telnet(rfc2217),tcp,127.0.0.1,2219 connector: serialdev,/dev/serial/by-id/REPLACE_PORT_3,115200n81,local rs485-4: accepter: telnet(rfc2217),tcp,127.0.0.1,2220 connector: serialdev,/dev/serial/by-id/REPLACE_PORT_4,115200n81,local ``` 一个物理串口通常只应有一个活动客户端。如果应用允许新连接替换已经失效但未释放的连接,可查阅 ser2net 的 `kickolduser` 选项;若断开当前客户端可能产生安全问题,不要直接启用该选项。 ## 配置串口设备权限 不同发行版的软件包可能使用不同的服务账户。先检查服务用户和用户组: ```bash systemctl show ser2net -p User -p Group ``` 如果服务以专用 `ser2net` 用户运行,应确保该账户可以打开串口设备。在通过 `dialout` 组授予串口访问权限的发行版上,执行: ```bash sudo usermod -aG dialout ser2net ``` 然后重启服务。如果服务已配置 `Group=dialout`,或发行版软件包让服务以 root 身份运行,则无需执行该命令。 检查稳定链接及其目标设备的实际所有权: ```bash ls -l /dev/serial/by-id/REPLACE_WITH_YOUR_DEVICE ls -lL /dev/serial/by-id/REPLACE_WITH_YOUR_DEVICE ``` ## 前台测试配置 ser2net 当前没有无副作用的“仅验证配置”命令。前台测试前,先停止软件包提供的服务,避免它占用串口或监听端口: ```bash sudo systemctl stop ser2net sudo ser2net -d -c /etc/ser2net.yaml ``` 有效配置会启动监听器,并让进程保持在前台。配置错误、权限错误和设备打开错误会直接输出到终端。测试完成后按 `Ctrl-C` 退出。 如果实际配置文件不在 `/etc/ser2net.yaml`,应在 `-c` 后使用服务实际加载的路径。 ## 启用和管理 systemd 服务 启动服务并设置为开机自动启动: ```bash sudo systemctl enable --now ser2net sudo systemctl restart ser2net sudo systemctl status ser2net --no-pager ``` 确认服务仅监听回环地址: ```bash sudo ss -ltnp | grep -E ':(2217|2218|2219|2220)[[:space:]]' ``` 单端口配置的预期监听地址类似: ```text 127.0.0.1:2217 ``` 查看最近 100 条服务日志: ```bash sudo journalctl -u ser2net -n 100 --no-pager ```