Synergy-core 编译 使用 教程

Synergy 是一款非常棒的跨平台 鼠标、键盘、剪切板共享软件,不过GUI版本1.8.8停留在x32位,且不免费。所以转投Synergy-core 开源版,在此分享一下编译x64位,以及使用心得

Synergy

Synergy是一个跨平台的 鼠标、键盘、剪切板共享软件,支持Windows,Mac,Linux主流桌面平台。今天我就手把手把这个软件分享给大家。

如果你在用两台电脑,你是如何在他们之间传输文件的,又是如何切换键盘鼠标的,诚然我知道Windows官方出的鼠标有 无界 功能。今天我介绍的synergy软件,你用了之后,你就再也不用在微信的 文件传输助手 上互传文件了,直接在这个电脑复制,在另一个电脑上粘贴!不受硬件限制,只要两台电脑ip互联互通。

无界鼠标由于是微软出品的,所以只支持 Windows 平台,安装包也是 MSI 文件格式。

Synergy-core 是开源的cli程序.

官网:https://symless.com/synergy

开源地址:https://github.com/symless/synergy-core

下载

GUI版程序只能官网付费上下载,没有登陆App Store, 还有点需要注意1.8.8及以前的版本都是32位的程序,所以这次来折腾下64位的开源版。

Mac OS Cotalina 开始,就完全不能运行32位的程序了

安装

如果是官网下载Synergy GUI版,那双击就完事了。

编译

这里说下github上开源的core版本,编译,安装。

Mac OS 环境

安装依赖,编译软件,编译,安装:

# Install Homebrew

## 安装相关编译软件
$ brew install cmake
$ brew install qt
$ brew install openssh
$ brew install git

## 检查qt 安装信息,以及目录,等下需要用到 /usr/local/Cellar/qt/5.15.0/Frameworks/
$ brew info qt

## 添加一个环境变量
$ export CMAKE_PREFIX_PATH="/usr/local/Cellar/qt/5.15.0/Frameworks/"

# 下载源码并进入源码目录
$ git clone https://github.com/symless/synergy-core.git
$ cd synergy-core
$ mkdir build
$ cd build
## 准备编译参数
$ cmake -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk  -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=x86_64 
## 编译
make

Windows 编译

这里我在Windows 环境安装了 最新Qt,和 Visual Studio community 2019.

Add C:\Qt\Tools\QtCreator\bin to the system PATH

Set CMAKE_PREFIX_PATH environment variable
C:\Qt\5.12.5\msvc2017_64

$ cd Projects\synergy
$ mkdir build
$ cd build
$ call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
$ cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Debug ..
$ msbuild synergy-core.sln /p:Platform="x64" /p:Configuration=Debug /m
$ cd ..
$ copy ext\openssl\windows\x64\bin\* build\
$ cd Projects\synergy-core
$ mkdir build
$ cd build
$ call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
$ cmake -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=Debug ..
$ msbuild synergy-core.sln /p:Platform="x64" /p:Configuration=Debug /m

Linux 编译

$ cd Projects/synergy
$ mkdir build
$ cd build
$ cmake ..
$ make

编译成功,会生成3个可执行文件。编辑后产物在:

./synergy-core/build/bin/

可执行文件

synergy-core

命令行程序:synergy-core, synergyc, synergys.

Synergy Core v1.x

对于1.x版本,client,server是两个程序,也就是分别对应:synergyc,synergys。

OS Command
Windows synergyc [server IP]
macOS ./synergyc [server IP]
Linux ./synergyc [server IP]
OS Command
Windows synergys -c [path to config file]
macOS ./synergys -c [path to config file]
Linux ./synergys -c [path to config file]

Synergy Core v2.x

v2.x,server,client 都是一个程序了,通过不同的命令来确定自己的职责。

OS Command
Windows synergy-core --client [server IP]
macOS ./synergy-core --client [server IP]
Linux ./synergy-core --client [server IP]
OS Command
Windows synergy-core --server -c [path to config file]
macOS ./synergy-core --server -c [path to config file]
Linux ./synergy-core --server -c [path to config file]

Command help

通过一下命令:

$ ./synergyc --help
$ ./synergys --help

