Deskflow

来自 ArchWiki


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-leapbarrier 软件包。

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 中不可用的更高级选项,请阅读上面提到的指南。

提示: 确保服务器端口未被阻止。默认情况下,synergy 使用端口 24800。

如果您遇到问题并且希望在前台运行服务器,则可以改为运行以下命令

# 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

  1. 打开 Synergy 程序
  2. 选择选项“服务器(共享此计算机的鼠标和键盘)”
  3. 选择“交互式配置”
  4. 单击“配置服务器...”按钮
  5. 这将打开一个窗口,您可以在其中根据您拥有的计算机/屏幕数量添加屏幕:只需将屏幕图标从右上角拖到屏幕区域,然后双击它以编辑其设置
  6. 准备就绪后,单击“确定”关闭屏幕窗口,然后单击“开始”启动服务器

在 Windows 上,配置默认保存在 synergy.sgc 文件中,但其名称和位置当然可以随意更改。

如果您想在每次 Windows 启动时都启动 Synergy 服务器,则必须以管理员身份启动程序,然后转到“编辑”->“服务”,然后在“服务器”部分中选择“安装”;请注意,在随后的重启中,Synergy 将确实自动启动,但托盘图标不会自动显示(至少对于 Windows 7 上的 1.4.2 beta 版本)。要卸载该服务,请执行相同的操作,但显然选择“卸载”。

如果您想从命令行启动服务器,这是您可以放在 .bat 文件中或直接从 cmd.exe 运行的 Windows 命令

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

如果您想在客户端上启用 SSL 信任而无需 GUI,您可以按照以下步骤操作,但您应该确认显示的指纹与您的服务器在其 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 客户端,则必须以管理员身份启动程序,然后转到“编辑”->“服务”,然后在“客户端”部分中选择“安装”。

如果您想从命令行启动客户端,这是您可以放在 .bat 文件中或直接从 cmd.exe 运行的 Windows 命令。这指向 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

故障排除

官方文档有一个 FAQ 以及一个 故障排除页面

键盘 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。

客户端返回“无法验证服务器证书指纹”

您需要将服务器的 ~/.synergy/SSL/Fingerprints/Local.txt 的内容复制到客户端的 ~/.synergy/SSL/Fingerprints/TrustedServers.txt 中。请参阅 #在客户端上设置加密

滚动锁定 LED 不亮

当使用滚动锁定锁定到客户端(或进入相对鼠标移动模式)时,您可能会遇到键盘的滚动锁定 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#Activating the custom table 以在登录时加载 ~/.Xmodmap

在进行此更改后,测试 LED 和屏幕锁定。如果您发现需要按两次滚动锁定才能锁定屏幕,请在 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,这是一个已知问题。

只需在您的设置中设置相对鼠标移动,并确保锁定屏幕。

外部链接