#clipboard #vim #cli #networking #file-server #server-port

bin+lib copiepate

通过网络发送复制事件

4 个版本

0.2.2 2022 年 3 月 30 日
0.2.1 2022 年 3 月 25 日
0.2.0 2022 年 3 月 24 日
0.1.0 2021 年 11 月 26 日

#2362 in 命令行工具

MIT 许可证

1MB
821

Copiepate

Build Crates.io License

Copiepate 是一个小工具,可以远程设置剪贴板的内容。

我创建了这个工具,因为我经常使用远程 tmux+vim 设置,我经常需要将 vim 注册复制到我的本地桌面。

copiepate animation

用法

在本地桌面上以服务器模式启动守护程序,并使用 ssh 转发端口 2323

# Start copiepate server and listen on 127.0.0.1:2323:
copiepate --server

# In another shell, forward the server port to a remote machine:
ssh remote-machine -N -R 2323:localhost:2323

在远程机器上,copiepate 将 stdin 的内容发送到本地机器的剪贴板

# Set the clipboard content of the local machine:
echo -n "New clipboard content" | copiepate

设置和安装

使用 Rust Cargo

# On GNU+Linux you'll need xorg-dev libraries.
# On other OSes (MacOS and Windows) this step is unecessary.

# Ubuntu/Debian:
sudo apt install xorg-dev libxcb-shape0-dev libxcb-xfixes0-dev

# Install copiepate (both server and client) using cargo:
cargo install copiepate


# IMPORTANT: generate a unique secret key that will be shared
# between on the client and the server using openssl:
openssl rand -base64 32

# Create a configuration file (both server and client) with a scret:
mkdir -p ~/.config/copiepate
cat  << EOF > ~/.config/copiepate/config.toml
secret = "<insert secret generated by openssl>"
EOF

Vim 集成

您可以使用 copiepate 通过网络发送 vim 注册的内容

" Using Plug as plugin manager:
Plug 'dimtion/copiepate', { 'rtp': 'vim' }

此插件创建了以下默认绑定

" Send the default register
noremap <leader>y :CopiePateReg<CR>

" In visual mode, send current selection
vnoremap <leader>y :CopiePate<CR>

配置文件

Copiepate 支持使用配置文件来持久化配置。每个设置都可以存储在配置文件中或通过命令行参数。在配置文件中设置的任何设置都将被传递给命令行的参数覆盖。

运行 copiepate --help 查看设置的全列表。

# Copiepate XDG configuration file:
# ~/.config/copiepate/config.toml

# Bind to a specific address
# Optional, default = 127.0.0.1
address = "192.168.0.2"

# Bind to a non default port
# Optional, default = 2323
port = "2325"

# Set a secret in base64 format
secret = "/f7NyvhS4k90gnstzXVPk/SpRl/Ex4EX9tyHRA2rT0w="

# [Server only]
# Specify a shell command to invoke whenever a paste event is received.
# Optional, default = ""
#
# Some examples:
# Show notification in MacOS:
# exec = "xargs -I % -0 -n 1 osascript -e \"display notification \\\"%\\\" with title \\\"Copiepate\\\"\""
#
# Show notification on GNU+Linux:
# exec = "xargs -I % -0 -n 1 notify-send \"%\""
#
# Log copy events to disk:
# exec = "cat >> copiepate_events.log"
#
# Ring terminal bell:
exec = "echo -en \"\007\""

# [Client only]
# Use copiepate as a passthrough. This allows to split an stdin between the send event and stdout.
# Optional, default = false
#
# Usage example:
# $ input_process | copiepate --tee > remove_copy_of_input_process.txt
tee = true

安全性说明

在其默认配置中,copiepate 仅在本地主机地址上监听,这意味着端口没有暴露到本地网络。

警告:copiepate 使用加密以确保攻击者无法发送粘贴事件或窃听网络传输中的消息。然而,copiepate 未经过审计。我建议仅监听本地主机端口,并且仅通过安全的协议(如 SSH)转发端口,不要将 copiepate 服务器暴露给本地网络或互联网。

依赖项

~5–16MB
~162K SLoC