
在服务器没有显示器、没有桌面环境的场景下想让一台机器作为 Synergy 服务端共享键鼠很多人会直接放弃。其实只要补齐虚拟显示、证书、配置文件和守护进程这几块就能跑通一套完全 headless 的 Synergy 服务端。本文从概念到实战逐步拆解这套偏小众但很实用的搭建方案适合手边有 Linux 无头服务器、机架式主机或虚拟机宿主机的开发者参考。全程不依赖 GUI所有操作基于命令行完成。1. 背景与核心概念Synergy 是一款跨设备键鼠共享工具分为服务端和客户端两种角色。服务端连接着真实的键盘鼠标客户端通过局域网共享这套输入设备鼠标移到屏幕边缘时可以自动切换剪贴板内容也能在两台机器间同步。常见用法是拿一台 Windows 或 macOS 桌面作为服务端把旁边一台 Linux 笔记本、旧电脑作为客户端。但在某些特殊场景下我们想反着来把服务端跑在一台没有显示器、没有桌面环境的 Linux 服务器上然后让桌面电脑作为客户端连接上去。为什么会有这种需求比如机架上的元服务器自带 USB 键鼠接口但管理员平时只用 SSH 管理偶尔想把服务器上的键鼠共享给旁边临时使用的桌面电脑又比如实验室里有多台无头工作站它们通过 IPMI 或者 KVM 连接键鼠却没有物理屏幕这时无头服务端就能把输入能力共享出来。这里的关键困惑在于Synergy 服务端需要读取本机的键盘鼠标事件即使在无显示器的情况下系统也必须存在一个可用的显示输出和输入设备。服务器没有接屏幕X Server 默认不会启动。所以第一步不是装 Synergy而是给服务器补一个虚拟显示器让 X Server 能跑起来进而让 Synergy 服务端正常监听输入设备。在实现选型上Barrier 是一个很合适的开源替代方案。Barrier 是从旧版 Synergy 分叉出来的社区维护项目协议兼容性较好命令行支持也比较完整。本文后面的操作都会以 Barrier 作为示例只要理解了核心思路换成官方 Synergy 的 headless 方案也基本同理。2. 环境准备与版本说明开始部署前先明确整套环境需要的组件和版本约束。本文示例以一台 Ubuntu Server 22.04 LTS 作为无头服务器客户端使用 Windows 11 桌面中间通过局域网通信。角色操作系统硬件/环境软件服务端Ubuntu Server 22.04 LTS无显示器配备 USB 键鼠Barrier客户端Windows 11有显示器、键鼠Barrier网络局域网允许 TCP 24800 端口互通无需要注意Barrier 的版本号和官方 Synergy 的版本号并不是一一对应的。Barrier 兼容 Synergy 1.x 的协议但不兼容 Synergy 2/3 的服务器端协议。如果某个客户端或服务端使用的是新版官方 Synergy建议整体选用官方方案不要再混搭 Barrier。在 Ubuntu 官方仓库中可以直接用 apt 安装 Barriersudo apt update sudo apt install barrier xserver-xorg-video-dummyxserver-xorg-video-dummy是虚拟显示驱动没有它X Server 在找不到物理显示器时不会启动。有些发行版默认安装了 xserver-xorg-core但没有 dummy 驱动因此这一步不要省略。如果操作系统不是 Ubuntu安装方式会稍有差异。以 CentOS/RHEL 系为例可能需要从 EPEL 或源码编译安装 Barrierdummy 驱动对应包名叫xorg-x11-drv-dummy。本文不展开不同发行版的包名差异实际操作时先确认自己的包管理器里有没有 Barrier 和 dummy 驱动版本差异不是核心问题。3. Synergy 服务端的工作原理与配置结构在进入具体命令之前先解释 Synergy/Barrier 在无头模式下到底做了什么。理解这个流程后续排错会轻松很多。Synergy 服务端启动后会在本机监听一个 TCP 端口默认是 24800。客户端主动连接这个端口并告知服务端自己的屏幕名称。服务端根据配置文件中定义的屏幕布局来判断鼠标应该从哪个方向切到哪个屏幕。当鼠标到达服务端屏幕边缘时服务端会把输入事件转发给目标客户端同时把自己的光标隐藏。这套机制决定了三个重要的配置点服务端本机的屏幕名称。客户端的屏幕名称。屏幕之间的相对位置关系。配置文件中还需要定义剪贴板同步功能是否开启不过在 Barrier 中剪贴板同步默认是开启的不需要额外设置。一个最小的 Barrier 配置文件长下面这样section: screens server: client: end section: links server: right client client: left server end这个配置的含义是服务端屏幕名称是server客户端屏幕名称是client服务端右侧连接着客户端客户端左侧连接着服务端。当鼠标从服务端屏幕右边缘移出时会出现在客户端屏幕上当鼠标从客户端屏幕左边缘移出时又会回到服务端屏幕。在 headless 部署中这个配置文件里的屏幕名称必须和启动参数以及客户端的配置完全一致否则会出现连接成功但鼠标无法切换的问题。很多新手第一次部署时服务端显示连接成功但鼠标始终卡在当前屏幕无法过去基本就是屏幕名称不匹配或布局写反了。4. 无头模式下的完整部署步骤下面从零开始把服务端搭建完整走一遍。每一步都会说明为什么要这样做顺带标出常见的坑。4.1 配置 Xorg 虚拟显示器无头服务器的第一个难点是让 X Server 在没有物理显示器的情况下正常启动。简单说我们要在 Xorg 的配置目录里添加一个 dummy 显示配置让系统认为服务器上存在一个 1920x1080 的显示器。创建一个 Xorg 配置文件sudo nano /usr/share/X11/xorg.conf.d/10-dummy.conf内容如下Section Device Identifier dummy Driver dummy VideoRam 256000 EndSection Section Monitor Identifier dummy-monitor HorizSync 5.0 - 1000.0 VertRefresh 5.0 - 1000.0 Modeline 1920x1080 148.50 1920 2008 2052 2200 1080 1084 1089 1125 hsync vsync EndSection Section Screen Identifier dummy-screen Device dummy Monitor dummy-monitor DefaultDepth 24 SubSection Display Depth 24 Modes 1920x1080 EndSubSection EndSection这里需要注意几个参数Driver dummy指定使用 dummy 虚拟显示驱动。VideoRam 256000表示显存大小单位是 KB虚拟显存也需要给够否则高分辨率下可能渲染异常。Modes 1920x1080指定虚拟分辨率为 1920x1080实际使用中可以按自己喜好调整。保存退出后测试 Xorg 能否启动。如果服务器上有独立的显示管理器如 LightDM可以重启显示服务如果没有可以直接手动启动一个独立的 X Server 进程sudo Xorg :0 -config /usr/share/X11/xorg.conf.d/10-dummy.conf或者使用 startx 方式startx -- :0这里要特别提醒如果服务器没有安装任何桌面环境或窗口管理器手动启动 Xorg 后会停在前台占用终端。实际部署时建议把它交给 systemd 管理或者安装并启动一个轻量级显示管理器。最简单的方式是安装 LightDMsudo apt install lightdm sudo systemctl enable --now lightdmLightDM 本身就是一个显示管理器会自动读取 Xorg 配置并启动图形会话。即使没有完整桌面环境只要 X Server 起来Barrier 服务端就能运行。4.2 生成 TLS 加密证书Barrier 的通信默认可以使用 TLS 加密。在无头模式下没有 GUI 帮我们生成证书所以需要用 OpenSSL 手动生成自签名证书。先创建 Barrier 的 SSL 目录mkdir -p ~/.local/share/barrier/SSL然后生成密钥和证书openssl req -x509 -nodes -days 3650 \ -newkey rsa:2048 \ -subj /CNbarrier-headless \ -keyout ~/.local/share/barrier/SSL/Barrier.pem \ -out ~/.local/share/barrier/SSL/Barrier.pem这个命令会同时把私钥和自签名证书写入同一个Barrier.pem文件。-nodes表示私钥不加密Barrier 启动时不需要输入密码这样适合后台守护进程运行。-days 3650设置证书有效期为十年避免频繁续期。生成完毕后记得确认文件权限chmod 600 ~/.local/share/barrier/SSL/Barrier.pem chmod 700 ~/.local/share/barrier/SSL使用时的注意点是Barrier 服务端和客户端如果启用了 TLS那么默认会使用各自机器上的Barrier.pem证书并不需要把服务端证书手工拷贝到客户端。Barrier 的加密特性主要防护的是流量被篡改和窃听而不是身份认证。所以更准确的理解是这里的证书只用于建立 TLS 加密通道不用于验证对方身份。4.3 编写 Barrier 服务端配置文件现在编写服务端布局文件。为了便于管理创建一个固定路径mkdir -p ~/barrier nano ~/barrier/barrier.conf假设无头服务器屏幕名称是server客户端桌面电脑屏幕名称是client并且客户端在服务端的右侧配置文件如下section: screens server: client: end section: links server: right client client: left server end如果有多台客户端可以在 screens 和 links 里继续添加。比如有三台机器服务端左侧是 client1右侧是 client2section: screens server: client1: client2: end section: links server: left client1 right client2 client1: right server client2: left server end布局配置很容易出错建议先用最简单的两台机器验证通熟再逐渐增加复杂度。4.4 启动 Barrier 服务端确保 X Server 已经在:0这个 display 上运行。然后使用barriers命令启动服务端export DISPLAY:0 barriers \ --config ~/barrier/barrier.conf \ --name server \ --enable-crypto \ --debug DEBUG逐项解释一下参数--config指定刚写好的配置文件路径。--name指定服务端屏幕名称必须和配置文件里的server一致。--enable-crypto开启 TLS 加密。--debug DEBUG输出详细日志在排错时非常有用。如果一切正常日志中会显示 Barrier 已启动并监听 TCP 24800 端口。如果没有任何输出或者提示无法连接 X Server说明 DISPLAY 环境变量没有设置正确或者 Xorg 没有启动成功。4.5 客户端连接服务端在 Windows 客户端上安装 Barrier打开后在客户端模式下填写无头服务器的 IP 地址并将客户端屏幕名称改成client然后勾选 Enable SSL。点击开始即可连接。连接成功后服务器日志会显示类似下面的信息[INFO] client connection from 192.168.1.20 [INFO] screen client connected此时从无头服务器的键盘输入鼠标移动可以看到鼠标光标能够在服务器和 Windows 客户端之间切换。4.6 用 systemd 实现开机自启手动启动 Barrier 适合验证联调真正长期运行还得靠 systemd。推荐创建一个系统级 service 文件但需要注意服务不能以 root 身份直接运行因为 Xorg 和 Barrier 需要普通用户上下文。创建一个 service 文件sudo nano /etc/systemd/system/barrier.service内容示例[Unit] DescriptionBarrier Headless Server Afternetwork.target display-manager.service Requiresdisplay-manager.service [Service] Useryourusername EnvironmentDISPLAY:0 ExecStart/usr/bin/barriers --config /home/yourusername/barrier/barrier.conf --name server --enable-crypto Restarton-failure RestartSec5 [Install] WantedBymulti-user.target这里有几个值得关注的点。After和Requires的目的是确保 LightDM 或 Xorg 先启动。如果服务器没有显示管理器则需要把Requiresdisplay-manager.service去掉改写为Afterxorg.service并提前把 Xorg 包装成服务。这个差异比较大建议根据自己服务器的实际情况调整。最稳妥的做法是先确认手动启动 barriers 能成功再套进 systemd 中如果 systemd 启动后仍然报错优先检查DISPLAY环境变量是否真的传递到了进程。启用服务sudo systemctl daemon-reload sudo systemctl enable --now barrier查看运行状态sudo systemctl status barrier如果 Barrier 因 X Server 启动慢而退出Restarton-failure会每隔 5 秒尝试重新拉起多数情况下可以自动恢复。5. 安全配置与网络限制在无头服务器上暴露 Synergy/Barrier 服务安全性需要格外注意。Barrier 协议本身没有身份认证机制连接方只要知道服务端 IP 和端口且屏幕名称匹配就能建立连接。TLS 加密只能防止中间人监听和篡改不能阻止未授权客户端接入。因此要把服务端限制在可信局域网内并通过防火墙只允许特定来源 IP 访问 24800 端口。以 Ubuntu 自带的 ufw 为例sudo ufw allow from 192.168.1.0/24 to any port 24800 proto tcp sudo ufw enable如果是复杂环境还可以用 iptables 精确限制sudo iptables -A INPUT -p tcp --dport 24800 -s 192.168.1.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 24800 -j DROP这类规则在生产环境生效前一定要先确认自己的管理 SSH 端口不会被误伤建议在测试网络或实验环境中验证通过后再套用到生产环境。另外TLS 证书到期后客户端会出现 SSL 错误。如果你设置了短期证书记得把续期纳入运维检查表或者在生成证书时直接使用 3650 天有效期。十年到期后只需要重新生成Barrier.pem并重启 Barrier 服务即可。6. 常见问题与排查思路无头模式下容易遇到的问题和正常桌面模式不太一样这里集中整理成一张排查表方便快速对照。问题现象常见原因解决思路barriers 提示无法打开 X ServerDISPLAY 没有设置或 Xorg 未启动运行export DISPLAY:0用xdpyinfo测试 X Server 是否在监听客户端连接超时防火墙未放行 24800 端口sudo ufw status检查放行对应协议和端口客户端连接成功但鼠标无法切换屏幕名称或布局方向配置不对核对--name参数、客户端屏幕名称、links 中的方向关系日志提示 SSL/TLS 证书问题Barrier.pem 权限不对或证书损坏删除后重新用 openssl 生成检查权限为 600Barrier 启动后随机退出X Server 在服务启动时还未就绪调整 systemd 的依赖顺序配合Restarton-failure服务端能切换但剪贴板无法同步某些桌面环境自带剪贴板管理冲突或 Barrier 剪贴板功能未开启确认客户端 Barrier 版本检查服务端和客户端的剪贴板相关设置如果遇到问题第一件事不是改配置而是打开 Barrier 的调试日志。服务端使用--debug DEBUG启动客户端在 GUI 设置里也可以开启调试输出。日志中会明确提示客户端屏幕名称、连接来源、切换事件绝大多数配置问题都可以从日志里定位。7. 最佳实践与工程建议headless Synergy server 搭建起来并不复杂难点在于把它做得稳定、安全、可维护。结合实际经验这里列出几条值得采纳的工程建议。第一不要使用 root 账号长期运行 Barrier。Synergy/Barrier 需要通过 X Server 捕获输入事件使用专门的普通用户运行更安全。systemd service 中指定Useryourusername避免权限过大的服务进程成为风险点。第二给服务器固定主机名和 IP。Synergy 的屏幕名称默认与机器主机名绑定如果主机名变化客户端屏幕名称会不匹配。建议在 DHCP 保留或者服务器上手动配置静态 IP客户端和服务端的/etc/hosts也尽量写清楚对应关系。第三把配置文件纳入版本管理。Barrier 配置文件虽然很小但它是整套 system 的核心。推荐放在一个专门的 git 仓库中方便回滚和在其他服务器上复制部署。配置文件中的屏幕名称、布局方向要保持统一注释避免后续维护者看不懂。第四日志管理要做轮转。Barrier 在 DEBUG 模式下会产生大量日志长期运行很容易写满磁盘。如果通过 systemd 启动可以用 systemd 自带的日志管理参数限制日志大小[Service] StandardOutputjournal StandardErrorjournal然后利用journalctl --vacuum-size100M定期清理或者手动在 cron 中执行旧日志清理。这里关键是不要让日志成为新的故障点。第五关闭不必要的端口暴露。如果 Barrier 服务只服务于 1-2 台客户端可以在防火墙上按具体 IP 放行而不是放行整个网段。即便是在可信内网最小权限原则同样适用。第六定期检查证书状态。虽然本文示例中证书默认十年有效但在长期生产环境中证书过期仍然是很常见的低级故障。可以在监控系统中加入端口连通性检查以及模拟 TLS 握手检查证书有效期。第七在无头服务器上不要轻率升级内核或图形栈。Barrier 依赖 X Server而 X Server 和显示驱动属于底层组件一次不兼容的内核升级可能导致 dummy 驱动加载失败。升级前先在备用环境测试升级后确认 barriers 服务状态正常再继续其他操作。8. 总结无头模式下部署 Synergy/Barrier 服务端本质上是在没有显示器的服务器上补足两个条件让 X Server 拥有虚拟显示输出让 Barrier 以守护进程方式稳定运行。通过配置xserver-xorg-video-dummy驱动、生成 TLS 证书、编写屏幕布局文件再用 systemd 托管就能实现开机自启。这套方案适合机架式服务器、无头工作站和虚拟化实验环境这类特殊场景不属于常规 Synergy 使用路径。如果你准备把它作为长期基础设施的一部分建议把安全网络限制和日志监控同步落地不要只停留在“能连上”这个阶段。下一步可以尝试的方向包括通过 SSH 隧道承载 Barrier 流量来跨网段访问、使用 Barrier 提供的 API 控制屏幕切换、把配置脚本化以批量部署到多台机器。有兴趣的话可以从 Barrier 官方文档和命令行帮助入手在本文基础上做更多自定义扩展。