你能获取v1.x synergy的帮助信息,但是v2.x不知道是不是忘了把这个加上。

$ ./synergy-core --help     ## 不会显示帮助信息

所以我就把它应有的帮助信息放这里了。

Options for synergy-core --client

Usage: synergy-core --client [--yscroll <delta>] [--daemon|--no-daemon] [--name <screen-name>] [--restart|--no-restart] [--debug <level>] <server-address>

Connect to a synergy mouse/keyboard sharing server.

  -d, --debug <level>      filter out log messages with priority below level.
                             level may be: FATAL, ERROR, WARNING, NOTE, INFO,
                             DEBUG, DEBUG1, DEBUG2.
  -n, --name <screen-name> use screen-name instead the hostname to identify
                             this screen in the configuration.
  -1, --no-restart         do not try to restart on failure.
*     --restart            restart the server automatically if it fails.
  -l  --log <file>         write log messages to file.
      --no-tray            disable the system tray icon.
      --enable-drag-drop   enable file drag & drop.
  -f, --no-daemon          run in the foreground.
*     --daemon             run as a daemon.
      --yscroll <delta>    defines the vertical scrolling delta, which is
                             120 by default.
  -h, --help               display this help and exit.
      --version            display version information and exit.

* marks defaults.

The server address is of the form: [<hostname>][:<port>].  The hostname
must be the address or hostname of the server.  The port overrides the
default port, 24800.

Options for synergy-core --server

Usage: synergy-core --server [--address <address>] [--config <pathname>] [--daemon|--no-daemon] [--name <screen-name>] [--restart|--no-restart] [--debug <level>]

Start the synergy mouse/keyboard sharing server.

  -a, --address <address>  listen for clients on the given address.
  -c, --config <pathname>  use the named configuration file instead.
  -d, --debug <level>      filter out log messages with priority below level.
                             level may be: FATAL, ERROR, WARNING, NOTE, INFO,
                             DEBUG, DEBUG1, DEBUG2.
  -n, --name <screen-name> use screen-name instead the hostname to identify
                             this screen in the configuration.
  -1, --no-restart         do not try to restart on failure.
*     --restart            restart the server automatically if it fails.
  -l  --log <file>         write log messages to file.
      --no-tray            disable the system tray icon.
      --enable-drag-drop   enable file drag & drop.
  -f, --no-daemon          run in the foreground.
*     --daemon             run as a daemon.
  -h, --help               display this help and exit.
      --version            display version information and exit.

* marks defaults.

The argument for --address is of the form: [<hostname>][:<port>].  The
hostname must be the address or hostname of an interface on the system.
The default is to listen on all interfaces.  The port overrides the
default port, 24800.

If no configuration file pathname is provided then the first of the
following to load successfully sets the configuration:
  $HOME/.synergy.conf
  /etc/synergy.conf

配置

GUI的配置就不讲了,这里说下cli程序的配置。

原文在这里Synergy Text Config,我这里简单提一下。然后按照我给的模版来改改就能用,需要特殊定制可看看官方wiki,或者留言问我。

Synergy 的配置文件基本格式:

section: ''name''
    ''args''
end

配置类型有4大类:

  • screens
  • aliases
  • links
  • options

aliases

定义 host name 和 屏幕命名的关系。

那么如何获取 host name呢?

mac os 环境下:

$ hostname
## 或者
$ echo $HOSTNAME

screens

定义我们的屏幕,命名,以及在操作各个屏幕时,是否响应一些特殊按键。

Windows,Linux,Mac 都有各自的特殊按键,如win, command, meta按键等,如果不是跨平台,都不需要做特殊处理。

links

定义各个屏幕之间的排列方位,这个很重要。

{left|right|up|down}[<range>] = name[<range>]

关于range参数就比较有意思了,合理配置可是下如下效果。

section: links
     moe:
         right        = larry
         up(50,100)   = curly(0,50)
     larry:
         left         = moe
         up(0,50)     = curly(50,100)
     curly:
         down(0,50)   = moe
         down(50,100) = larry(0,50)
 end

实现了:

#       +-----------+  
#       |   curly   |  
#       |           | 
#       +-----------+ 
# +----------+ +----------+
# |    moe   | |  larry   | 
# |          | |          | 
# +----------+ +----------+ 

