Deskflow
Deskflow 允许您轻松地在多台计算机(甚至不同操作系统)之间共享单个鼠标和键盘,而无需特殊硬件。它面向桌上有多个计算机的用户,因为每台系统都使用自己的显示器。
将鼠标和键盘重定向就如同将鼠标移出屏幕边缘一样简单。Deskflow 还将所有系统的剪贴板合并为一个,从而允许在系统之间进行剪切和粘贴。
Deskflow 是 Synergy 的官方上游。Deskflow 项目的建立是为了培养社区驱动的开发,让每个人都可以协作。Synergy 通过贡献代码和提供经济支持来赞助 Deskflow 项目。
分支
历史上,一个名为 Barrier 的分支被创建,用于从 Synergy 源代码中移除序列号代码。在项目领导层出现分歧后,活跃的维护者创建了一个名为 input-leap 的新分支。
安装
Deskflow
安装 deskflow 包。
Wayland:输入捕获支持需要 GNOME 46 或 KDE 6.1+。
Input Leap 或 Barrier
您可以 安装 input-leap 或 barrierAUR 包。
Synergy
大约在 2023 年 6 月,Symless 发布了 Synergy 3,这是一个付费软件。要安装最新版本,有一个用户包 synergy3-binAUR。
安装完成后,运行 GUI 来设置您的配置。然后启用/启动 synergy.service 用户单元。
现在 Synergy 3 将根据您设置的配置在没有 GUI 的情况下运行。您可以打开 GUI,服务将与其一起工作。
预配置
首先确定每台计算机的 IP 地址和主机名,并确保每台计算机都有正确的主机文件。(您也可以使用 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 而言)。要卸载服务,请执行相同的操作,但显然选择 卸载。
如果您想从命令行启动 Synergy 服务器,这里有一个 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 类似:请参阅官方文档了解更多信息。
配置示例
这是一个基本的 3 计算机设置的示例
/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(参见:Display Power Management Signaling#Runtime settings)
# 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 unit 中
ExecStartPost=dconf write /org/gnome/settings-daemon/plugins/cursor/active false
混合 xorg 和 wayland 环境目前也无法正常工作。尝试在 xorg 中为客户端和服务器启动 gnome。
客户端返回“无法验证服务器证书指纹”
您需要将服务器的 ~/.synergy/SSL/Fingerprints/Local.txt 的内容复制到客户端的 ~/.synergy/SSL/Fingerprints/TrustedServers.txt。请参阅 #在客户端上设置加密。
Scroll Lock 指示灯不亮
当使用 Scroll Lock 锁定到客户端(或进入相对鼠标移动模式)时,您可能会遇到键盘的 Scroll Lock 指示灯不亮的问题。这可以通过将 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。
进行此更改后,测试指示灯和屏幕锁定。如果您发现需要按两次 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,这是一个已知的问题。
只需在您的设置中启用相对鼠标移动,并确保锁定屏幕。