Deskflow
Deskflow 让您可以在多台计算机(即使是不同的操作系统)之间轻松共享一套鼠标和键盘,而无需特殊的硬件。它适用于桌面上有多台计算机的用户,因为每个系统都使用自己的显示器。
重定向鼠标和键盘就像将鼠标移出屏幕边缘一样简单。Deskflow 还将所有系统的剪贴板合并为一个,允许在系统之间进行剪切和粘贴。此外,它还同步屏幕保护程序,以便它们同时启动和停止,并且如果启用屏幕锁定,则只需一个屏幕需要密码即可解锁所有屏幕。
Deskflow 是 Synergy 的官方上游。Deskflow 项目的建立是为了培养社区驱动的开发,让每个人都可以协作。Synergy 通过贡献代码和提供资金支持来赞助 Deskflow 项目。
分支
从历史上看,创建了一个名为 Barrier 的分支,以从 Synergy 源代码中删除序列号密钥代码。在项目领导层内部发生分歧后,活跃的维护者创建了一个名为 input-leap 的新分支。
安装
Deskflow
安装 deskflow 软件包或 deskflow-gitAUR。
Wayland:GNOME 46 或 KDE 6.1+ 是输入捕获支持的必要条件。
Input Leap 或 Barrier
您可以 安装 input-leap 或 barrier 软件包。
Synergy
在 2023 年 6 月左右,Symless 发布了 Synergy 3,这是一个付费软件。要安装 最新版本,可以使用用户软件包 synergy3-binAUR。
安装完成后,运行 GUI 以设置您的配置。然后 启用/启动 synergy.service
用户单元。
现在 Synergy 3 将在没有 GUI 的情况下运行,基于您设置的配置。您可以打开 GUI,服务也会与之一起工作。
预配置
首先确定每台机器的 IP 地址和主机名,并确保每台机器都有正确的 hosts 文件。(您也可以使用 IP 地址代替主机名。)
/etc/hosts
10.10.66.1 archserver.localdomain archserver 10.10.66.100 archleft.localdomain archleft 10.10.66.105 archright.localdomain archright
服务器配置
在 Synergy 中,带有您要共享的键盘和鼠标的计算机称为服务器。有关所有可用部分和选项的详细描述,请参阅Synergy 配置文件格式。
Arch Linux
Synergy 将其配置存储在 /etc/synergy.conf
下,Barrier 使用 /etc/barrier.conf
或 $HOME/.local/share/barrier/.barrier.conf
。如果配置文件不存在,您可以使用提供的 GUI(使用 $ synergy
或 $ barrier
或桌面启动器启动)以可视化方式创建它。或者,您可以通过复制 /etc/synergy.conf.example
或 /usr/share/doc/barrier-headless/barrier.conf.example
来创建它,其注释应为您提供基本配置的足够信息;如果您需要进一步参考或想要使用 GUI 中不可用的更高级选项,请阅读上面提到的指南。
如果您遇到问题并且希望在前台运行服务器,您可以运行以下命令代替
# synergys -f
synergy 服务器进程需要附加到您用户的 X 会话,这意味着它需要以您的用户身份运行。启用 synergys.service
用户单元。
synergys.socket
以在客户端尝试连接时启动服务器。当服务无法在启动时连接到 X 服务器时,这很有用。在服务器上设置加密
生成供服务器使用的证书和指纹。
对于 Barrier
注意:Barrier v2.4.0 引入了一种新的密钥文件格式,它需要 SHA256 指纹和 “v2:sha256:$fingerprint” 格式化的行。对于旧版本,请确保指纹是 SHA1 并且不包含前缀。
$ mkdir -p ~/.local/share/barrier/SSL/Fingerprints; $ openssl req -x509 -nodes -days 365 -subj /CN=Barrier -newkey rsa:4096 -keyout ~/.local/share/barrier/SSL/Barrier.pem -out ~/.local/share/barrier/SSL/Barrier.pem; $ fingerprint=$(openssl x509 -fingerprint -sha256 -noout -in ~/.local/share/barrier/SSL/Barrier.pem | cut -d"=" -f2); $ echo "v2:sha256:$fingerprint" > ~/.local/share/barrier/SSL/Fingerprints/Local.txt;
对于 Synergy
$ mkdir -p ~/.synergy/SSL/Fingerprints; $ openssl req -x509 -nodes -days 365 -subj /CN=Synergy -newkey rsa:4096 -keyout ~/.synergy/SSL/Synergy.pem -out ~/.synergy/SSL/Synergy.pem; $ fingerprint=$(openssl x509 -fingerprint -sha1 -noout -in ~/.synergy/SSL/Synergy.pem | cut -d"=" -f2); $ echo "$fingerprint" > ~/.synergy/SSL/Fingerprints/Local.txt;
要激活 SSL 插件,请添加 --enable-crypto
选项。(请注意,Synergy GUI 不允许您在没有有效许可证的情况下启用加密,而 Barrier GUI 允许这样做。)
- 从命令行启动
$ synergys --enable-crypto
Windows
- 打开 Synergy 程序
- 选择 服务器(共享此计算机的鼠标和键盘) 选项
- 选择 交互式配置
- 单击 配置服务器... 按钮
- 这将打开一个窗口,您可以在其中根据您拥有的计算机/屏幕数量添加屏幕:只需将右上角的屏幕图标拖到屏幕区域,然后双击它以编辑其设置
- 准备就绪后,单击 确定 关闭屏幕窗口,然后单击 启动 以启动服务器
在 Windows 上,配置默认保存在 synergy.sgc
文件中,但其名称和位置当然可以随意更改。
如果您想在每次 Windows 启动时启动 Synergy 服务器,您必须以管理员身份启动该程序,然后转到 编辑 -> 服务 并在 服务器 部分中选择 安装;请注意,在随后的重启中,Synergy 确实会自动启动,但托盘图标不会自动显示(至少对于 Windows 7 上的 1.4.2 beta 版本是这样)。要卸载该服务,请执行相同的操作,但显然选择 卸载。
如果您想从命令行启动服务器,这是一个 Windows 命令,您可以将其放在 .bat
文件中或直接从 cmd.exe
运行
C:\Program Files\Synergy+\bin\synergys.exe -f --debug ERROR --name left --log c:\windows\synergy.log -c C:/windows/synergy.sgc --address 10.66.66.2:24800
macOS
macOS 的配置与 Unix 类似:有关更多信息,请查看官方文档。
配置示例
这是一个基本的三台计算机设置的示例
/etc/synergy.conf
section: screens server-fire: archright-fire: archleft-fire: end section: links archleft-fire: right = server-fire server-fire: right = archright-fire left = archleft-fire archright-fire: left = server-fire end
这应该是 Arch Linux 软件包捆绑的示例
/etc/synergy.conf
section: screens # three hosts named: moe, larry, and curly moe: larry: curly: end section: links # larry is to the right of moe and curly is above moe moe: right = larry up = curly # moe is to the left of larry and curly is above larry. # note that curly is above both moe and larry and moe # and larry have a symmetric connection (they're in # opposite directions of each other). larry: left = moe up = curly # larry is below curly. if you move up from moe and then # down, you'll end up on larry. curly: down = larry end section: aliases # curly is also known as shemp curly: shemp end
以下是一个更自定义的示例
synergy.sgc
section: screens leftpc: halfDuplexCapsLock = false halfDuplexNumLock = false halfDuplexScrollLock = false xtestIsXineramaUnaware = false switchCorners = none +top-left +top-right +bottom-left +bottom-right switchCornerSize = 0 rightpc: halfDuplexCapsLock = false halfDuplexNumLock = false halfDuplexScrollLock = false xtestIsXineramaUnaware = false switchCorners = none +top-left +top-right +bottom-left +bottom-right switchCornerSize = 0 end section: aliases leftpc: 10.66.66.2 rightpc: 10.66.66.1 end section: links leftpc: right = rightpc rightpc: left = leftpc end section: options heartbeat = 1000 relativeMouseMoves = false screenSaverSync = false win32KeepForeground = false switchCorners = none +top-left +top-right +bottom-left +bottom-right switchCornerSize = 4 end
客户端配置
Arch Linux
在控制台窗口中,键入
$ synergyc server-host-name
或者,要在前台运行 synergy
$ synergyc -f server-host-name
在这里,server-host-name
是服务器的主机名。
在客户端上设置加密
如果您使用 synergy 命令行客户端,请将包含指纹的文件 ~/.synergy/SSL/Fingerprints/Local.txt
从服务器复制到客户端的主目录 ~/.synergy/SSL/Fingerprints/TrustedServers.txt
。要使用加密启动 synergy 命令行客户端,请键入
$ synergyc --enable-crypto server-host-name
如果您想在不需要客户端上的 GUI 的情况下启用 SSL 信任,您可以按照以下步骤操作,但您应该确认显示的指纹与您的服务器在其 GUI 中或服务器上 ~/.synergy/SSL/Fingerprints/Local.txt
中的指纹相同(如上所述)。echo -n
是避免 openssl 客户端挂起等待输入所必需的。
对于 Barrier
注意:Barrier v2.4.0 引入了一种新的密钥文件格式,它需要 SHA256 指纹和 “v2:sha256:$fingerprint” 行格式。对于旧版本,请确保指纹是 SHA1 并且不包含前缀。
$ mkdir -p ~/.synergy/SSL/Fingerprints $ fingerprint=$(echo -n | openssl s_client -connect $YOUR_SYNERGY_SERVER:24800 2>/dev/null | openssl x509 -sha256 -noout -fingerprint | cut -d"=" -f2); $ echo "v2:sha256:$fingerprint" > ~/.synergy/SSL/Fingerprints/TrustedServers.txt
对于 Synergy
$ mkdir -p ~/.synergy/SSL/Fingerprints $ fingerprint=$(echo -n | openssl s_client -connect $YOUR_SYNERGY_SERVER:24800 2>/dev/null | openssl x509 -sha1 -noout -fingerprint | cut -d"=" -f2); $ echo "$fingerprint" > ~/.synergy/SSL/Fingerprints/TrustedServers.txt
- synergy 的 GUI 客户端存在一个未解决的问题(请参阅 https://github.com/deskflow/deskflow/issues/4737)。只有当日志记录级别设置为 INFO、DEBUG 或 DEBUG2 时,才会弹出用于提示确认服务器指纹的对话框。
- TrustedServers.txt 也可能位于此处:
~/.local/share/synergy/SSL/Fingerprints/TrustedServers.txt
,如果上面提到的位置不起作用,请使用此位置。
自动启动
有几种方法可以自动启动 Synergy 客户端,它们实际上与可用于任何其他应用程序的方法相同。
server-host-name
替换为真实的服务器主机名。- 您可以将下一行添加到您的 xinitrc 中
~/.xinitrc
... #replace server-host-name with the real name synergyc server-host-name
以下是另一种选择
~/.xinitrc
XINIT_CMD='/usr/bin/synergyc -d FATAL -n galileo-fire 10.66.66.2:24800' /usr/bin/pgrep -lxf "$XINIT_CMD" || ( ( $XINIT_CMD ) & )
synergyc server-host-name
- 要使用 systemd 启动 Synergy 客户端,创建一个服务文件
~/.config/systemd/user/synergyc.service
[Unit] Description=Synergy Client Daemon After=network.target [Service] ExecStart=/usr/bin/synergyc --no-daemon server-name Restart=always RestartSec=3 [Install] WantedBy=default.target
然后执行 daemon-reload 和 启动 synergyc.service
用户单元。
自动启动 Synergy 也在其官方参考页面中进行了文档记录。
Windows
安装后,打开 Synergy 程序,选择 客户端(使用另一台计算机的键盘和鼠标) 选项,并在文本框中键入服务器计算机的主机名,然后单击 启动 以启动客户端。
如果您想在每次 Windows 启动时启动 Synergy 客户端,您必须以管理员身份启动该程序,然后转到 编辑 -> 服务 并在 客户端 部分中选择 安装。
如果您想从命令行启动客户端,这是一个 Windows 命令,您可以将其放在 .bat
文件中或直接从 cmd.exe
运行。这指向 C:\synergy.sgc
中的配置文件,并在后台像服务一样运行。
START /MIN /D"C:\Program Files\Synergy+\bin" synergys.exe -d ERROR -n m6300 -c C:\synergy.sgc -a 10.66.66.2:24800
macOS
找到 synergyc 文件夹中的 synergyc 程序,并将其拖到终端窗口:完整路径将显示在终端中。现在附加服务器的主机名,以便完整命令如下所示
/path/to/synergyc/synergyc server-host-name
然后按 Enter
。
已知问题
如果 Arch 在 Synergy 安装中用作客户端,则服务器可能无法唤醒客户端显示器。有一些解决方法,例如通过SSH 执行以下操作(如果 ACPI 已启用,请参阅:显示电源管理信号#运行时设置)
# xset dpms force on
故障排除
键盘 AltGr
如果您遇到 AltGr
/ISO_Level3_Shift
问题,请添加
/etc/synergys.conf
altgr = alt #1.8.2 altgr = shift #v1.8.3 and higher
到屏幕/客户端部分。
键盘重复
如果您在客户端机器(Linux 主机)上遇到键盘重复问题,只需键入
# /usr/bin/xset r on
在任何控制台中。
键盘映射
如果您在使用服务器的键盘在客户端窗口(例如终端)中遇到键盘映射问题,则在启动 synergyc 后重新设置 X 键映射可能会有所帮助。以下命令将键映射设置为其当前值
# setxkbmap $(setxkbmap -query | grep "^layout:" | awk -F ": *" '{print $2}')
Gnome 中没有光标
当 GNOME 未检测到鼠标时,它将默认设置为触摸屏模式并隐藏光标。要启用,请运行
# dconf write /org/gnome/settings-daemon/plugins/cursor/active false
这可以添加到 init 脚本或 systemd 单元中
ExecStartPost=dconf write /org/gnome/settings-daemon/plugins/cursor/active false
混合使用 xorg 和 wayland 环境目前也无法正常工作。尝试在客户端和服务器上都以 xorg 启动 gnome。
客户端返回 “failed to verify server certificate fingerprint”
您需要将服务器的 ~/.synergy/SSL/Fingerprints/Local.txt
的内容复制到客户端的 ~/.synergy/SSL/Fingerprints/TrustedServers.txt
中。请参阅#在客户端上设置加密。
Scroll Lock LED 不亮
当使用 Scroll Lock 锁定到客户端(或进入相对鼠标移动模式)时,您可能会遇到键盘的 Scroll Lock LED 不亮的问题。这可以通过将 Scroll_Lock
键绑定到一个空的修饰键来解决。
首先,找到一个空的修饰键。在本例中,mod3 可用
$ xmodmap
xmodmap: up to 4 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3 mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
然后,添加新的映射。
$ xmodmap -e 'add mod3 = Scroll_Lock' $ echo "add mod3 = Scroll_Lock" >> ~/.Xmodmap
请参阅 Xmodmap#激活自定义表 以在登录时加载 ~/.Xmodmap
。
进行此更改后,测试 LED 和屏幕锁定。如果您发现需要按两次 Scroll Lock 才能锁定屏幕,请在 section: screens
中的所有屏幕上启用 halfDuplexScrollLock
。
额外的鼠标按键在客户端不起作用
如果您发现额外的鼠标按键(即 Mouse4/Mouse5)没有转换为客户端,请尝试将以下内容添加到 section: options
mousebutton(6) = mousebutton(4) mousebutton(7) = mousebutton(5)
这将把鼠标按键重新映射到正确的编号。如果这不能解决问题,请删除配置,停止 Synergy,并在启用调试日志记录的情况下在前台启动它
$ synergys -f -d DEBUG1
然后,将光标移动到出现问题的客户端屏幕上。单击不起作用的按键,并注意如下所示的日志条目
[2017-09-30T14:56:45] DEBUG1: onMouseDown id=6 ... [2017-09-30T14:56:46] DEBUG1: onMouseUp id=6
id=...
部分将包含在 mousebutton(...)
中使用的正确编号
鼠标在某些游戏中被固定
在某些应用程序(如 Overwatch 或其他游戏)中,光标会被困在屏幕中间。
根据 https://github.com/deskflow/deskflow/issues/2631,这是一个已知问题。
只需在您的设置中设置相对鼠标移动,并确保锁定屏幕。