也就是在curly屏幕时,鼠标往左下滑,会滑到moe屏幕,往右下滑,会滑到larray屏幕。

options

其他选项,例如定义心跳间隔,屏幕切换粘连时间,

配置样例

好的还是来一个大而全的配置文件例子吧。

启动一个Synergy-core server,配置文件是必须的!

Example textual configuration file
This example comes from doc/synergy-basic.conf

# sample synergy configuration file
#
# comments begin with the # character and continue to the end of
# line.  comments may appear anywhere the syntax permits.
# +----------+  +---------+ +---------+
# | mac-mini |  | macbook | | windows |
# |          |  |         | |         |
# +----------+  +---------+ +---------+

section: screens
    # three hosts named:  mac-mini, macbook, and windows
    # These are the nice names of the hosts to make it easy to write the config file
    # The aliases section below contain the "actual" names of the hosts (their hostnames)
    mac-mini:
    macbook:
    windows:
end

section: links
    # windows is to the right of macbook
    # mac-mini is to the left of macbook
    macbook:
        right(0,100) = windows # the numbers in parentheses indicate the percentage of the screen's edge to be considered active for switching)
        left  = mac-mini
        # shift = shift (shift, alt, super, meta can be mapped to any of the others)

    # macbook is to the right of mac-mini
    mac-mini:
        right = macbook

    # macbook is to the left of windows
    windows:
        left  = macbook
end

section: aliases
    # The "real" name of windows is John-Smiths-windows-3.local. 
    # If we wanted we could remove this alias and instead use John-Smiths-windows-3.local everywhere windows is above. 
    # Hopefully it should be easy to see why using an alias is nicer
    macbook:
        Pauls-MBP.local
    mac-mini:
        jumei-deMac-xp-mini.local
end

section: options
    switchDelay = 400   # 鼠标滑到边缘时,提留多久才能切换屏幕
    clipboardSharing = true # 共享剪切板
    clipboardSharingSize = 10000    # 剪切板共享字节大小限制,单位:千字节
end

启动

## 启动服务端
$ ./synergy-core --server --address 172.20.50.25:24800 --no-daemon --name macbook --config ./synergy.conf

## 启动其中一个客户端
$ ./synergy-core --client --no-daemon --name mac-mini 172.20.50.25:24801

常见问题

问题1:FATAL: An error occurred: assistive devices does not trust this process, allow it in system settings.

这是应为你运行命令行程序调用了系统的敏感接口,所有报错了。你需要给这个命令行软件授予权限.

也就是说,你用iTerm运行Synergy-core,就给iTerm授权,你用系统terminal运行的就给terminal授权。

我用的Mac,就在 系统偏好设置 > 安全性隐私 > 隐私 为其配置上。

权限授予

如果是第一次授权,一般会有个弹窗,你按照弹框点进去就行了。

问题2: synergy-core[66198:16759205] pid(66198)/euid(501) is calling TIS/TSM in non-main thread environment, ERROR : This is NOT allowed. Please call TIS/TSM in main thread!!!

你是不是还启动 Synergy GUI 程序,把它关掉就好了。

总结

synergy-core程序用着还不错,虽然配置麻烦了一点,不过鼠标,键盘映射都没问题,复制粘贴(图片都能跨屏幕传)也都正常。不过还没试过跨macos,windows使用过。试了再回来

参考

  • https://github.com/symless/synergy-core/wiki
  • https://my.oschina.net/k4nz/blog/4337405
  • https://apple.macx.cn/thread-2174542-1-1.html

Linux du、df、free 查看内存 磁盘剩余空间

如何用Linux命令查看磁盘,内存的占用,来看看du,df,free这三个命令的用法

du

显示每个文件和目录的磁盘使用空间,df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置;

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。

参数:

-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。

使用小例子

## 展示home目录占有空间大小
$ du -hs /home

