Matrix 首页推荐 

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


引言

有快速复制 iOS 文本到 Linux 的小需求,对微信发送消息仅仅为了传输剪贴板内容而登录一个 IM 的方式感到不适;网页端微信登录需要扫码,我也绝不会在 Linux 下安装微信。以前使用 flomo 进行同步,和微信网页端的区别是可以密码登录,也无需每次都登录,但是同步起来需要时间,比起 Apple 生态的「接力」(Handoff)实在相形见绌。

实践

「快捷指令」能不能做到呢?发现快捷指令中「脚本」分项下有 Shell:通过 SSH 运行脚本。

Run Script Over SSH

图中使用英文界面是因为个人觉得和代码相关的内容使用中文翻译没有直接使用英文直观。脚本命令十分简单,实测可以直接编写运行多行复杂脚本;或者直接在 Linux 上写好 Shell 脚本文件,在指令中使用一行命令运行脚本文件即可。

参考环境是基于 wlroots 的 dwl,在 Wayland 下使用 wl-clipboard 的命令为:

echo $Clipboard | wl-clip -nop

其中-n参数指定不复制转行符号1-o参数代表只伺服一次复制就退出,在制作这个快捷指令时,我发现使用「通过 SSH 运行脚本」和在一个真实 SSH 客户端运行命令还是有一些出入,比如在运行上面的命令后快捷指令不能停止,即使加上&>/dev/null 2>&1后台运行依然不能结束;-p代表指定使用上次的复制内容2。运行成功后需要使用wl-paste -np 得到传输的剪贴文本3

Shell 命令及参数

X11 下其实方便一些——

echo $Clipboard | DISPLAY=:0 xclip -sel clip -r &>/dev/null 2>&1

注意 X 协议下需要指定DISPLAY变量,这里指定常见的本地0显示,也可以使用-d参数指定显示。同样的也需要指定-sel参数指定使用上次的复制内容,-r代表不复制换行符,这是针对某些情况下,需要复制的内容后其实应该是wrap却有换行符,否则指令运行后在Linux上粘贴得到的是断开的同一段文字

wrap 粘贴却得到换行

最后的&>/dev/null 2>&1是为了结束快捷指令运行。X 协议下指令运行成功后,直接使用粘贴快捷键即可输出剪贴文本。

Linux 当然需要开启 SSH 服务,如上图所示我选择方便的默认 22 端口,使用密钥登录提高安全性。至此基本功能已完成,但使用过程中发现有不能完全复制多段文字,不清楚是否是换行符号作祟。我使用「合并文本」功能简单合并多段文字到一段。

一些处理多段文字的丑陋操作

一些其它思路

  • 其实在自己动手做之前,已多次打开少数派开始淘金,这篇文章给了我一些灵感,但使用 base64 编解码没有实践成功。
 
  • 直接编写完整脚本,可以进一步执行特定文本处理。
  • 「快捷指令」中其他指令,如变量、在每个切段中进行处理等,也许有适合预处理复制内容的操作。

总结

实在丑陋拙劣的闲暇尝试,如果有更好的方法,请怀抱大爱分享,感激不尽。

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