## 展示 更目录下所有文件、文件夹占用空间大小
$ du -hs /* 

## 展示这个文件终于空间大小
$ du -hs /var/log/nginx.log

df命令

df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计,显示指定磁盘文件的可用空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

-a或--all:包含全部的文件系统;
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-k或--kilobytes:指定区块大小为1024字节;
-l或--local:仅显示本地端的文件系统;
-m或--megabytes:指定区块大小为1048576字节;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
-P或--portability:使用POSIX的输出格式;
--sync:在取得磁盘使用信息前,先执行sync指令;
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type:显示文件系统的类型;
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
--help:显示帮助;
--version:显示版本信息。

使用小例

## 展示磁盘使用情况
$ df -h

## 展示磁盘使用情况以及挂在的磁盘类型
$ df -Th

free命令

free命令是一个显示系统中空闲和已用内存大小的工具。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等

-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-o  不显示缓冲区调节列。
-s<间隔秒数>  持续观察内存使用状况。
-t  显示内存总和列。
-V  显示版本信息。

输出行介绍

  • Mem:表示物理内存统计
  • total:表示物理内存总量(total = used + free)
  • used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
  • free:未被分配的内存。shared:共享内存。
  • buffers:系统分配但未被使用的buffers 数量。cached:系统分配但未被使用的cache 数量

缓存区
– -/+ buffers/cache:表示物理内存的缓存统计
– used2:也就是第一行中的used – buffers-cached 也是实际使用的内存总量。 //used2为第二行
– free2= buffers1 + cached1 + free1 //free2为第二行、buffers1等为第一行
– free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
– Swap:表示硬盘上交换分区的使用情况

使用小例

## 展示当前系统内存占用
$ free 

## 展示内存使用,单位 -m
$ free -m

## 展示系统内存占用,以及交换区
$ free -mt

## 没3s展示一次 系统内存、交换区使用情况
$ free -mt -s 3

Linux tar gzip bzip zip打包 压缩 解压 命令

每次拿到压缩文件都不知道怎么解包,还在拿着后缀去百度?快快收下这篇文章吧,涵盖所有压缩格式,一站解决。

打包压缩格式

  • .zip
  • .gz
  • .bz2
  • .tar
  • .tar.gz
  • .tar.bz2

.tar格式

打包

$ tar -cvf 打包输出文件 源文件or文件目录
  • 参数说明
-c : 打包
-v或--verbose: 显示打包过程
-f : 指定打包后的文件名

解压文件

$ tar -xvf 打包文件

## 查看内部有啥文件
$ tar -tv 打包文件
  • 参数说明
-x或--extract或--get: 从备份文件中还原文件;
-v : 展示过程
-t或--list : 列出备份文件的内容;

.gz 格式

压缩文件

## 注意:源文件会消失!
$ gzip 源文件

## 压缩文件,源文件保留
$ gzip -c -3 源文件 > 压缩文件.gz

## 递归的压缩目录
$ gzip -rv 目录
  • 参数说明
-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理
-<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高;

解压缩

$ gzip -d 压缩文件

$ gunzip 压缩文件

## 详细显示中压缩的文件的信息,并不解压
$ gzip -l *

## 把当前目录中中每个压缩的文件解压,并列出详细的信息
$ gzip -dv ./*
  • 参数说明
-l或——list:列出压缩文件的相关信息;
-d或--decompress或----uncompress:解开压缩文件;

gunzip命令用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。

.tar.gz 格式

其实,.tar.gz 格式是先将文件或目录打包文 .tar 格式,再压缩为 .gz 格式

压缩

$ tar -zcvf 压缩文件名.tar.gz 源文件

参数说明

-z或--gzip或--ungzip:通过`gzip`指令处理备份文件; 也就是 `.tar.gz`

解压

$ tar -zxvf 压缩包名.tar.gz

参数说明:

-z : 解压缩
-t : 查看压缩保内文件,但是不解压缩

.bz2 格式

压缩

## 源文件会移除
$ bzip2 源文件

## 保留源文件
$ bzip2 -k 源文件
  • 参数说明
-d或——decompress:执行解压缩;
-c或——stdout:将压缩与解压缩的结果送到标准输出;
-k或——keep:bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数;

bzip2 不能压缩目录

解压缩

## 解压缩,默认不保留压缩文件。加 -k 可保留压缩文件
$ bzip2 -d 压缩文件

## 解压到标准输出:
$ bzip2 -dc filename.bz2 > filename

## 检查展示压缩文件内容,不解压
$ bzip2 -tv zipFile.bz2
  • 参数说明
-d或——decompress:执行解压缩;
-t或——test:测试.bz2压缩文件的完整性;
-v或——verbose:压缩或解压缩文件时,显示详细的信息;

.tar.bz2 格式

.tar.bz2 格式是先将文件或目录打包文 .tar 格式,再压缩为 .bz2 格式

压缩

tar -jxvf 压缩包名.tar.bz2 源文件or文件目录
  • 参数说明
-j : 使用`bzip2`处理,压缩为 .tar.bz2 格式

解压

$ tar -jxvf 压缩包名.tar.bz2
  • 参数说明:
-x : 解压
-t : 查看压缩保内文件,但是不解压缩
-C : 指定解压的目录(注意,该选项必须放在后面)

.zip 格式

一般Linux没有默认安装 zip 软件,需要手动安装 zip 以及 unzip 两个软件!

## debian,ubuntu
$ apt-get install zip unzip -y

## centos
$ yum install zip unzip -y

## mac os 目测有预装

压缩

$ zip 压缩文件名.zip 源文件

## 压缩目录
$ zip -r 压缩文件名.zip 文件夹目录

解压缩

$ unzip 压缩文件 [-d <文件解压缩后所要存储的目录>]

参考

  • https://man.linuxde.net/tar
  • https://man.linuxde.net/bzip2
  • https://segmentfault.com/a/1190000014479275

Windows下 VirtualBox Linux 挂载 宿主机磁盘 vbox

Windows 环境下 VirtualBox 如何挂载磁盘到 Linux 呢?

Windows 下 Virutal Box Linux 磁盘挂载

为什么

往往,我们是在Windows 环境下编辑代码,在Linux 环境中挂载代码文件并运行。这样编辑了代码,能立马运行看到结果,而不是通过ftp、scp或者rsync同步代码。

共享文件

Virtual Box 这款优良的开源虚拟机软件,为我们提供了方便的文件挂载功能。不过不是开箱即用,需要而外安装软件——VBoxGuestAdditions

今天就讲以下如何配置文件挂载。

开始安装

  1. 检查下当前Virtual Box(后简称vbox) 软件版本号。好的,我们可以得到版本号——5.1.26

vbox version

  1. 访问 http://download.virtualbox.org/virtualbox/ 找到对应版本的目录,比如我这里就访问的 http://download.virtualbox.org/virtualbox/5.1.26/ ,然后下载对应版本的 VBoxGuestAdditions 软件,也就是:http://download.virtualbox.org/virtualbox/5.1.26/VBoxGuestAdditions_5.1.26.iso

vboxguest

  1. 在vbox将这个 iso 文件挂载到 Linux 虚拟机的光盘上

add iso

  1. 讲下载的ISO文件分配到 Linux 虚拟光驱上
## 通过mount命令将cdrom挂载到/mnt/ISO
$ mkdir /mnt/ISO

$ cd /mnt/ISO

$ ls

ls

注意:可能需要 sudo 权限!加上即可。

  1. 运行 VBoxGuestAdditions 安装脚本
$ sudo sh ./VBoxLinuxAddition.run

如果提示软件依赖,试着安装 gcc gcc-c++ make kernel-devel kernel-headers

run

  1. 配置共享目录

共享文件夹目录就是 Windows 的目录,共享文件夹名称就是一个代号。

share

  1. Linux 虚拟机内挂载
## 创建一个目录用来放挂载 Windows 目录
$ mkdir /mnt/share

## 挂载 共享目录,share 就是 步骤6 中的 共享文件夹名称
$ sudo mount -t vboxsf share /mnt/share

## 以 555 权限挂载
$ sudo mount -t vboxsf -o umask=222 share /c/users-ro

## 以 777 权限挂载
sudo mount -t vboxsf -o umask=000,dmode=777,fmode=777 share /c/users

ls 777 555

注意文件挂载的 访问mod是不可以改变的,也就是在挂载的那一刻就决定了(Windows,Linux的文件权限体系差别挺大的,就别强求了),如果你对某些文件的访问有特殊配置要求,建议单独挂载目录。

  1. 解除挂载
$ sudo umount /c/users
$ sudo umount /c/users-ro